首页 > 解决方案 > 为什么java似乎不尊重内存限制?

问题描述

我有一个 java 应用程序,它使用以下设置运行:

/usr/bin/java ... -XX:+UseG1GC -Xms18G -Xmx22G ...

同时我可以看到java二进制文件在服务器上使用了27617528的RSS(32453352 virt)。

为什么会这样,我怎样才能确定限制java内存?

标签: javamemoryout-of-memory

解决方案


-Xmx只限制 java 堆大小 - java 应用程序可用的内存,而不是 JVM(运行 java 二进制文件)可用的内存。要限制进程的内存,您可以使用ulimit命令,或者更现代的方式来创建cgroup

$ sudo cgcreate -g memory:/memlimited
$ sudo cgset -r memory.limit_in_bytes=22G memlimited
$ sudo cgexec -g memory:/memlimited /usr/bin/java ... -XX:+UseG1GC ...

推荐阅读