以下は、私のサーバーの各mysql
メモリ使用量です。apache
出力によると、pmap
約mysql
379Mが使用されており、apache
277Mが使用されています。
[root@server ~]# pmap 10436 | grep total
total 379564K
[root@server ~]# pmap 10515 | grep total
total 277588K
の出力と比較すると、top
値がほぼ一致することがわかります。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10515 apache 20 0 271m 32m 3132 S 0.0 6.6 0:00.73 /usr/sbin/httpd
10436 mysql 20 0 370m 21m 6188 S 0.0 4.3 0:06.07 /usr/libexec/mysqld --basedir=....
この値は、これら2つのプロセスの現在のメモリ使用量ではありません。もしそうなら、私のシステムでは512M以上になり、ram
これが実際のサイズではなく2つのプロセスに割り当てられたページサイズであることがわかっているからです。積極的に使用しているメモリの量です。これで、プロセスのメモリ使用量がはるかに少ないことを示す追加のpmap -x
列が表示されます。Dirty
次の例に示すように、このDirty
列には最初の列の379Mではなく15Mが表示されます。私の質問は:Dirty
以下にリストされている値がプロセスで積極的に使用する「実際の」メモリ量ですか?そうでなければ、プロセスの実際のメモリ使用量をどのように知ることができますか?いいえps
、top
上記の理由です。/proc
この情報を提供できるものは私たちの下にありますか?
[root@server ~]# pmap -x 10436 | grep total
total kB 379564 21528 15340
[root@server ~]#
[root@server ~]# free -m
total used free shared buffers cached
Mem: 489 447 41 0 52 214
-/+ buffers/cache: 180 308
Swap: 1023 0 1023
[root@server ~]#
ベストアンサー1
「プロセスの物理メモリ使用量」を提供できるコマンドはありません。プロセスの物理メモリ使用量は存在しません。。
プロセスの各メモリページは次のとおりです。
- このプロセスでのみ使用される一時ストアです。
- さまざまなメカニズムを使用して他のプロセスと共有します。
- ディスクファイルにバックアップされます。
- 物理メモリまたはスワップ領域。
「汚い」数字はRAM(スワップではない)のすべてを合計し、ファイルサポートがないと思います。これには、共有メモリと非共有メモリの両方が含まれます。ただし、ほとんどの場合、フォークされたサーバーを除いて、共有メモリはメモリマップされたファイルでのみ構成されます。
表示される情報は、pmap
から取得したものです。これはプロセスの物理メモリ使用量です。 1つの数字にまとめることはできません。/proc/PID/maps
/proc/PID/smaps