httpdやPostgreSQLのメモリ使用量をpsコマンドでソートして調べる

サーバで、httpdPostgreSQLを稼働させているいるのですが、それぞれのプロセスがどの程度メモリを使用しているのか調べる必要がでてきたため、ちょっと調べました。以下はその時のメモです。

psコマンド

Linuxでプロセスの情報を調べるのであれば、やはりpsコマンドだろうということでこのコマンドを中心に調べました。少しぐぐったところ、以下のページを見つけることができました。こちらのページで私のやりたい事は全て記載されていました。ほんと感謝です。

clmemo@aka: Linux でプロセスのメモリー使用量をソート表示する
clmemo@aka: Linux でプロセスごとのメモリー使用量を調べる
clmemo@aka: ps + grep の Tips

psコマンドの詳細出力オプション"u"と"l"

psコマンドでプロセスの詳細情報を出力しようと思った場合、"u"もしくは"l"のオプションを使用することになるようです。私はなぜか"u"を使用していることが多かったのですが、今回コマンドを調べるなかで、"l"の方がいいかもと思える点がありまいた。その点は、プロセスの状態がより細かく出力されるという点です。出力項目については、以下のページに説明がありました。
CodeZine(コードジン)

psコマンドの出力項目"VSZ"と"RSS"

メモリに関する項目は、"VSZ"と"RSS"の2つがあるようです。現在の使用量という点では"RSS"を見ればよいのかな、と自分は判断しました。"VSZ"は仮想メモリのことらしいので、細かいところまでは気にしないことにします。以下のページに説明がありました。
VSZとRSSとスワップ | 曖昧/旬
httpd.confによるWebサーバの最適化 (3/3):実用 Apache 2.0運用・管理術(3) - @IT

psコマンドのソートオプション

psコマンドには、--sortというオプションがあるようです。こちらを使用することで簡単に結果をソートできます。このオプションでは、昇順降順を制御することができるようになっており、項目名の前にマイナスをつけると降順ソートになるようです。

ps alx --sort -rss
ps alx --sort -vsz

grepをパイプした時にヘッダ行も出力したい

psの結果から自分の欲しい行だけ抽出する場合、grepコマンドをパイプでつないで処理すると思います。今回調べている中で小技を見つけました。headコマンドで先頭行を取り出し、&&で継続してコマンドを実行することでヘッダ行を付けて出力するというものです。

ps alx | head -1 && ps alx

grepをパイプした時にgrepを結果から消したい

前述の内容に関連して、出力結果から実行したgrepの出力を消す小技も見つけました。grepの条件部分を少し工夫することで出力を消します。

ps alx | head -1 && ps alx | grep "[p]ostgres"