質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.31%

GNU/Linux環境で実行中のプログラムの、CPUやメモリ利用率を知りたい

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 3,472

パソコン初心者ですので、暖かい目で見ていただけると幸いです。

プログラムがCPUをどれくらい利用しているか、またメモリをどれくらい利用しているかを計測してみたいと思い、以下のようなコマンドを実行するようにしました。

ps u -p <pid> | grep -v "PID" | awk '{print $3 \",\" $4}'

今まで、このコマンド実行で正しい結果が得られるとばかり思っていたのですが、ふと、本当に正しいのだろうか?と疑問に思うようになりました

皆様であれば、CPU利用率やメモリ利用率を知りたい時、どのようなコマンドを実行するのでしょうか?

ご教授いただければ幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

0

psは実行したときのプロセスの状態を見る(Linuxでは/proc/{PID}の情報を取得しているだけです)ため、使用しているメモリの容量はわかっても、ps実行時におけるCPU使用率はわかりません。わかるのは、CPU時間、つまり、プロセスの起動から今までどれぐらいCPUの資源を使ったのかがわかります。psで出てくる"%CPU"は単純な{CPU時間}/{起動時間}にすぎず、待ちが多いプロセスで、起動している時間が長いほど、それほど意味がありません。

その一瞬を考えれば、CPUはコア数分の仕事しかしていません。コア1つの場合、psを実行した瞬間では、psのことしかCPUは処理しませんから、ps以外のCPU使用率は本来は0になります。これでは意味が無いですので、CPU使用率と言った場合は、特定の期間における、CPUがそれぞれのプロセスを処理した割合を出します。

例えば、初めにpsを使用して、CPU時間("TIME"の項目です)を出力し、1分後に再度psを使用して、CPU時間を主力します。あとは
  1分間のCPU時間 = (後のCPU時間 - 前のCPU時間) / 1分間
で割合が求められます。これと同じことを自動的に行っているのがtopです。

なお、CPU時間はコア一つに対する占有した時間です。ネイティブマルチスレッドなプロセスを複数コアで動作させた場合、100%を越える場合があります。

psは終了したプロセスの情報は取れません。実行から終了までのCPU時間を計測する場合は、timeを使用してください。OS全体のCPU使用率やメモリ使用率を取得したい場合は、vmstatやsarなどお使用してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

それで良いと思います。

もっとシンプルには、

ps h -o pcpu,pmem -p プロセスID

ただ、メモリ使用率はあまり見たいとは思いません。数字が小さいので。
代わりに物理メモリサイズ(RSS)でしょうか。目的によっては論理メモリサイズ(VSZ)。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/24 00:27

    ご回答いただき、ありがとうございます。
    プログラムの性能を測りたい場面ではなく、psコマンドを実行する場面で、物理メモリサイズや論理メモリサイズを知りたい状況があるという理解で正しいでしょうか?

    XCodeなどで実行しているイメージで、プログラムの計測等を行うのであれば、CPU利用率やメモリ利用率などを出すのが一般的なのかな〜と思っていました。

    物理メモリサイズは、CUI環境で「そういえばメモリどれくらい積んでるんだろう」と思った時、
    論理メモリサイズは、「プログラムの仮想メモリ空間がどれくらい取られているんだろう」と思った時などに知りたいと思うのでしょうか?

    追加の質問になってしまって申し訳ないのですが、後学のため、実例を知りたいと思い、質問させていただきました。
    よろしければ、こちらも回答いただけると幸いです。

    キャンセル

  • 2016/05/24 00:46

    psを見たい目的によると思います。
    プロセスの論理メモリサイズが予想外に単調に増え続ければメモリリークを疑うとか。

    > 物理メモリサイズは、CUI環境で「そういえばメモリどれくらい積んでるんだろう」と思った時、
    それ(積んでいる量)を知りたいときは、freeコマンドですね。
    psは、「このプロセスはどれくらいの物理メモリを使っているんだろう」です。

    キャンセル

  • 2016/05/24 00:59

    大変参考になります!
    今までメモリリークを意識するようなプログラムを書く機会が少なかったためか、あまり意識していませんでした。。。
    メモリリークと聞くと、動的にヒープ領域を獲得するCやC++で、mallocで領域獲得後、freeし忘れといったことを思い浮かべます。

    あ、おバカしていました・・・
    そうですよね、psはあくまでプロセス毎の情報を表示してくれるコマンドですもんね・・・
    ご回答、ありがとうございます!

    キャンセル

0

topコマンド使うんじゃないかなぁ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/24 00:40

    ご回答いただき、ありがとうございます。
    topコマンド、使いこなせたら便利なんだろうな〜と思いつつ、使う場面が今の所あまりない所為か使い方を毎回忘れてしまって、他のコマンドですませるようにしちゃってました・・・(良くない

    後学のため、気になった点を一つお伺いしたいのですが、
    topコマンドと、それ以外のコマンドを組み合わせるのと、前者の方にどのようなメリットがあるのでしょうか?
    私のイメージだと、topコマンドを使えば、大体の情報をまとめて見れるというメリットがあるのかなと考えていたのですが、是非とも、教えていただけると幸いです。

    キャンセル

  • 2016/05/24 01:06

    なにも考えずとも情報が継続して流れることがメリットでしょうね。
    細かいことはできないけど、大体の動きを掴みたい時とか便利です。

    キャンセル

  • 2016/05/24 23:53

    なるほど、マクロ的な視点で見る際に有用という認識でいいのでしょうか。
    topコマンドで大雑把に監視し、異常なパラメータが見つかったら他のコマンドで詳しく調査・・・といった流れでしょうか

    大変参考になります。
    ありがとうございます!

    キャンセル

0

参考情報:

...
iotop:Top に似たI/Oユーティリティ
iftop:ネットワークのトラフィック量をリアルタイムに把握
atop:An advanced interactive monitor
htop:Interactive process viewer
slabtop:System and process monitoring utilities
innotop:MySQL and InnoDB モニタリング
varnishtop:High-performance HTTP accelerator
mongotop:High-performance, schema-free document-oriented
mytop: A top clone for MySQL
...

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/24 23:55

    ご回答、ありがとうございます。
    topコマンドに似たようなものってこんなにあるんですね・・・
    top
    \_ iotop
    \_ ...
    \_iftop
    \_ ...
    のような具合に、マクロ的な視点からミクロ的な視点に徐々にシフトしていくと、効率的に問題箇所を発見することができるのでしょうか
    大変参考になります・・・

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.31%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る