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