====== JVM/Java Crash ====== ===== JVM Crash hs_err 파일 분석 ===== * ''$HOME'' 디렉토리에 ''hs_err_pid[PID].log'' 파일을 분석한다. * 상단 주석부의 ''Problematic frame: ...'' 관련 부분을 잘 살펴본다. 보통 여기에 에러 원인이 되는 코드가 나온다. * [[https://weblogs.java.net/blog/kohsuke/archive/2009/02/crash%5Fcourse%5Fon.html|Crash course on JVM crash analysis]] * [[http://www.oracle.com/technetwork/java/javase/index-137495.html|Troubleshooting Guide for Java SE 6 with HotSpot VM]] ===== JIT Compiler Loop optimization bug ===== * Java 7 예전버전 이하에서 Apache HttpClient와 Tomcat의 ''org.apache.http.client.protocol.RequestAddCookies.process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V''가 유발시킬 수 있다. * 아래와 같은 오류가 발생할 수 있다. Caused by: java.util.NoSuchElementException: null at java.util.ArrayList$Itr.next(ArrayList.java:757) ~[na:1.6.0_18] at org.apache.http.impl.cookie.BestMatchSpec.formatCookies(BestMatchSpec.java:189) ~[httpclient-4.1.3.jar:4.1.3] at org.apache.http.client.protocol.RequestAddCookies.process(RequestAddCookies.java:196) ~[httpclient-4.1.3.jar:4.1.3] at org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:108) ~[httpcore-4.1.4.jar:4.1.4] at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:174) ~[httpcore-4.1.4.jar:4.1.4] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:462) ~[httpclient-4.1.3.jar:4.1.3] at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) ~[httpclient-4.1.3.jar:4.1.3] at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) ~[httpclient-4.1.3.jar:4.1.3] * 이는 JVM의 Loop 최적화 관련 버그이며 **Java 8**과 Java **7u60**이상 버전에서는 발생하지 않는다. 그 이하 버전에서는 JVM 시작시 다음과 옵션을 줘야 한다. 성능 저하를 유발한다. -XX:-LoopUnswitching * [[https://issues.apache.org/jira/browse/HTTPCLIENT-1173|[HTTPCLIENT-1173] NoSuchElementException in org.apache.http.impl.cookie.BestMatchSpec.formatCookies]] * [[http://bugs.java.com/view_bug.do?bug_id=8021898|Bug ID: JDK-8021898 Broken JIT compiler optimization for loop unswitching]] * [[https://bugs.openjdk.java.net/browse/JDK-8021898|Broken JIT compiler optimization for loop unswitching]] * [[https://github.com/rholder/jvm-loop-unswitching-bug|JVM Loop unswitching bug 재현]]