Ubuntu 14로 업그레이드한 후 모든 JVM이 충돌하는 문제가 있습니다.
Java(oracle 및 openjdk 버전)를 다시 설치합니다. JVM 힙 매개변수를 조정하는 데 시간을 투자하고 이제 마침내 Java 앱을 실행할 수 있습니다.
이제 문제는 SQLDeveloper를 시작할 때마다 Eclipse JVM에서 "카드 표시 배열을 위한 충분한 공간을 예약할 수 없습니다"라는 메시지를 표시한다는 것입니다.
내가 올바르게 이해했다면 JVM 메모리 청크 할당과 관련이 있습니다.
이런 일이 발생하는 것을 방지하기 위해 따라야 하는 규칙이 있나요?
기계 정보:
우분투 14.04 LTS; 64비트; CPU 인텔 코어2 듀오; 8GB 메모리
Eclipse: java-7-oracle; -d64; -XX:MaxPermSize=256M; -Xms512m -Xmx512m;
Eclipse 실행/디버그: java-6-openjdk-amd64; -Xms1024m; -Xmx1024m; -XX:+직렬GC 사용;
SQLDeveloper: java-7-oracle; -XX:MaxPermSize=256M;
답변1
JVM이 연속적인 메모리 블록을 할당하려고 합니다. 시스템에 충분한 메모리가 있으므로 조각화해야 합니다.
문제를 해결하기 위해 초기 힙 크기를 매우 낮게 설정하고(기본값 128은 작동하지 않음) JVM이 이를 처리하도록 허용했습니다.
JVM 실행 매개변수를 다음에서 변경했습니다.
java-6-openjdk-amd64; -Xms1024m; -Xmx1024m;
에게:
java-6-openjdk-amd64; -Xms64m; -Xmx1024m;
업데이트:
또한 overcommit_ratio를 100(기본값)에서 50으로 낮췄습니다.
$ cat /proc/sys/vm/overcommit_ratio
100을 유지하는 것이 권장된다는 것을 알고 있지만 변경한 이후 Chromium/Eclipse/SQLDeveloper를 병렬로 실행할 때 jvm 오류가 발생하지 않습니다.