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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

4回答

4777閲覧

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

Divided_by_Zero

総合スコア42

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

1クリップ

投稿2016/05/23 14:44

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

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

bash

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

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などお使用してください。

投稿2016/05/23 22:29

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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/23 21:58

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Divided_by_Zero

2016/05/24 14:55

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

0

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

投稿2016/05/23 15:10

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Divided_by_Zero

2016/05/23 15:40

ご回答いただき、ありがとうございます。 topコマンド、使いこなせたら便利なんだろうな〜と思いつつ、使う場面が今の所あまりない所為か使い方を毎回忘れてしまって、他のコマンドですませるようにしちゃってました・・・(良くない 後学のため、気になった点を一つお伺いしたいのですが、 topコマンドと、それ以外のコマンドを組み合わせるのと、前者の方にどのようなメリットがあるのでしょうか? 私のイメージだと、topコマンドを使えば、大体の情報をまとめて見れるというメリットがあるのかなと考えていたのですが、是非とも、教えていただけると幸いです。
退会済みユーザー

退会済みユーザー

2016/05/23 16:06

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

2016/05/24 14:53

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

0

それで良いと思います。

もっとシンプルには、

Bash

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

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

投稿2016/05/23 15:07

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Divided_by_Zero

2016/05/23 15:27

ご回答いただき、ありがとうございます。 プログラムの性能を測りたい場面ではなく、psコマンドを実行する場面で、物理メモリサイズや論理メモリサイズを知りたい状況があるという理解で正しいでしょうか? XCodeなどで実行しているイメージで、プログラムの計測等を行うのであれば、CPU利用率やメモリ利用率などを出すのが一般的なのかな〜と思っていました。 物理メモリサイズは、CUI環境で「そういえばメモリどれくらい積んでるんだろう」と思った時、 論理メモリサイズは、「プログラムの仮想メモリ空間がどれくらい取られているんだろう」と思った時などに知りたいと思うのでしょうか? 追加の質問になってしまって申し訳ないのですが、後学のため、実例を知りたいと思い、質問させていただきました。 よろしければ、こちらも回答いただけると幸いです。
otn

2016/05/23 15:46

psを見たい目的によると思います。 プロセスの論理メモリサイズが予想外に単調に増え続ければメモリリークを疑うとか。 > 物理メモリサイズは、CUI環境で「そういえばメモリどれくらい積んでるんだろう」と思った時、 それ(積んでいる量)を知りたいときは、freeコマンドですね。 psは、「このプロセスはどれくらいの物理メモリを使っているんだろう」です。
Divided_by_Zero

2016/05/23 15:59

大変参考になります! 今までメモリリークを意識するようなプログラムを書く機会が少なかったためか、あまり意識していませんでした。。。 メモリリークと聞くと、動的にヒープ領域を獲得するCやC++で、mallocで領域獲得後、freeし忘れといったことを思い浮かべます。 あ、おバカしていました・・・ そうですよね、psはあくまでプロセス毎の情報を表示してくれるコマンドですもんね・・・ ご回答、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問