運用で使えるpsコマンドの便利な使い方
どうもこんにちは。
システムソリューション部の岡崎です。
今回は運用の中で使う機会の多いpsコマンドについて記入します。
PSコマンドとは
現在実行中のプロセスを表示するコマンドで構文は以下となります。
ps [オプション]
様々なオプションを指定することにより表示するプロセスを指定できるコマンドです。
使用例
$ ps PID TTY TIME CMD 12558 pts/0 00:00:00 sudo 12559 pts/0 00:00:00 su 12560 pts/0 00:00:00 bash 12611 pts/0 00:00:00 ps
$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 1.4 0.2 19632 2492 ? Ss 11:53 0:00 /sbin/init root 2 0.0 0.0 0 0 ? S 11:53 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 11:53 0:00 [ksoftirqd/0] root 4 0.0 0.0 0 0 ? S 11:53 0:00 [kworker/0:0] root 5 0.0 0.0 0 0 ? S< 11:53 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S 11:53 0:00 [kworker/u30:0] root 7 0.0 0.0 0 0 ? S 11:53 0:00 [rcu_sched] root 8 0.0 0.0 0 0 ? S 11:53 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? S 11:53 0:00 [migration/0] root 10 0.0 0.0 0 0 ? S< 11:53 0:00 [lru-add-drain] root 11 0.0 0.0 0 0 ? S 11:53 0:00 [cpuhp/0] root 12 0.0 0.0 0 0 ? S 11:53 0:00 [kdevtmpfs] root 13 0.0 0.0 0 0 ? S< 11:53 0:00 [netns] root 14 0.0 0.0 0 0 ? S 11:53 0:00 [kworker/u30:1] root 16 0.0 0.0 0 0 ? S 11:53 0:00 [xenwatch] root 17 0.0 0.0 0 0 ? S 11:53 0:00 [kworker/u30:2] root 21 0.0 0.0 0 0 ? S 11:53 0:00 [xenbus]
もしくは
$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 11:53 ? 00:00:00 /sbin/init root 2 0 0 11:53 ? 00:00:00 [kthreadd] root 3 2 0 11:53 ? 00:00:00 [ksoftirqd/0] root 4 2 0 11:53 ? 00:00:00 [kworker/0:0] root 5 2 0 11:53 ? 00:00:00 [kworker/0:0H] root 6 2 0 11:53 ? 00:00:00 [kworker/u30:0] root 7 2 0 11:53 ? 00:00:00 [rcu_sched] root 8 2 0 11:53 ? 00:00:00 [rcu_bh] root 9 2 0 11:53 ? 00:00:00 [migration/0] root 10 2 0 11:53 ? 00:00:00 [lru-add-drain] root 11 2 0 11:53 ? 00:00:00 [cpuhp/0] root 12 2 0 11:53 ? 00:00:00 [kdevtmpfs]
表示に違いはありますが、現在サーバ上で動作しているプロセスの一覧を出力することができます。
現在同じ名前のプロセスがいくつ立ち上がっているかは以下で実現できます。
$ ps -ef | grep [調べたいプロセス] | wc -l もしくは ps aux | grep [調べたいプロセス] | wc -l 31
$ ps -eo pid,user,rss,pcpu,pmem,args PID USER RSS %CPU %MEM COMMAND 1 root 2456 0.3 0.2 /sbin/init 2 root 0 0.0 0.0 [kthreadd] 3 root 0 0.0 0.0 [ksoftirqd/0] 4 root 0 0.0 0.0 [kworker/0:0] 5 root 0 0.0 0.0 [kworker/0:0H]
例ではプロセスID,ユーザ,物理メモリ使用量,CPU使用率,メモリ使用率,プロセス名を表示させています。
このように指定した項目のみ表示し、必要な情報のみ出力することができます。
指定できる項目はかなり多いのでいくつかを紹介します。
pcpu(%cpu) - プロセスのcpu 使用率
pmem(%mem) - メモリ使用率
args(cmd,command)- 文字列の引き数がついたコマンド
pid - プロセスID
ppid - 親プロセスのID
uid(euid) - 実行ユーザのID
gid(egid) - 実行グループのID
user(euser,uname) - 実行ユーザ
group(egroup) - 実行グループ
rss(rssize,rsz) - 物理メモリ使用量
lstart - プロセスの起動時刻
$ ps -eo pid,user,rss,args --sort rss PID USER RSS COMMAND 2667 ec2-user 2424 ps -eo pid,user,rss,args --sort rss 2232 root 2428 auditd 1 root 2464 /sbin/init 2544 root 2528 crond 1533 root 2572 /sbin/udevd -d 2253 root 2592 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5 2480 root 2596 /usr/sbin/sshd 2314 rpcuser 3160 rpc.statd 2639 ec2-user 3416 -bash 2519 smmsp 3848 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue 2638 ec2-user 3988 sshd: ec2-user@pts/0 2510 root 4084 sendmail: accepting connections 2490 ntp 4332 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
例ではrssの結果をソートしております。
また、項目によってソートできないため使う際は注意してください。
以下はhttpdのプロセスの起動時間でソートしようとした結果です。
$ ps -eo pid,lstart,args --sort lstart | grep httpd PID STARTED COMMAND 21544 Thu Aug 3 14:57:43 2017 /usr/sbin/httpd 21733 Thu Aug 3 14:58:42 2017 grep httpd 21734 Thu Aug 3 11:17:55 2017 /usr/sbin/httpd 38742 Thu Aug 3 12:10:51 2017 /usr/sbin/httpd 42259 Sun Jul 30 04:29:09 2017 /usr/sbin/httpd 64817 Thu Aug 3 13:32:34 2017 /usr/sbin/httpd
正しく起動時間でソートされずpidにてソートされていることが確認できます。
まとめ
運用にてどのプロセスが起動しているかなどの確認で
psコマンドを使用する機会は多いと思います。
まだまだ指定できる項目はあるのでそれらを駆使して
普段とは違う使い方をしてみると面白いと思います。