私はインターネットを精査して、JavaプロセスがLinux(レッドハット)マシンで使用できるメモリ量を調べています。(ヒープについては話していません。むしろ、 Java Process)によって占有されるメモリ
そのマシンで何かを実行する権限がありません。そのため、メモリ不足状態になるまでメモリを消費するプログラムを単純に実行することはできません。
ただし、設定ファイルなどを確認する権限はあります(例:cat/proc/meminfoを実行しようとしましたが、理解できません。知りたいパラメータを表す結果がないようです。約)。
Javaプログラムを別のRedHatマシンで試してみました-プログラムを実行する権限があります-そしてJavaプログラムを見ることができました約3GBまで成長します。
プロセスが取得できるメモリの量を知る方法はありますか?
ulimitはあなたの友達です。 Javaプロセスは他のプロセスと何ら変わりはありませんが、ulimit -aを実行することさえできない場合、質問に答えるのは困難です。
ここに役立つ読み物があります: Linuxでのプログラムの時間とメモリ消費の制限 これは timeout ツールにつながり、プロセス(およびそのフォーク)を時間ごとにケージに入れることができますまたはメモリ消費。
私はこの正確な問題に取り組んできましたが、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
これにより、メインプロセスとそれが生成する子のメモリが制限されます。また、コントローラーのメモリー使用量を照会する機能もあります。