我想知道Linux上单个进程的CPU和内存使用情况——我知道PID。希望我每秒钟都能得到它,并使用'watch'命令将其写入CSV。我可以使用什么命令从Linux命令行中获得这些信息?
当前回答
使用pidstat(来自sysstat -参考链接)。
例如,每5秒监控这两个进程id(12345和11223)的使用情况
$ pidstat -h -r -u -v -p 12345,11223 5
其他回答
caf的答案是: Top -p <pid>
这将自动刷新CPU使用情况,因此非常适合监控。
根据这个答案,我们可以通过收集N个样本,采样周期为T来估计特定进程在特定时间内的平均CPU和内存利用率,如下所示:
N=3;
T=1;
PROCESS_NAME="my_proc";
top -b -c -n $(let tmp=N+1; echo $tmp) -d ${T} -p $(pgrep ${PROCESS_NAME}) |
grep ${PROCESS_NAME} |
tee /var/tmp/foo.log |
tail -n +2 |
awk -v N=$N 'BEGIN{
c=0;
m=0
}{
c=c+$9;
m=m+$10
}END{
printf("%s %s\n", c/N, m/N)
}';
为了能够计算结果,我们将top的输出收集到/var/tmp/foo.log文件中。预期输出是这样的:
2.33333 6.9
以及日志文件的内容:
196918 root 20 0 24.4g 1.3g 113872 S 0.0 6.9 39:58.15 my_proc
196918 root 20 0 24.4g 1.3g 113872 S 2.0 6.9 39:58.17 my_proc
196918 root 20 0 24.4g 1.3g 113872 S 3.0 6.9 39:58.20 my_proc
196918 root 20 0 24.4g 1.3g 113872 S 2.0 6.9 39:58.22 my_proc
注意,我们忽略了top命令的第一次执行(tail -n +2)。
正如上面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接口。这个答案很好地解释了这一点。
这是一个很好的技巧,可以实时跟踪一个或多个程序,同时还可以查看其他工具的输出: 看"top -bn1 -p$(pidof foo),$(pidof bar);工具”
推荐文章
- 如何首次配置postgresql ?
- 检索Linux上单个进程的CPU使用情况和内存使用情况?
- 如何从远程SSH会话发送数据到本地剪贴板
- 我如何得到bash完成工作与别名?
- SSH端口转发~/。ssh /配置文件?
- 通过使用shell脚本替换文件名中的特定模式来重命名多个文件
- 在Linux中安装Java SDK后,我可以在哪里找到它?
- 如何将多个文件的内容追加到一个文件
- linux cat命令可以用来写入文本文件吗?
- 如何杀死僵尸进程
- 如何进入每个目录并执行命令?
- 如何通过脚本创建crontab
- 我可以在/etc/hosts中映射主机名*和端口*吗?
- Tar归档,从文件列表中获取输入
- 寻找不属于特定用户的文件