Answers:
ps -p <pid> -o %cpu,%mem,cmd
(您可以省略“ cmd”,但这可能有助于调试)。
请注意,这给出了该进程在运行期间的平均CPU使用率。
| tail -n +2
ps
)。这不是真正的实时CPU使用率。例如,它也可能与top
显示的内容完全不同。
ps -e -o pcpu,args
显示CPU平均值的过程中,这显然是不的寿命你想要什么,如果它是一个长期运行的进程
CAF答案的一种变体:
top -p <pid>
这会自动刷新CPU使用率,因此非常适合监视。
pgrep
:top -p $(pgrep process_name)
您可以使用以下名称获取过程名称
ps -C chrome -o %cpu,%mem,cmd
该-C
选项允许您使用进程名称而不知道它的pid。
pid
仅应工作。ps -C chrome -o pid,%cpu,%mem,cmd
使用pidstat(来自sysstat- 参考链接)。
例如,每隔5秒使用一次来监视这两个进程ID(12345和11223)
$ pidstat -h -r -u -v -p 12345,11223 5
pidstat
这是一个很棒的命令,并且对于编写脚本也很方便!
pidstat
也给出了一个不错的平均值。遗憾的是,我还没有找到更优雅的方式pidstat -u 1 10 | grep ^Average | sort -r -n -b -k 8,8
ps
命令(不应使用):
top
命令(应使用):
用于top
实时获取CPU使用率(当前短间隔):
top -b -n 2 -d 0.2 -p 6962 | tail -1 | awk '{print $9}'
会像这样回显: 78.6
-b
: 批处理模式-n 2
:迭代次数,使用的2
原因是:首次运行时,它没有以前的示例可与之进行比较,因此这些初始值是自启动以来的百分比。-d 0.2
:延迟时间(以秒为单位,这是200ms)-p 6962
:Monitor-PIDtail -1
:最后一行awk '{print $9}'
:第9列(CPU使用率编号)启动程序并对其进行监控
如果您想轻松地对可执行文件进行基准测试,则此表格很有用:
topp() (
$* &>/dev/null &
pid="$!"
trap ':' INT
echo 'CPU MEM'
while sleep 1; do ps --no-headers -o '%cpu,%mem' -p "$pid"; done
kill "$pid"
)
topp ./myprog arg1 arg2
现在,当您按Ctrl + C时,它将退出程序并停止监视。样本输出:
CPU MEM
20.0 1.3
35.0 1.3
40.0 1.3
相关:https : //unix.stackexchange.com/questions/554/how-to-monitor-cpu-memory-usage-of-a-single-process
在Ubuntu 16.04上测试。
您可以使用top -b
并grep出所需的pid(-b
标志顶部以批处理模式运行),也可以使用-p
标志并指定pid,而无需使用grep。
要仅获取应用程序的内存使用情况(与其使用的共享库相对,您需要使用Linux smaps接口)。这个答案很好地说明了这一点。
ps aux|awk '{print $2,$3,$4}'|grep PID
其中第一列是PID,第二列是CPU使用率,第三列是内存使用率。
此处所有答案仅显示PID的内存百分比。
这是一个示例,该示例如何获取所有apache进程的rss内存使用量(以KB为单位),如果您只想观看特定的PID,请用“ grep PID”替换“ grep apache”:
watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$6}'"
打印:
Every 5.0s: ps aux -y | grep apache | awk '{print $2,$6}'
Thu Jan 25 15:44:13 2018
12588 9328
12589 8700
12590 9392
12591 9340
12592 8700
12811 15200
15453 9340
15693 3800
15694 2352
15695 1352
15697 948
22896 9360
使用CPU%:
watch -n5 "ps aux -y | grep apache | awk '{print \$2,\$3,\$6}'"
输出:
Every 5.0s: ps aux -y | grep apache | awk '{print $2,$3,$6}'
Thu Jan 25 15:46:00 2018
12588 0.0 9328
12589 0.0 8700
12590 0.0 9392
12591 0.0 9340
12592 0.0 8700
12811 0.0 15200
15453 0.0 9340
15778 0.0 3800
15779 0.0 2352
15780 0.0 1348
15782 0.0 948
22896 0.0 9360
以下命令获取特定进程每40秒平均CPU和内存使用率(pid)
pidstat 40 -ru -p <pid>
我的情况的输出(前两行用于CPU使用,后两行用于内存):
02:15:07 PM PID %usr %system %guest %CPU CPU Command
02:15:47 PM 24563 0.65 0.07 0.00 0.73 3 java
02:15:07 PM PID minflt/s majflt/s VSZ RSS %MEM Command
02:15:47 PM 24563 6.95 0.00 13047972 2123268 6.52 java
根据@caf的回答,这对我来说很好。
计算给定PID的平均值:
measure.sh
times=100
total=0
for i in $(seq 1 $times)
do
OUTPUT=$(top -b -n 1 -d 0.1 -p $1 | tail -1 | awk '{print $9}')
echo -n "$i time: ${OUTPUT}"\\r
total=`echo "$total + $OUTPUT" | bc -l`
done
#echo "Average: $total / $times" | bc
average=`echo "scale=2; $total / $times" | bc`
echo "Average: $average"
用法:
# send PID as argument
sh measure.sh 3282