Java가 Centos VPS에서 "힙 개체를 위한 충분한 공간을 예약할 수 없습니다"

Java가 Centos VPS에서 "힙 개체를 위한 충분한 공간을 예약할 수 없습니다"
[root@lab ~]# java
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

이 문제를 해결하는 방법을 아시나요?

[root@lab ~]# uname -a
Linux lab 2.6.18-194.8.1.el5.028stab070.5 #1 SMP Fri Sep 17 19:10:36 MSD 2010 x86_64 x86_64 x86_64 GNU/Linux

아마도 꽤 중요한 몇 가지 추가 세부 사항은 다음과 같습니다. openvz vps입니다.

[root@lab /]# free -m
             total       used       free     shared    buffers     cached
Mem:           384         27        356          0          0          0
-/+ buffers/cache:         27        356
Swap:            0          0          0

최대 메모리를 100 이하로 설정하면 jvm을 로드할 수 있지만 사용 가능한 공간이 300MB 이상이어야 하지 않습니까?:

[root@thehacklab /]# java -Xms32M -Xmx100M -version
java version "1.6.0_0"
OpenJDK Runtime Environment (IcedTea6 1.6) (rhel-1.13.b16.el5-x86_64)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
[root@thehacklab /]# java -Xms32M -Xmx128M -version
Error occurred during initialization of VM
java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Thread.java:614)
        at java.lang.ref.Finalizer.<clinit>(Finalizer.java:194)

[root@thehacklab /]# java -Xms32M -Xmx140M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

또한 Java를 실행할 때마다 provvmpages 실패 카운터가 증가한다는 것을 알았으므로 이는 아마도 한계에 도달한 것일 수 있습니다.

[root@thehacklab /]# cat /proc/user_beancounters
Version: 2.5
       uid  resource                     held              maxheld              barrier                limit              failcnt
    10913:  kmemsize                  4349290              6173197           2147483646           2147483646                    0
            lockedpages                     0                    0               999999               999999                    0
            privvmpages                  7198                98262                98304                98304                   35
            shmpages                      671                 1647                98304                98304                    0
            dummy                           0                    0                    0                    0                    0
            numproc                        16                   33               999999               999999                    0
            physpages                    4411                43452                    0           2147483647                    0
            vmguarpages                     0                    0                98304           2147483647                    0
            oomguarpages                 4412                43453                98304           2147483647                    0
            numtcpsock                      5                   31              7999992              7999992                    0
            numflock                        5                    9               999999               999999                    0
            numpty                          1                    2               500000               500000                    0
            numsiginfo                      0                    4               999999               999999                    0
            tcpsndbuf                  107352               216752            214748160            396774400                    0
            tcprcvbuf                   81920             13351808            214748160            396774400                    0
            othersockbuf                 6984                44232            214748160            396774400                    0
            dgramrcvbuf                     0                 8472            214748160            396774400                    0
            numothersock                   10                   27              7999992              7999992                    0
            dcachesize                      0                    0           2147483646           2147483646                    0
            numfile                       674                 1154             23999976             23999976                    0
            dummy                           0                    0                    0                    0                    0
            dummy                           0                    0                    0                    0                    0
            dummy                           0                    0                    0                    0                    0
            numiptent                      14                   14               999999               999999                    0

답변1

Java 프로그램 자체는 일부 메모리를 소비합니다. 그리고 더 중요한 것은 "PermGen"을 계산하는 것을 잊었다는 것입니다. 기본 perm gen 크기가 무엇인지는 모르지만 128M 또는 심지어 256M일 수도 있습니다. JVM에 필요한 총 힙 크기는 PermGen + 힙 크기입니다.

스왑을 추가하는 것이 어때요?

또한 Linux가 메모리를 오버커밋할 수 있도록 하는 매개변수가 있어야 합니다. Google이 도움이 될 수 있습니다.

답변2

내 VPS에 132M의 여유 공간이 있는 경우 지정할 수 있는 최대 힙 크기는 22M입니다. 22M과 30M 사이에서 다양한 항목에 메모리가 부족해지고(예: pthread) 32M 이후에는 "개체 힙에 충분한 공간을 예약할 수 없습니다."라는 오류가 발생합니다. 또한 다양한 -Xmn 값을 가지고 놀았지만 결과에는 아무런 영향을 미치지 않는 것 같습니다.

이 테스트에는 sun-java6-jre debian 패키지를 사용했습니다.

"java -client -Xmx..."로 실행하여 더 높은 메모리 크기를 사용할 수 있는지 확인할 수 있습니까? 내 VM에서는 java -server가 전혀 실행되지 않습니다.

관련 정보