我有7个不同的Java守护进程,我在3个不同的服务器上运行(全部7个)。 java命令行有-Xmx2048m和-Xss1024k。 在这3台服务器上,所有21个进程显示VIRT大小不超过2.5 GB。 根据哪个守护进程,RES大小从300到1.9 GB不等。
这是应该的。
input新的服务器。 更快的CPU,更多的RAM(16 GB而不是8 GB),稍微更新的java(旧服务器上的1.6.0_10-b33,新服务器上的1.6.0_31-b04)。 两个系统(和JVM)都是64位。
将2个守护进程移到了新的服务器上。 在新的服务器上,给予相同的任务,守护进程消耗的CPU(相当于一个核心的价值)要多得多,而且要做的更less。 (从旧系统上的5110处理器移动到新系统上的5620处理器)。
几乎完全是CPU使用的额外核心(GC线程??),并报告5 GB VIRT和2 GB RES用于一个守护进程,10.5 GB VIRT和2 GB RES用于另一个守护进程。
任何想法会导致java忽略(或似乎忽略,如果是这样的话)的内存限制?
原来这是一个glibc问题。
对我来说简短的答案是:
导出MALLOC_ARENA_MAX = 1
这减少了工艺占地面积(VIRT在顶部)多达5倍。 回到在CentOS 5中看到的级别。
最近版本的glibc有一个新的功能“每线程内存池”:
1.71.1日志部分的最后一项讨论它(并且指的是一个非公开的错误….)