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

我一直在search互联网,找出一个java进程可以在Linux(红帽)机器上占用多less内存。 (我不是在说堆,而是由java 进程占用的全部内存量)

我没有权限在该机器上执行任何操作。 所以我不能简单地执行一个消耗内存的程序,直到内存不足的状态。

但是,我有权限检查configuration文件等(例如:我试图执行cat / proc / meminfo,但我不明白,它的结果似乎没有代表我想知道的参数关于)。

我已经在一个单独的红帽机器上尝试了一个java程序 – 在这个机器上我有执行程序的权限 – 我能够看到java程序长到3GB左右。

有什么方法可以找出一个进程可以得到多less内存?

Solutions Collecting From Web of "如何确定Linux中的进程内存限制?"

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 

这将限制主进程的内存和它产生的任何子进程。 它也有查询控制器内存使用情况的功能。