プロセスが未使用のメモリを他のプロセスと共有できますか?

プロセスが未使用のメモリを他のプロセスと共有できますか?

私の実験では、約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カーネルは複雑すぎるので、正しい値を計算/表示するのを長い間中断しました。

topPS正直なところ、Linux RAMユーティリティ(、、htopなどfree)にVIRT列が表示される理由がわかりません。私はそれを使用したり興味を持っていなかったし、誰かがそれをやったことを見たことがありません。

関連情報