2011-01-10 19 views
8

私は、JavaプロセスがLinux(red-hat)マシンでどれくらいのメモリを取ることができるかをインターネットで調べています。 (私はヒープについて話しているのではなく、Javaによって取り込まれたメモリの総量がLinuxでプロセスメモリの制限を調べる方法は?

私はそのマシンで何かを実行する権限がありません。だから私は単にメモリ不足状態になるまでメモリを消費するプログラムを実行することはできません。

しかし、私は設定ファイルなどをチェックする権限を持っています(例えば、cat/proc/meminfoを実行しようとしましたが、理解できません。私は約知りたい)。

私は、プログラムを実行する権限を持っている別の赤い帽子のマシンでJavaプログラムを試しました。そして、私はJavaプログラムが約3GBまで成長するのを見ることができました。

プロセスがどれくらいのメモリを取得できるかわかりますか?

答えて

8

ulimitはあなたの友人です。 Javaプロセスは他のプロセスと変わりません。しかし、ulimit -aを実行することさえできないなら、あなたの質問に答えることは難しいです。時間やメモリ消費量であなたケージプロセスを(そして、それはフォークです)することができますtimeoutツールにつながる、Limiting time and memory consumption of a program in Linux

+0

私は "ulimit -a"を実行しましたが、私が得たものは、試してみるためにたくさんのオプションを付けて出力しました。だから私は "ulimit -m"を試しました。結果は "unimited"でした。私はそれが何を意味するのか分かりませんが、プロセスが無制限のメモリを取ることができるとは考えていません。 – rk2010

+2

@ rk2010は、どのプロセスでもメモリの使用量に制限がないことを意味します。唯一のハード制限は、コンピュータに搭載されているRAMとスワップメモリ​​の容量です。 –

+0

@マティアスしかし、特定のプロセスが3GB以上のメモリを消費することはできないと述べているインターネット上にはあまりにも多くの情報(曖昧)があるようです。あなたの意見は何ですか? – rk2010

4

はここに便利な読み取ります。

2

私はこの正確な問題に取り組んでおり、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 

のようなグループにプロセスを追加することができます。コントローラにメモリ使用量を問い合わせる機能もあります。

関連する問題