どんな事でもお気軽にお問い合わせください
0120-803-656
24時間受付致します

運用で使える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コマンドにて指定した項目のみ表示する
  • $ 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コマンドを使用する機会は多いと思います。
    まだまだ指定できる項目はあるのでそれらを駆使して
    普段とは違う使い方をしてみると面白いと思います。


    お問い合わせ 採用情報 エンジニアブログ
    ISO27001認証
    Contact PageTop
    株式会社ビヨンド

    © beyond Co., Ltd. All rights reserved.

    mautic is open source marketing automation