%20%E3%83%A1%E3%83%A2%E3%83%AA%E4%BD%BF%E7%94%A8%E9%87%8F%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%92%E4%B8%A6%E3%81%B9%E6%9B%BF%E3%81%88%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
pmap -x
例えば、匿名とスタックマッピングを合計することで、非共有メモリ使用量を計算することができました。
sudo pmap -x $THE_PID |egrep 'anon|stack' | awk '{print $2}' | paste -sd+ | bc
ps
しかし、同様の情報を取得する方法がまったく見つかりません。列top
は表示されますSHR
が、共有されていないメモリで並べ替える方法は提供されていないようです。RSS には共有ページが含まれますが、AFAICS ではプロセスがアクセスした共有ページのみであるため、RSS による並べ替えは役に立ちません。
したがって、同じ 16 GB の共有アドレス空間を使用する 2 つのプロセスがある場合、どちらのプロセスが共有メモリをより多く使用したかに基づいてソートされます。両方のプロセスが同じ量の shmem またはそれに近い量を使用した場合を除き、どちらのプロセスがより多くのプライベート (非共有) メモリを割り当てたかに基づいてソートされることはありません。
同様の問題は、共有ライブラリの読み取り/書き込みマッピングや、祖先からのコピーオンライトページを共有するfork
ed されたが 'd されていないプロセスでも発生します。exec
これは...役に立ちません。
出力を式でソートする方法を調べましたtop
。しかし、ソート構文でサポートされているかどうかはわかりません。
これは非常に明白なことのように思えますが、ps は共有情報をまったく公開しません。
何か見落としていることがあれば教えてください。