
我想比較 google chrome 和 firefox 使用了多少實體記憶體和 CPU 功率。所以我嘗試使用 htop 來執行此操作,我通常會使用 htop 來追蹤我的系統資源,但發現我無法得出結論。我已經閱讀了幾個線程,但我仍然感到困惑,這就是為什麼:當我使用 F4 過濾例如 chrome 時,htop 向我顯示了數十個任務,我不知道它們是線程還是進程。 AFAIK 執行緒共享相同的位址空間,但進程不共享。我可以按 F5 來查看樹視圖,並且所有任務都有一個父任務。假設 RES 列中父任務的值給出總內存,而 CPU% 列中的值給出該程式的總 CPU 使用率,無論該程式是否使用多個進程或線程,這顯然是錯誤的。我透過做這個小實驗發現了這一點:我運行了一個 python 程序,發現它使用多處理進行一些計算。這是我在 htop 中看到的:CPU% 列中的父值總是顯示 0,但有 7 個任務達到 100%(我的系統有 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 自由飛機 | awk '{ SUM += $9} END { print SUM }' 我得到 0 因為它只得到這個命令: /usr/share/freeplane/freeplane.sh 但不是這個: /usr/sbin/java -Xmx512m -自由飛機
ps auxf 似乎會計算所有內容,對於 chrome,我得到的結果是:
$ ps auxf | grep chrome | awk '{ SUM += $4} END { print SUM }'
5.024G
這似乎更現實。雖然如果我用以下方法測量已用記憶體:
$ free -h
在關閉 Chrome 之前和之後,我看到了 2.4Gi 的差異。
編輯:我發現 ps_mem 這使得檢查和比較每個應用程式的記憶體使用情況非常容易。