在Linux上检索单个进程的CPU使用率和内存使用情况?

Sup*_*tux 157 linux shell memory-management cpu-usage

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

caf*_*caf 218

ps -p <pid> -o %cpu,%mem,cmd
Run Code Online (Sandbox Code Playgroud)

(您可以不使用"cmd",但这可能有助于调试).

请注意,这会给出进程在运行时的平均CPU使用率.

  • 请记住,%cpu"是使用的CPU时间除以进程运行的时间(cputime/realtime ratio),以百分比表示"(参见`ps`的联机帮助页).这不是真正及时的CPU使用率.例如,它也可能与`top`显示的非常不同. (41认同)
  • 或者你可以使用--noheader (11认同)
  • 正如上面的Xebeche所说,`ps -e -o pcpu,args`将显示进程生命周期内的cpu平均值,如果它是一个长时间运行的进程,这显然不是你想要的 (10认同)
  • 假设如果你关心单个进程的内存使用情况足以像这样监视它,它会使用大量的内存,因此共享映射带来的额外几兆字节不是问题. (6认同)
  • @Chaitanya:通过`|管道 尾巴-n + 2` (4认同)
  • `虽然是真的;做 ps -p 20283 -o %cpu,%mem,cmd; 睡眠 1; done;` 每秒获取一个连续状态。 (2认同)
  • 这不是当前情况下的 cpu 使用情况,它会误导其他人,您能否在答案中说明这一点,谢谢。 (2认同)

Man*_*nki 63

caf的一个变种答案: top -p <pid>

这会自动刷新CPU使用率,因此有利于监控.

  • 与 `pgrep` 配合良好:`top -p $(pgrep process_name)` (4认同)

小智 34

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

ps -C chrome -o %cpu,%mem,cmd
Run Code Online (Sandbox Code Playgroud)

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


Neo*_*eon 24

使用pidstat(来自sysstat - Refer Link).

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

$ pidstat -h -r -u -v -p 12345,11223 5
Run Code Online (Sandbox Code Playgroud)

  • 感谢您指出 `pidstat`,这是一个很棒的命令,对于脚本编写也很方便! (2认同)

Cir*_*四事件 12

启动程序并监控它

如果您想轻松地对可执行文件进行基准测试,则此表

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
Run Code Online (Sandbox Code Playgroud)

现在当你按Ctrl + C它退出程序并停止监视.样本输出:

CPU  MEM
20.0  1.3
35.0  1.3
40.0  1.3
Run Code Online (Sandbox Code Playgroud)

相关:https://unix.stackexchange.com/questions/554/how-to-monitor-cpu-memory-usage-of-a-single-process

在Ubuntu 16.04上测试过.


vik*_*kyd 8

ps 命令(不应使用):

top 命令(应使用):

用于top实时获取CPU使用率(当前短间隔):

top -b -n 2 -d 0.2 -p 6962 | tail -1 | awk '{print $9}'

会像这样回显: 78.6

  • 这是获取当前 CPU 使用率的最准确答案,而不是进程生命周期的平均值。 (4认同)

Alb*_*gni 5

您可以使用top -b并 grep 输出所需的 pid(-b标志 top 在批处理模式下运行),或者也可以使用-p标志并指定 pid 而不使用 grep。


小智 5

如上述caf 的回答所述,ps和某些情况下的pidstat将为您提供pCPU的生命周期平均值。要获得更准确的结果,请使用top。如果您需要先运行一次,则可以运行:

top -b -n 1 -p <PID>
Run Code Online (Sandbox Code Playgroud)

或仅处理数据和标头:

top -b -n 1 -p <PID> | tail -3 | head -2
Run Code Online (Sandbox Code Playgroud)

没有标题:

top -b -n 1 -p <PID> | tail -2 | head -1
Run Code Online (Sandbox Code Playgroud)