1

我正在尝试在 VMware 下运行的 sles10 x64 上使用 xms = xmx 分配 ram。

停止 JVM 时会抛出以下错误:

Java HotSpot(TM) 64-Bit Server VM warning: Failed to reserve shared memory (errno = 12).

The RAM of the VM is 8 GB and they are reserved.

VM 看到 8GB,可以在运行时通过 XMX 设置进行分配。

在另一个通过 VMWare 保留 16 GB RAM 的 Virtual SLES10 上,即使仅通过 echo 设置大页面和 shmax,我也没有分配 RAM 的问题。

回声 8000 > /proc/sys/vm/nr_hugepages

回声 8589934592 > /proc/sys/kernel/shmmax

在其他 SLES10 上使用 echo 命令在 /proc/meminfo 中根本没有效果。

这是我的配置,第一个是 XMS 无法分配的 SLES10。

# 更多 /apps/liferay-portal-5.2.5/tomcat-5.5.27/bin/setenv.sh
JAVA_HOME=/apps/java5
JRE_HOME=/apps/java5
JAVA_OPTS="$JAVA_OPTS -Xms3G -Xmx3G -XX:NewRatio=3 -XX:MaxPermSize=256m -XX:SurvivorRatio=20 -Dsun.rmi.dgc.client.gcInterval=1800000 -Dsun.rmi.dgc.server.gcInterval= 1800000 -XX:+UsePa
rallelGC -XX:ParallelGCThreads=4 -XX:+UseLargePages -Xloggc:/apps/gc.log -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGC -XX:+PrintGCTimeStamps -
XX:+PrintGCDetails -Dfile.encoding=UTF8 -Duser.timezone=GMT+2 -Djava.security.auth.login.config=$CATALINA_HOME/conf/jaas.config -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_C
LEAR_REFERENCES=false"


更多 /etc/sysctl.conf
kernel.shmmax=7516192768
vm.nr_hugepages=3072
vm.hugetlb_shm_group=1000

更多 /etc/securtiy/limits.conf

#                 
#

#* 软核 0
#* 硬 RSS 10000
#@student hard nproc 20
#@faculty 软 nproc 20
#@faculty hard nproc 50
#ftp 硬 nproc 0
#@student - maxlogins 4
* 软内存无限制
* 无限制的硬内存
tomcat 软内存锁 6291456
tomcat 硬盘内存锁 6291456
# 文件结束


 # 猫 /proc/meminfo
内存总量:7928752 kB
内存免费:737004 kB
缓冲区:0 kB
缓存:417368 kB
交换缓存:0 kB
活动:487428 kB
非活动:324072 kB
总高:0 kB
高免费:0 kB
低总计:7928752 kB
低免费:737004 kB
交换总数:2097144 kB
无交换:2097020 kB
脏:0 kB
写回:0 kB
AnonPages:397208 kB
映射:72180 kB
平板:62136 kB
提交限制:2915792 kB
已提交_AS:748576 kB
页表:3292 kB
Vmalloc总计:34359738367 kB
Vmalloc已使用:7028 kB
VmallocChunk:34359731271 kB
HugePages_Total:3072
HugePages_免费:2305
HugePages_Rsvd:897
巨页大小:2048 kB

# ipcs -l

共享内存限制--------
最大段数 = 4096
最大段大小(千字节)= 7340032
最大总共享内存 (kbytes) = 4611686018427386880
最小段大小(字节)= 1

信号量限制--------
最大数组数 = 1024
每个数组的最大信号量 = 250
系统范围内的最大信号量 = 256000
每个 semop 调用的最大操作数 = 32
信号量最大值 = 32767

消息:限制--------
最大队列系统范围 = 16
消息的最大大小(字节)= 65536
队列的默认最大大小(字节)= 65536

# ulimit -a
核心文件大小(块,-c)0
数据段大小 (kbytes, -d) 无限制
文件大小(块,-f)无限制
待处理信号 (-i) 65536
最大锁定内存 (kbytes, -l) 无限制
最大内存大小 (kbytes, -m) 无限制
打开文件 (-n) 1024
管道大小(512 字节,-p)8
POSIX 消息队列(字节,-q)819200
堆栈大小(千字节,-s)8192
cpu时间(秒,-t)无限制
最大用户进程 (-u) 65536
虚拟内存 (kbytes, -v) 无限制
文件锁 (-x) 无限制

在第二个 VM 上,它看起来像这样

猫 /proc/meminfo
内存总量:16190448 kB
内存免费:176812 kB
缓冲区:52752 kB
缓存:755256 kB
交换缓存:0 kB
活动:713808 kB
非活动:425300 kB
总高:0 kB
高免费:0 kB
低总计:16190448 kB
低免费:176812 kB
交换总数:35658896 kB
无交换:35658796 kB
脏:932 kB
写回:0 kB
AnonPages:333620 kB
映射:79120 kB
平板:37492 kB
提交限制:36356744 kB
已提交_AS:646284 kB
页表:3584 kB
Vmalloc总计:34359738367 kB
Vmalloc已使用:23500 kB
VmallocChunk:34359713907 kB
HugePages_Total:7224
HugePages_免费:6654
HugePages_Rsvd:582
巨页大小:2048 kB

JAVA_OPTS="$JAVA_OPTS -Xms2G -Xmx2G -XX:NewRatio=3 -XX:MaxPermSize=256m -XX:SurvivorRatio=20 -Dsun.rmi.dgc.client.gcInterval=1800000 -Dsun.rmi.dgc.server.gcI
nterval=1800000 -XX:+UseParallelGC -XX:ParallelGCThreads=2 -XX:+UseLargePages -Xloggc:/apps/gc.log -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplication
ConcurrentTime -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Dfile.encoding=UTF8 -Duser.timezone=GMT+2 -Djava.security.auth.login.config=$CATALINA
_HOME/conf/jaas.config -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=false"

hepide01pep1:~ # ipcs -l

------ 共享内存限制--------
最大段数 = 4096
最大段大小(千字节)= 8388608
最大总共享内存 (kbytes) = 4611686018427386880
最小段大小(字节)= 1

------ 信号量限制 --------
最大数组数 = 1024
每个数组的最大信号量 = 250
系统范围内的最大信号量 = 256000
每个 semop 调用的最大操作数 = 32
信号量最大值 = 32767

------ 消息:限制 --------
最大队列系统范围 = 16
消息的最大大小(字节)= 65536
队列的默认最大大小(字节)= 65536


4

2 回答 2

2

您是否尝试过较小的堆大小.. 可能是 2gig。您可以使用 java -Xmx3G -version 进行简单的尝试。让我们知道它是如何进行的以及它吐出什么。

于 2010-08-25T16:54:22.443 回答
1

我在 CentOS 5.9 以及使用 16G 堆时偶然发现了这个问题(errno 12)。

在验证 /etc/security/limits.conf 中的硬/软内存锁不受限制并且仍然出现错误后,我开始按照 Anil 的建议运行 java -version,我的所有 JAVA_OPTS 都完好无损。

我发现删除“-XX:+UseLargePages”选项可以消除该错误。

我希望这可以帮助你!

于 2013-07-01T16:48:21.873 回答