繁体   English   中英

如何确定Linux中的进程内存限制?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM