【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【2024年2月~】25年卒 エンジニア新卒採用の募集を開始!

【2024年2月~】25年卒 エンジニア新卒採用の募集を開始!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

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

    この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
    1
    読み込み中...
    1 票, 平均: 1.00 / 11
    5,657
    X facebook はてなブックマーク pocket
    【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

    【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

    【2024年2月~】25年卒 エンジニア新卒採用の募集を開始いたします!

    【2024年2月~】25年卒 エンジニア新卒採用の募集を開始いたします!

    【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

    【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

    この記事をかいた人

    About the author

    岡崎潤一郎

    スマートフォン向けゲームの移設及び運用経験豊富。

    日々、マルチクラウドの運用、サーバ構築・移設をこなす。案件数が増えてきたことから業務の効率を思案中。各クラウドの良さを踏まえてサーバ移設の方法などを思考することが多い。

    クラウド間や物理からクラウドなどの移設を実施しているうちに、日本MSP協会が開催しているコンペで二連覇を達成。