[英]How Limit memory usage for a single Linux process and not kill the process
[英]How to determine the process memory limit in Linux?
我一直在网上搜索一下java进程可以在linux(red-hat)机器上占用多少内存。 (我不是在讨论堆;相反,java 进程占用的全部内存量)
我无权在该机器上执行任何操作。 所以我不能简单地执行一个消耗内存的程序,直到内存不足为止。
但是,我确实有权检查配置文件等(例如:我试图执行cat / proc / meminfo,但是我无法理解它;它似乎没有任何结果代表我想知道的参数关于)。
我在一个单独的红帽机器上尝试了一个java程序 - 我有权执行程序 - 我能够看到java程序长大到3GB左右。
有什么方法可以找出一个进程可以获得多少内存?
ulimit是你的朋友。 Java进程与其他进程没有什么不同。 但如果你甚至不能运行ulimit -a,很难回答你的问题。
这是一个有用的读物: 限制Linux中程序的时间和内存消耗 ,这会导致超时工具,它允许您按时间或内存消耗来保存进程(及其分支)。
我一直在处理这个确切的问题,如果你使用的是2.6.24或更高版本,那么找到最好的解决方案是使用cgroup / cgroups 。 一个例子是这样的,这是默认的/etc/cgconfig.conf文件,底部添加了一个控制组。 此控制组将物理内存的大小限制为100MB,将总虚拟内存分配限制为200MB。
mount {
cpuset = /cgroup/cpuset;
cpu = /cgroup/cpu;
cpuacct = /cgroup/cpuacct;
memory = /cgroup/memory;
devices = /cgroup/devices;
freezer = /cgroup/freezer;
net_cls = /cgroup/net_cls;
blkio = /cgroup/blkio;
}
group daemons/java_limited_process {
memory {
memory.limit_in_bytes = "104857600";
memory.memsw.limit_in_bytes = "209715200";
}
}
配置完成后,我可以像这样添加进程
cgexec -g memory:daemons/java_limited_process /usr/local/tomcat/bin/startup.sh
这将限制主进程及其产生的任何子进程的内存。 它还具有查询控制器中的内存使用情况的工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.