EDIT: Ten powtarzalny SIGSEGV dzieje się na maszynie Linux z więcej niż jednym procem i więcej niż 2 GB pamięci, więc Java domyślnie działa w trybie -server. Co ciekawe, jeśli wymuszam "-klienta", nie ma już awarii ... (nadal nie jestem zbyt pewny, co zrobić z moim powtarzalnym SIGSEGV, ale jest to interesujące).Java VM: możliwe do odtworzenia SIGSEGV w obu wersjach 1.6.0_17 i 1.6.0_18, jak zgłaszać?
Pierwsza uwaga, że to jest nieco podobne, ale nie identyczne do następujących bo w naszym przypadku jest to tylko SIGSEGV tak się dzieje, i możemy niezawodnie wywołać go:
JVM OutOfMemory error "death spiral" (not memory leak)
Jest to związane, ponieważ zdarza się, kiedy karmimy naszą aplikację "potopem danych": dane pochodzą z plików tekstowych, a następnie są numerowane (tak, w chmurze finansowej numeracja w Javie).
Mogę niezawodnie wywołać JVM do SIGSEGV używając tylko poprawnego kodu Java.
UWAGA: Mogę niezmiennie awarii zarówno JVM 1.6.0_17 adn JVM 1.6.0_18 i kwestia ta nie jest o tym, jak rozwiązać ten problem (na przykład gry z VM Parametry może rozwiązać ten problem, ale jestem nie po tym, chcę wiedzieć, co zrobić z tym zawsze odtwarzalnym SIGSEGV).
Mam obejście, które polega po prostu na używaniu Java 1.5 podczas uruchamiania naszej aplikacji (przy jednoczesnym użyciu Java 1.6 do uruchamiania IntelliJ IDEA itp. Na tym samym komputerze, jednocześnie), ale moje pytanie brzmi, czy to powinno być zgłaszane lub nie, a jeśli tak, jak to zgłosić, wiedząc, że sam dziennik zawiera zastrzeżone informacje (pełny dziennik hs_err _..._).
Błąd sprzętowy można wykluczyć dla:
to dzieje się na stacji roboczej, które regularnie osiąga miesięcy uptime (I tylko restart, gdy poprawki zabezpieczeń krytyczna wpływa na moje okrojone i utwardzony Debian Linux są wydawane , co tak naprawdę nie zdarza się często) i na które aplikacje nigdy się nie zawieszają (sprawiając, że jest to bardzo mało prawdopodobne, że jest to problem sprzętowy na tej maszynie [więcej poniżej])
ta sama aplikacja działa doskonale na tej samej maszynie pod JVM 1.5 pod tym samym obciążeniem (tak testuję aplikację: po prostu uruchamiam ją pod 1.5 VM)
sama aplikacja działa perfekcyjnie na więcej niż jednym setek maszyn klientów w ramach tego samego (gigantyczny) obciążenia (nigdy nie rozbił się raz na Windows + JVM 1.5 lub 1.6 i nigdy nie rozbił się raz na OS X + JVM 1.5 lub 1.6 [awaria oznaczałaby natychmiastową rozmowę telefoniczną od klienta])
inna aplikacja na tej samej maszynie i tym samym 1.6.0_17 lub 1.6.0_18 JVM nigdy się nie zawiesza (na przykład mam dwa wystąpienia IntelliJ IDEA działające jako dwaj różni użytkownicy na tym samym komputerze i nie ulegają awariom)
Maszyna jest testowana z memtest "regularnie" (przed instalacją nowego OS, który w ubiegłym stało po zainstalowaniu Debiana Lenny, nie tak dawno temu)
Oto powtarzalne-on-demand SIGSEGV:
... $uname -a
Linux saturn 2.6.26-2-686 #1 SMP Wed Nov 4 20:45:37 UTC 2009 i686 GNU/Linux
... $ export /home/wizard/jdk1.6.0_17/bin:$PATH
... $ java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Server VM (build 14.3-b01, mixed mode)
Uruchom aplikację, karmić go „potop danych ", poczekaj kilka sekund ...
Następnie niezmiennie do 1.6.0_17:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0xb76d0080, pid=30793, tid=2514328464
#
# JRE version: 6.0_17-b04
# Java VM: Java HotSpot(TM) Server VM (14.3-b01 mixed mode linux-x86)
# Problematic frame:
# V [libjvm.so+0x4bc080]
#
# An error report file with more information is saved as:
# /home/wizard/hs_err_pid30793.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
(zauważyć, że linia '[libjvm.so + 0x4bc080]' jest spójna w każdym SIGSEGV 1.6.0_17)
lub 1,6 .0_18:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0xb77468f0, pid=722, tid=2514516880
#
# JRE version: 6.0_18-b07
# Java VM: Java HotSpot(TM) Server VM (16.0-b13 mixed mode linux-x86)
# Problematic frame:
# V [libjvm.so+0x4d88f0]
#
# An error report file with more information is saved as:
# /home/wizard/hs_err_pid722.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
Aborted
(zauważyć, że linia "[libjvm.so + 0x4d88f0]" jest zgodne z 1.6.0_18 w każdym SIGSEGV)
prob lem jest to, że plik dziennika zawiera zastrzeżone informacje , których nie można udostępnić.
Powielanie "małego testu", który odtwarza problem, jest również nierealne: jest podobne do problemu, o którym mowa powyżej, dzieje się tak tylko wtedy, gdy do aplikacji jest podawany "zalew danych".
Zauważ, że dokładnie ta sama aplikacja, na dokładnie tym samym sprzęcie, z dokładnie tą samą maszyną JVM, ale inną wersją Linuksa (miałem wcześniej Etail Debiana) nie wyzwoliła tego SIGSEGV raz.
Ale to nie znaczy, że JVM nie ponosi winy: nadal może to być kwestia JVM.
Czy powinienem to zgłosić i jak? (pamiętając, że napisanie "powtarzalnego, malutkiego przypadku testowego" ma charakter urojeniowy, a dziennik zawiera zastrzeżone informacje, które nie powinny wyciekać). Czy powinienem edytować dziennik i wysłać go?
Jaka jest procedura zgłaszania tak odtwarzalnego SIGSEGV, gdy dziennik zawiera zastrzeżone informacje, a przypadek testowy odtwarzający problem nie jest realnie wykonalny?
Czy któryś z was odniósł sukces otwierając taki błąd, a następnie zobaczył go rozwiązany w kolejnej wersji Java?
Czy uważasz, że to dobre "dla społeczności Java" zgłosić taki problem, czy po prostu nie powinienem się przejmować, ponieważ to nie jest ważne?
Czy to nadal ma zastosowanie w najnowszej wersji Java? Rozważ także użycie IBM Java lub JRocket. –
@ Thorbjørn Ravn Andersen: Sprawdzę później wieczorem i zgłoś tutaj – SyntaxT3rr0r
@ Thorbjørn Ravn Andersen: Właśnie pobrano wersję JRE: 6.0_25-b06. Dokładna ta sama awaria: -/ – SyntaxT3rr0r