HeimJavaJavaInterview FragenInterview mit einer bestimmten Gruppe: Wie sollten Sie das Problem beheben, wenn Sie online auf OOM stoßen? Wie kann man es lösen? Welche Optionen?
Interview mit einer bestimmten Gruppe: Wie sollten Sie das Problem beheben, wenn Sie online auf OOM stoßen? Wie kann man es lösen? Welche Optionen?
OOM bedeutet, dass im Programm eine Schwachstelle vorliegt, die durch den Code oder die JVM-Parameterkonfiguration verursacht werden kann. In diesem Artikel erfahren die Leser, wie sie Fehler beheben können, nachdem ein Java-Prozess OOM ausgelöst hat.
Es wird oft gesagt, dass man Ehrfurcht vor der Produktionsumgebung hat, und das schnelle Lösen von Problemen ist auch ein Zeichen der Ehrfurcht
Warum OOM
OOM steht für „Out Of Memory“, was bedeutet Der Speicher ist erschöpft. Wenn die JVM nicht über genügend Speicher verfügt, um dem Objekt Speicherplatz zuzuweisen, und der Garbage Collector keinen Speicherplatz zum Recyceln hat, wird dieser Fehler ausgegeben
Warum tritt OOM auf? Dies wird im Allgemeinen durch diese Probleme verursacht Zuweisung: Der JVM-Initialisierungsspeicher ist klein und das Unternehmen verwendet viel Speicher. Oder die Zuweisung von Speicher in verschiedenen JVM-Bereichen ist unangemessen. Code-Schwachstelle: Ein bestimmtes Objekt wird häufig beantragt, aber danach nicht freigegeben wird nicht mehr verwendet, was zu einer Speichererschöpfung führt
Speicherverlust: Der beantragte Speicher wird nicht freigegeben, sodass die virtuelle Maschine den Speicher zu diesem Zeitpunkt nicht mehr verwenden kann . Da der Antragsteller nicht mehr verwendet wird und von der virtuellen Maschine nicht anderen zugewiesen werden kann
Speicherüberlauf: Der verwendete Speicher überschreitet die Speichergröße, die die JVM bereitstellen kann. Dies wird als Überlauf bezeichnet Wenn weiterhin ein Speicherverlust besteht und er schließlich überlaufen muss, stehen die beiden in einem kausalen Zusammenhang.
Gemeinsame OOM-Typen sind die folgenden: Überlauf der permanenten Java7-Generierung (Methodenbereich), der zum Speichern von Daten wie Klasseninformationen, Konstanten, statischen Variablen und vom Just-in-Time-Compiler kompiliertem Code verwendet wird, die von der virtuellen Maschine geladen wurden. Wenn eine Klasse zum ersten Mal geladen wird, werden Metadaten in der permanenten Generation gespeichert. Normalerweise treten sie in einer großen Anzahl von Klassenobjekten oder JSP-Seiten auf oder werden durch die Verwendung der dynamischen Proxy-Technologie von CgLib verursacht.
[xxx@xxx ~]# jmap -heap 15162
Attaching to process ID 15162, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.161-b12
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40 # 最小堆使用比例
MaxHeapFreeRatio = 70 # 最大堆可用比例
MaxHeapSize = 482344960 (460.0MB) # 最大堆空间大小
NewSize = 10485760 (10.0MB) # 新生代分配大小
MaxNewSize = 160759808 (153.3125MB) # 最大新生代可分配大小
OldSize = 20971520 (20.0MB) # 老年代大小
NewRatio = 2 # 新生代比例
SurvivorRatio = 8 # 新生代与 Survivor 比例
MetaspaceSize = 21807104 (20.796875MB) # 元空间大小
CompressedClassSpaceSize = 1073741824 (1024.0MB) # Compressed Class Space 空间大小限制
MaxMetaspaceSize = 17592186044415 MB # 最大元空间大小
G1HeapRegionSize = 0 (0.0MB) # G1 单个 Region 大小
Heap Usage: # 堆使用情况
New Generation (Eden + 1 Survivor Space): # 新生代
capacity = 9502720 (9.0625MB) # 新生代总容量
used = 4995320 (4.763908386230469MB) # 新生代已使用
free = 4507400 (4.298591613769531MB) # 新生代剩余容量
52.56726495150862% used # 新生代使用占比
Eden Space:
capacity = 8454144 (8.0625MB) # Eden 区总容量
used = 4029752 (3.8430709838867188MB) # Eden 区已使用
free = 4424392 (4.219429016113281MB) # Eden 区剩余容量
47.665996699370154% used # Eden 区使用占比
From Space: # 其中一个 Survivor 区的内存分布
capacity = 1048576 (1.0MB)
used = 965568 (0.92083740234375MB)
free = 83008 (0.07916259765625MB)
92.083740234375% used
To Space: # 另一个 Survivor 区的内存分布
capacity = 1048576 (1.0MB)
used = 0 (0.0MB)
free = 1048576 (1.0MB)
0.0% used
tenured generation: # 老年代
capacity = 20971520 (20.0MB)
used = 10611384 (10.119804382324219MB)
free = 10360136 (9.880195617675781MB)
50.599021911621094% used
10730 interned Strings occupying 906232 bytes.
Nach dem Login kopieren
🎜通过查看 JVM 内存分配以及运行时使用情况,可以判断内存分配是否合理🎜
Darüber hinaus können Sie die ressourcenintensivsten Objekte anzeigen, während die JVM ausgeführt wird, jmap -histo:live 15162 | mehrjmap -histo:live 15162 | more
JVM-Speicherobjektliste wird nach der vom Objekt belegten Speichergröße sortiert
instances: Anzahl der Instanzen
bytes: unit byte
class name: class name
Natürlich sieheCustomObjTest Objektinstanz und beansprucht zu viel SpeicherLeider weist die Lösung Einschränkungen auf weil es nur das Problem beheben kann, dass Objekte zu viel Speicher belegenwobei „[“ beispielsweise ein Array darstellt, „[C“ ein Char-Array darstellt und „[B“ ein Byte-Array darstellt. Wenn der Array-Speicher zu viel beansprucht, wissen wir nicht, welche Objekte ihn enthalten, also müssen wir den Speicher für die Offline-Analyse sichern
jmap -histo:live Führen Sie diesen Befehl aus. Die JVM löst zuerst GC aus und sammelt dann Statistiken Speicherbild des Java-Prozesses, in dem es hauptsächlich
Systeminformationen, Eigenschaften der virtuellen Maschine, vollständiger Thread-Dump, Status aller Klassen und Objekte und andere Informationen
Wenn ein Programm einen Speicherüberlauf oder GC hat Ausnahme: Es besteht der Verdacht, dass ein JVM-Speicherleck aufgetreten ist. Dann können wir die Dump-Datei zur Analyse exportieren. Fügen Sie der JVM-Startparameterkonfiguration die folgenden Parameter hinzu
Wenn Sie online auf einen JVM-Speicherüberlauf stoßen, können Sie das Problem mit den folgenden Schritten beheben
jmap -heap Überprüfen Sie, ob die Speicherzuweisung zu klein istjmap -heap 查看是否内存分配过小
jmap -histo 查看是否有明显的对象分配过多且没有释放情况
jmap -dump
jmap -dump Exportieren Sie den aktuellen Speicher-Snapshot der JVM und analysieren Sie den Snapshot mit Tools wie JDK oder MAT. 🎜🎜🎜🎜Wenn das Problem oben nicht lokalisiert werden kann, müssen Sie es überprüfen Ob die Anwendung ständig Ressourcen erstellt, z. B. Netzwerkverbindungen oder Threads, kann dazu führen, dass die Systemressourcen erschöpft werden. 🎜🎜🎜
Das obige ist der detaillierte Inhalt vonInterview mit einer bestimmten Gruppe: Wie sollten Sie das Problem beheben, wenn Sie online auf OOM stoßen? Wie kann man es lösen? Welche Optionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Sie müssen Spring kennen, also lassen Sie uns über die Reihenfolge aller Benachrichtigungen von Aop sprechen. Wie wirkt sich Spring Boot oder Spring Boot 2 auf die Ausführungsreihenfolge von Aop aus? Erzählen Sie uns von den Fallstricken, auf die Sie bei AOP gestoßen sind?
OOM bedeutet, dass im Programm eine Sicherheitslücke vorliegt, die durch den Code oder die JVM-Parameterkonfiguration verursacht werden kann. In diesem Artikel erfahren die Leser, wie sie Fehler beheben können, wenn ein Java-Prozess OOM auslöst.
Man kann sagen, dass OOM eines der Probleme ist, die wir Entwickler am meisten fürchten, und die Ursachen liegen im Wesentlichen in der Code- oder JVM-Parameterkonfiguration. In diesem Artikel erfahren die Leser, wie sie Fehler beheben können, wenn ein Java-Prozess OOM auslöst.
Das Extrakapitel der Java-Concurrent-Programming-Reihe, C A S (Compare and swap), ist nach wie vor in einem leicht verständlichen Stil mit Bildern und Texten gehalten und ermöglicht den Lesern eine verrückte Konversation mit dem Interviewer.
Unterschätzen Sie nicht die schriftlichen Prüfungsfragen vieler Unternehmen. Es gibt Fallstricke, in die Sie versehentlich geraten können. Wenn Sie auf eine solche schriftliche Testfrage zu Zyklen stoßen, empfehle ich Ihnen, ruhig zu denken und Schritt für Schritt vorzugehen.
Letzte Woche ging ein Freund aus der Gruppe zu einem Interview mit Ping An Insurance. Das Ergebnis war etwas bedauerlich, aber ich hoffe, Sie lassen sich nicht entmutigen, im Grunde genommen alle Fragen, auf die Sie stoßen Das Interview kann durch Auswendiglernen der Interviewfragen gelöst werden, also arbeiten Sie bitte hart!
In diesem Artikel werden fünf Interviewfragen zur Java-String-Klasse behandelt. Ich habe während des Interviewprozesses mehrere dieser fünf Fragen persönlich erlebt. Dieser Artikel wird Ihnen helfen zu verstehen, warum die Antworten auf diese Fragen so sind.
Dieser Artikel hat insgesamt mehr als 30.000 Wörter und umfasst Linux-Übersicht, Festplatte, Verzeichnis, Datei, Sicherheit, Syntaxebene, praktische Kämpfe, Dateiverwaltungsbefehle, Dokumentbearbeitungsbefehle, Festplattenverwaltungsbefehle, Netzwerkkommunikationsbefehle, Systemverwaltungsbefehle und Backup Komprimierungsbefehle usw. Abbau von Linux-Wissenspunkten.