如何在Linux(Ubuntu)上获得单个进程的CPU使用率和内存使用率?

我想在Linux上获得单个进程的CPU和内存使用情况 – 我知道PID。 希望我可以每秒都得到它,并使用“watch”命令将其写入CSV。 我可以使用什么命令从Linux命令行获取此信息?

ps -p <pid> -o %cpu,%mem,cmd 

(你可以不使用“cmd”,但是这可能对debugging有帮助)。

请注意,这会使进程在运行过程中的平均CPU使用率。

caf的答案的变体: top -p <pid>

这会自动刷新CPU使用情况,因此适合进行监视。

您可以使用进程的名称来获取结果

 ps -C chrome -o %cpu,%mem,cmd 

-C选项允许您在不知道pid的情况下使用进程名称。

使用pidstat(从sysstat – 参考链接 )。

例如每5秒使用一次监视这两个进程ID(12345和11223)

 $ pidstat -h -r -u -v -p 12345,11223 5 

启动程序并进行监视

如果您想轻松地对可执行文件进行基准testing

 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 

在Ubuntu 16.04上testing

你可以使用top -b和grep你想要的pid(带-b标志的顶部在批处理模式下运行),或者使用-p标志并指定pid而不使用grep。

 ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr 

或每个进程

 ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr |grep mysql 

正如caf在上面的回答中所评论的 ,ps和某些情况下pidstat会给你pCPU的终生平均值。 为了得到更准确的结果,请使用top。 如果您需要运行顶部,则可以运行:

 top -b -n 1 -p <PID> 

或仅处理数据和标题:

 top -b -n 1 -p <PID> | tail -3 | head -2 

没有标题:

 top -b -n 1 -p <PID> | tail -2 | head -1 

要获得应用程序的内存使用情况(与使用共享库相反,需要使用Linux smaps接口)。 这个答案解释得很好 。

 ps aux|awk '{print $2,$3,$4}'|grep PID 

其中第一列是PID,第二列CPU使用率,第三列存储器使用率。

 ps axo pid,etime,%cpu,%mem,cmd | grep 'processname' | grep -v grep 

PID – 进程ID

etime – 进程运行/生存期

%cpu – CPU使用率

%mem – 内存使用情况

cmd – 命令

用你想跟踪的任何进程replaceprocessname,mysql nginx php-fpm等…

(如果您在MacOS 10.10中,请尝试顶部的累积-c选项:

 top -ca -pid PID 

(这个选项在其他linux上不可用,用Scientific Linux el6和RHEL6试过)

以上列出了最重要的cpu​​和内存消耗过程

  ps axo %cpu,%mem,command | sort -nr | head