prstat出力のSIZEとRSS値の意味
-
19-08-2019 - |
質問
Solarisのprstatから取得したSIZE値とRSS値の意味について、誰かが明確に説明できますか?
メモリをnew[]
で割り当て、それを満たし、delete[]
で解放するテストC ++アプリケーションを作成しました。
理解したように、SIZE値は、どのくらいの仮想メモリが<!> quot; reserved <!> quot;に関連付けられている必要があります。プロセスによって、それはメモリ<!> quot; malloced <!> quot;または<!> quot; newed <!> quot;。
そのメモリは、実際に使用しない限り(いくつかの値で埋めて)RSS値に合計されません。ただし、メモリを解放しても、RSSはドロップしません。
これら2つの値に正しく割り当てることができるセマンティクスがわかりません。
解決
RSSは(確実に)プロセスが使用している物理メモリの量を表します。 Solarisのデフォルトのメモリアロケータを使用すると、メモリを自由に再利用できることを示すためにいくつかのポインタと値を変更するだけなので、メモリを解放してもRSSについては何もしません。 そのメモリを再度割り当てて再度使用しない場合、最終的にページ分割され、RSSがドロップされます。
解放直後に解放されたメモリを返すには、次のようにSolaris mmapアロケータを使用できます。
export LD_PRELOAD=libumem.so
export UMEM_OPTIONS=backend=mmap
他のヒント
サイズは、マップされたすべてのファイルとデバイスを含むプロセスの仮想メモリの合計サイズです。 RSS は常駐セットサイズである必要がありますが、完全に信頼性はありません。 pmap からその情報を取得しようとする必要があります。
一般的なルールとして、プロセスにメモリが割り当てられると、オペレーティングシステムにメモリが戻されることはありません。 Unixシステムでは、sbrk()呼び出しがプロセスのアドレス空間を拡張するために使用され、他の方向に進む類似の呼び出しはありません。