プロセスのメモリ使用量を計算する

構成

CentOS release 5.5 (Final)



手順

例として、Zabbixサーバーのメモリ使用量を計算してみましょう。

まずはZabbix関係のプロセスをgrepします。

# ps -ely | grep zabbix

以下の出力例では読みやすさのためにヘッダ行を追記しています。上記のコマンドでgrepした場合、実際にはヘッダ行は表示されません。

S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S   101  8520     1  0  80   5  2056 31310 -      ?        00:00:01 zabbix_server
S   101  8522  8520  0  80   5  3004 31310 -      ?        00:37:19 zabbix_server
S   101  8524  8520  0  80   5 29292 45337 -      ?        01:14:22 zabbix_server
S   101  8525  8520  0  80   5 29296 45337 -      ?        01:14:31 zabbix_server
S   101  8527  8520  0  80   5 29292 45337 -      ?        01:14:25 zabbix_server
S   101  8529  8520  0  80   5 29264 45337 -      ?        01:14:18 zabbix_server
S   101  8531  8520  0  80   5 29292 45337 -      ?        01:14:29 zabbix_server
S   101  8532  8520  0  80   5  8880 45337 -      ?        00:00:04 zabbix_server
S   101  8535  8520  0  80   5  1612 31331 -      ?        00:00:36 zabbix_server
S   101  8537  8520  0  80   5  1516 31331 -      ?        00:00:34 zabbix_server
S   101  8539  8520  0  80   5  1516 31331 -      ?        00:00:33 zabbix_server
S   101  8541  8520  0  80   5  1516 31331 -      ?        00:00:36 zabbix_server
S   101  8543  8520  0  80   5  1516 31331 -      ?        00:00:32 zabbix_server
S   101  8546  8520  0  80   5  1348 31453 -      ?        00:00:03 zabbix_server
S   101  8548  8520  0  80   5  2064 31827 -      ?        00:00:01 zabbix_server
S   101  8550  8520  0  80   5  1992 31457 -      ?        01:06:53 zabbix_server
S   101  8552  8520  0  80   5  1332 31310 -      ?        00:00:19 zabbix_server
S   101  8554  8520  0  80   5  1324 31310 -      ?        00:00:13 zabbix_server
S   101  8555  8520  0  80   5  2904 45282 -      ?        00:00:33 zabbix_server
S   101  8556  8520  0  80   5 27332 31374 -      ?        02:15:11 zabbix_server
S   101  8557  8520  0  80   5 27352 31374 -      ?        02:14:46 zabbix_server
S   101  8558  8520  0  80   5 27312 31374 -      ?        02:15:04 zabbix_server
S   101  8559  8520  0  80   5 27304 31374 -      ?        02:14:39 zabbix_server
S   101  8566  8520  0  80   5  1552 31310 -      ?        00:00:08 zabbix_server
S   101  8568  8520  0  80   5  1328 31310 -      ?        00:00:03 zabbix_server
S   101 17342     1  0  89   5   488 12020 wait   ?        00:00:00 zabbix_agentd
S   101 17344 17342  0  82   5   608 12020 -      ?        00:27:23 zabbix_agentd
S   101 17345 17342  0  80   5   728 12025 -      ?        01:19:02 zabbix_agentd
S   101 17346 17342  0  80   5   728 12025 -      ?        01:18:29 zabbix_agentd
S   101 17347 17342  0  80   5   728 12025 -      ?        01:18:55 zabbix_agentd
S   101 17348 17342  0  80   5   492 12022 -      ?        00:00:37 zabbix_agentd

zabbix_serverとzabbix_agentd、二種類のプロセスが見つかりましたが、明らかにzabbix_serverの方が目的のプロセスなので、コマンド名にzabbix_serverを指定してメモリ使用量を表示します。

# ps -C zabbix_server -o vsz,rss
   VSZ   RSS
125240  2056
125240  3004
181348 29292
181348 29296
181348 29292
181348 29264
181348 29292
181348  8880
125324  1612
125324  1516
125324  1516
125324  1516
125324  1516
125812  1348
127308  2064
125240  1428
125240  1332
125240  1324
181128  2904
125496 27332
125496 27352
125496 27312
125496 27304
125240  1552
125240  1328

ここでVSZは仮想メモリサイズ、RSSは物理メモリ(実メモリ)サイズを表しています。この2つにはプロセスの一部 (page tables, kernel stack, struct thread_info, struct task_struct)が含まれていません。それらは最低20KB以上のサイズがあり、必ずメモリに常駐しています。

さて、この結果を電卓片手に集計してもいいのですが、ここではawkに渡して集計してもらいましょう。

# ps -C zabbix_server -o vsz,rss | awk '{v+=$1;r+=$2}END{print v,r}'
3527620 290632

単位はKBです。仮想メモリサイズとして3527620KB≒3.4GB、物理メモリサイズとして290632KB≒284MBを使っていることがわかりました。