2017-09-19 6 views
0

이 문제와 관련하여 비슷한 스택 오버 플로우 문제 SIGSEGV Java Fatal Error in libjvm.so이 있습니다.JVM libjvm.so에서 SIGSEGV Java 치명적인 오류가 자주 발생 함

이것은 Apache Tomcat에서 실행되는 대규모 응용 프로그램 (~ 30GB)입니다. 항상 JVM C++ 코드를 내부로 표시되는 것과 동일한 오류 메시지와 함께 실패 할 것 같다 : 나는 전체 자바 코어 덤프를 포함 시켰습니다

V [libjvm.so+0x643ee4] InstanceKlass::find_method_index(Array<Method*>*, Symbol*, Symbol*, bool, bool)+0x14 

.

https://drive.google.com/open?id=0B0rh8NWt2kRySTlleW9Dckw3a3c

방법도이 문제를 해결하기 위해 시작하는 사람이 올바른 방향으로 날 지점 수 있습니다. JDK를 최신 릴리스 레벨 (JDK 1.8 릴리스 144)로 업그레이드하려고했지만 아무 소용이 없었습니다.

+0

덤프를 들여다보고 있습니다. 이것은 당신의 문제와는 독립적이지만, 웹 애플리케이션의 classpath는 매우 혼잡합니다. 그리고 다른 버전의 라이브러리를 행복하게 믹싱하고 있습니다. 다른 버전의 Bouncy Castle 제공 업체 병 두 개와 아직 다른 버전의 추가 bc 라이브러리가 있습니다. 이러한 jar가 서명되어 있기 때문에 다른 Jar 및 다른 버전에서 BC 클래스를로드하려고 할 때 ClassLoader가 오류를 발생시켜야하므로 실제로 작동한다는 것에 놀랐습니다. 아, 그리고 bc 라이브러리는 Java 1.4 용으로 컴파일되었고 Java 8을 사용하고 있습니다. – Lothar

답변

0

덤프를 보면 핫스팟이 최적화를 시도하는 동안 문제가 발생한 것으로 보입니다. 그래서 난 당신이 시작하는 동안 설정 한 자바의 특성을 확인하고 그에 영향을 조금이있다 :

-Xnoclassgc 

이 더 이상 내가 아는 한 자바 8 아무 소용이 없습니다. 같음

-XX:MaxPermSize=256m 

사용할 가비지 수집기를 변경하려고합니다. G1.

-XX:+UseG1GC 

이것은 충돌과 관련이있을 수 있으므로 기본 설정을 사용하도록 설정을 변경하는 것이 좋습니다. 충돌이 사라지면 G1은 응용 프로그램에 적합하지 않습니다.

그리고 내 의견에서 언급했듯이 웹 응용 프로그램의 lib 디렉토리를 정리해야합니다. 서로 다른 버전의 여러 중복 라이브러리가 있습니다 (예 : bcprov-jdk14-140.jarbcprov-jdk14-1.38.jar, bcmail-jdk14-139.jarbcmail-jdk14-1.38.jar, ... 이것은 응용 프로그램을 사용자가 보던 방식으로 충돌 시키지는 않지만 버전 1.39의 bcmail에서 메일 클래스를로드하려고 시도 할 때 클래스 로더 내에서 서명 확인 검사가 실패해야합니다 버전 1.40의 BC 제공 업체와 협력하고 있습니다.

+0

똑같은 VM 인수가 다른 곳에서 사용되고 JVM이 절대 충돌하지는 않지만 그러한 것들을 합리적인 조정으로 들려줍니다. – user3892260

+0

중복 항목로드를 피하기 위해 maven pom.xml을 정리했습니다. 그것이 도움이되는지 봅시다. – user3892260

+0

다른 순열을 시도한 지 수 주일이 지난 후, 저는 G1GC를 사용하여 문제를 격리 시켰습니다. 이 설정을 생략하고 표준 G1 가비지 콜렉터를 사용하게하면 문제점이 중지됩니다. 귀하의 제안에 대해 Lothar에게 감사드립니다. – user3892260