为什么Java似乎不尊重内存限制?

20 浏览
0 Comments

为什么Java似乎不尊重内存限制?

这个问题已经有了答案

Java使用的内存比堆大小多得多(或者正确地设置了Docker内存限制)

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

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

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

为什么会这样,我如何确保限制Java内存?

admin 更改状态以发布 2023年5月23日
0
0 Comments

使用-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 ...

0