![Linux 上のプログラムの物理メモリと CPU の合計使用量を確認する](https://rvso.com/image/1585790/Linux%20%E4%B8%8A%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E7%89%A9%E7%90%86%E3%83%A1%E3%83%A2%E3%83%AA%E3%81%A8%20CPU%20%E3%81%AE%E5%90%88%E8%A8%88%E4%BD%BF%E7%94%A8%E9%87%8F%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B.png)
Google Chrome と Firefox が物理メモリと CPU パワーをどれだけ使用しているかを比較したいと思います。そこで、システム リソースを追跡するために通常使用している htop でこれを実行しようとしましたが、結論を導き出すことができません。いくつかのスレッドを読みましたが、まだ混乱しています。理由は次のとおりです。たとえば、Chrome で F4 でフィルターすると、htop にはスレッドかプロセスかわからないタスクが数十個表示されます。私の知る限り、スレッドは同じアドレス空間を共有しますが、プロセスは共有しません。F5 を押すとツリー ビューが表示され、すべてのタスクに 1 つの親があります。RES 列の親タスクの値が合計メモリを示し、CPU% 列の値が、複数のプロセスまたはスレッドを使用しているかどうかに関係なく、このプログラムの合計 CPU 使用量を示すという仮定は、明らかに間違っています。この小さな実験を行うことでそれを発見しました。いくつかの計算にマルチプロセスを使用する Python プログラムを実行しました。これは私が htop で見たものです: CPU% 列の親値はずっと 0 を示していますが、100% まで上昇するタスクが 7 つあります (私のシステムには 4 つの物理コアがあり、それぞれに 2 つのスレッドがあります)。
それで、何が起こっているのか、そしてプログラムの物理メモリと CPU の合計使用量をどのように確認できるのかを誰か説明してもらえますか?
私が読んだところによると、正確なメモリ使用量を判断するのは簡単ではありませんが、私の場合、絶対値は重要ではなく、比較に使用できる値だけが必要です。
答え1
次のコマンドを使用できます:
pgrep -P $(pgrep chrome) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
または、こちら(列を選択するには 9 ドルが必要です):
top -b -n1 | grep chrome | awk '{ SUM += $9} END { print SUM }'
その他のコマンドとアドバイスについては、以下を参照してください。
答え2
psgrep はエラーを出します:
$ pgrep -P $(pgrep chrome) | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
pgrep: only one pattern can be provided
Try `pgrep --help' for more information.
error: list of process IDs must follow -p
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
htop で PID 親タスクを確認して、次のように実行できます。
$ pgrep -P 1721 | xargs ps -o %mem,%cpu,cmd -p | awk '{memory+=$1;cpu+=$2} END {print memory,cpu}'
1.2 2.6
しかし、1.2% のメモリは低すぎるようです。
top はすべてをカウントしません。たとえば、次のようにします: $ top -b -n1 | grep freeplane | awk '{ SUM += $9} END { print SUM }' このコマンドのみを取得するため、0 が返されます: /usr/share/freeplane/freeplane.sh ただし、次のコマンドは取得しません: /usr/sbin/java -Xmx512m -Dorg.freeplane
ps auxf はすべてをカウントしているようで、Chrome の場合は次のようになります:
$ ps auxf | grep chrome | awk '{ SUM += $4} END { print SUM }'
5.024G
より現実的に思えます。ただし、使用メモリを次のように測定すると、
$ free -h
Chrome を閉じる前と閉じた後では 2.4Gi の違いが見られます。
編集: 各アプリケーションのメモリ使用量を簡単に確認および比較できる ps_mem を見つけました。