Powiedziano mi, że mogę dodać -XX:+HeapDumpOnOutOfMemoryError
parametr do opcji uruchamiania JVM do skryptu uruchamiania JBoss, aby uzyskać zrzut stosu, gdy wystąpi błąd braku pamięci w naszej aplikacji. Zastanawiałem się, gdzie te dane zostaną zrzucone? Czy to tylko konsola, czy plik dziennika? Jeśli chodzi tylko o konsolę, co się stanie, jeśli nie zaloguję się do serwera Unix za pośrednictwem konsoli?
java
jboss
memory-leaks
heap
Dmitrij Trunow
źródło
źródło
Odpowiedzi:
Oto, co ma do powiedzenia dokumentacja Oracle :
źródło
HeapDumpPath
, zobaczysz coś podobnego do tego"Unable to create /tmp/java_pidpid.hprof: File exists"
w twoim standardzie. Pamiętaj, aby przenieść plik zrzutu ze ścieżki zrzutu, aby wyczyścić drogę dla przyszłych plików zrzutu; i użyj<pid>
symbolu zastępczego w nazwie pliku, aby zwiększyć entropię w nazwie pliku.Możesz wyświetlić ten zrzut z konsoli UNIX.
Ścieżka zrzutu zrzutu zostanie podana jako zmienna zaraz po tym, jak umieściłeś wspomnianą zmienną.
Na przykład:
Możesz wyświetlić zrzut z konsoli na wspomnianej ścieżce.
źródło
Trudno mi było odczytać, co oznacza „katalog roboczy maszyny wirtualnej”. W moim przykładzie używałem programu Java Service Wrapper do wykonania jar - pliki zrzutu zostały utworzone w katalogu, w którym umieściłem program otoki, np. C: \ myapp \ bin. Powodem, dla którego to odkryłem, jest to, że pliki mogą być dość duże i zapełniły dysk twardy, zanim odkryłem ich lokalizację.
źródło
Jeśli nie używasz opcji „-XX: HeapDumpPath”, to w przypadku JBoss EAP / As domyślnie plik zrzutu sterty zostanie wygenerowany w katalogu „JBOSS_HOME / bin”.
źródło