私の実験では、約200のプロセスを実行したいと思います。それらの各々は次のより少ない量を必要とします。GB:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24688 rinkman 20 0 6082416 335536 15680 S 116.9 0.3 77:32.92 java
25314 rinkman 20 0 6614936 379040 15700 S 116.6 0.4 73:43.02 java
25780 rinkman 20 0 6082408 348140 15664 S 116.6 0.4 72:12.34 java
25994 rinkman 20 0 6082408 350592 15656 S 114.6 0.4 71:42.34 java
30472 rinkman 20 0 6749092 441492 15664 S 108.6 0.4 64:54.38 java
27052 rinkman 20 0 6548364 403040 15692 S 106.3 0.4 66:38.30 java
29314 rinkman 20 0 6022012 393656 15660 S 105.0 0.4 65:57.09 java
28173 rinkman 20 0 6681492 427816 15660 S 104.3 0.4 66:17.47 java
6つのノードにアクセスできます。100GBRAMあたりの量です。だから彼らがただ取るならGB、問題ありません。しかし、上記のように、誰もが超えなければなりません。6GB。
私は次の出力を見てとても驚きましたfree -m
。
total used free shared buff/cache available
Mem: 96481 15396 326 75 80758 80448
Swap: 16383 2336 14047
それだけを示しています15.4GB使用される。プロセスが未使用のメモリを共有できるのか?はい80.4GB実際に利用可能ですか?残念ながら、Google では興味深い情報を見つけることができません。マルチプロセッシング/スレッディングとデータ交換、公開キャッシングなどに関する記事を偶然発見しました。この質問に答えてください。
ポリスチレンこれが不可能な場合、これらのプロセスに割り当てられたメモリを減らす方法はありますか? (200のプロセスのうち8つだけが実行されました。)問題は、bashスクリプトが次の機能のみを提供することです。2GB~のためJava(これはそれの一部です):
java -Xms64m -Xmx2048m -Djava.library.path="$BEAST_LIB:/usr/local/lib:$LD_LIBRARY_PATH" -cp "$BEAST_LIB/beast.jar:$BEAST_LIB/beast-beagle.jar" dr.app.beast.BeastMain $*
だからなぜいつ必要なのか理解できない4〜5GBもっと。たとえば、他のJavaプログラムでも同じ現象が発生します。獣2またはツリーアノテーター。
答え1
間違って読んだようです。
最初の列はVIRT
重要ではなく、ほとんどの場合完全に無視する必要があります。
興味深いのは、RSS
プロセスあたりのRAMが0.5GB未満であることです。あなたは素晴らしい仕事をしました。
今、あなたの質問に答えます。
共有された「未使用」メモリのようなものはありません。使用または使用されません。一部のメモリは実際に共有されます。これはという3番目の列ですSHR
。共有ライブラリのメモリです。私が正しく覚えているなら、Linuxカーネルは複雑すぎるので、正しい値を計算/表示するのを長い間中断しました。
top
PS正直なところ、Linux RAMユーティリティ(、、htop
などfree
)にVIRT列が表示される理由がわかりません。私はそれを使用したり興味を持っていなかったし、誰かがそれをやったことを見たことがありません。