java - 为什么java似乎不尊重内存限制?
问题描述
我有一个 java 应用程序,它使用以下设置运行:
/usr/bin/java ... -XX:+UseG1GC -Xms18G -Xmx22G ...
同时我可以看到java二进制文件在服务器上使用了27617528的RSS(32453352 virt)。
为什么会这样,我怎样才能确定限制java内存?
解决方案
-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 ...
推荐阅读
- batch-file - 一个人可以通过 GOTO 传递一个变量,还是可以一个 CALL 但结束而没有返回?
- python - 从 Mega.nz 存档中抓取文本(Python)
- c# - 在 MySQL 数据库上运行迁移时出现实体框架错误。“空间/全文/哈希索引和显式索引顺序的错误使用”
- java - java命令行,无法从代码中检索命令行参数
- python - python3 kivy BoxLayout 超过另一个
- linux - Linux Docker 中的 Umbraco
- python-2.7 - cloudstorage 的 copy2 方法抛出 No api proxy found for service "memcache"
- hibernate - 休眠主键作为外键
- amazon-web-services - 使用 ssl 通过 https 重新流式传输 mp3 流
- javascript - JS 统计其他页面中具有相同类的元素个数