HP-UX General
1819868 メンバー
2477 オンライン
109607 解決策
新規ポスト

top,psで表示されるプロセスのサイズ

 
Adventure
新しいメンバー

top,psで表示されるプロセスのサイズ

topコマンドで表示される"SIZE"とpsコマンドで表示される"sz"はどのような違いがあるのでしょうか。

(表示される値の単位が違うということ以外で)

また、あるプロセスの"sz"の値はほぼ一定だが、"SIZE"の値が増えつづける場合、どのような原因が考えられるでしょうか。
1件の返信1
oops
貴重なコントリビューター

top,psで表示されるプロセスのサイズ

top の SIZE にあたるのは、ps の vsz になります。

以下の結果からもそれが明らかだと思います。

$top

:

CPU TTY PID USERNAME PRI NI SIZE RES STATE TIME %WCPU %CPU COMMAND

0 ? 13698 root 152 20 62744K 319M run 351:07 6.62 6.61 mxdomainmgr

:

$UNIX95= ps -e -o pid -o comm -o vsz -o sz | grep -e PID -e 13698

PID COMMAND VSZ SZ

13698 mxdomainmgr 62744 14872

vsz は、ps(1) の man にあるように、プロセスのテキスト、データ、およびスタック・スペースの仮想メモリサイズ(Virtual Set Size)の合計になります。したがって、ここには MMAP や SHARED MEMORY などは入っていません。また、sz は、プロセスのテキスト、データ、およびスタック・スペースの物理メモリサイズ(Resident Set Size)で、単位はページです。

top(1) の SIZE は ps(1) の vsz と同じなのですが、RES は違います。物理メモリサイズというのは同じなのですが、ややこしいことに、プロセス全体、つまり、テキスト、データ、スタックに加えて、MMAP、SHARED MEMORY、UAREA、SHARED TEXTを合計したものを示しているようです。

したがって、上記の結果からも明らかですが、ps(1)の sz から得られる値は 14872x4KB=58MB となり、top(1) の RES で示されている 319MB よりも断然小さくなってしまいます。

本来仮想メモリサイズが必ず物理メモリサイズより大きくなり、ps では算出している部分が同じなので vsz >= sz になりますが、top の場合は RES の方が SIZE よりも大きくなることがあります。

sz がほぼ一定で、SIZE が増えつづけるというのは、実メモリ上にはのせられていないが、仮想メモリは確保されているということを示しているます。

例えば、malloc(3C) でメモリを確保すると、確保した分 SIZE(vsz) が増加します。しかし、これだけでは RES(sz) は増えません。malloc(3C) で確保した領域に対してアタッチすると(例えば memset(3C) など)、物理メモリ上にのせられますので、ここで初めて RES や sz が増加します。

どちらにしても SIZE が増えつづけるということは、プロセス側でメモリを確保し続けていることになるので、リークの可能性があるのではないでしょうか?