【发布时间】:2023-04-28 17:33:02
【问题描述】:
当我执行没有任何标志的“top”命令时,我得到 p>
当我使用设置为每分钟运行的 cronjob 将其打印到文件时,它执行以下命令,但是,我只得到两个或三个进程使用超过 0.1% 的内存和 CPU。
cronjob 执行这个命令:
top -b -n 1 | sed -n '8,17p' | sed 's/^ *//' | tr -s ' ' | sed 's/ /", "/g ; s/^/{"/g ; s/$/"},/g ; 1s/^/[/ ; $ s/.$/]/ ; s/"/"pid": "/1 ; s/"/"user": "/5 ; s/"/"pr": "/9 ; s/"/"ni": "/13 ; s/"/"virt": "/17 ; s/"/"res": "/21 ; s/"/"shr": "/25 ; s/"/"s": "/29 ; s/"/"cpu": "/33 ; s/"/"mem": "/37 ; s/"/"time": "/41 ; s/"/"command": "/45 ; s/"\(-\?[0-9]\+\)"/\1/g'
以批处理模式获取“top”的第一帧并以 JSON 格式返回,例如像这样:
[
{
"pid": 7303,
"user": "fahclie+",
"pr": 39,
"ni": 19,
"virt": 255736,
"res": 14716,
"shr": 5556,
"s": "S",
"cpu": "400,9",
"mem": "0,2",
"time": "210:15.98",
"command": "FahCore_a4"
},
{
"pid": 1,
"user": "root",
"pr": 20,
"ni": 0,
"virt": 42040,
"res": 4664,
"shr": 2840,
"s": "S",
"cpu": "0,0",
"mem": "0,1",
"time": "0:01.16",
"command": "init"
},
{
"pid": 2,
"user": "root",
"pr": 20,
"ni": 0,
"virt": 0,
"res": 0,
"shr": 0,
"s": "S",
"cpu": "0,0",
"mem": "0,0",
"time": "0:00.00",
"command": "kthreadd"
},
{
"pid": 3,
"user": "root",
"pr": 20,
"ni": 0,
"virt": 0,
"res": 0,
"shr": 0,
"s": "S",
"cpu": "0,0",
"mem": "0,0",
"time": "0:00.13",
"command": "ksoftirqd/0"
},
{
"pid": 5,
"user": "root",
"pr": 0,
"ni": -20,
"virt": 0,
"res": 0,
"shr": 0,
"s": "S",
"cpu": "0,0",
"mem": "0,0",
"time": "0:00.00",
"command": "kworker/0:+"
},
{
"pid": 7,
"user": "root",
"pr": 20,
"ni": 0,
"virt": 0,
"res": 0,
"shr": 0,
"s": "S",
"cpu": "0,0",
"mem": "0,0",
"time": "0:03.58",
"command": "rcu_sched"
},
{
"pid": 8,
"user": "root",
"pr": 20,
"ni": 0,
"virt": 0,
"res": 0,
"shr": 0,
"s": "S",
"cpu": "0,0",
"mem": "0,0",
"time": "0:00.00",
"command": "rcu_bh"
},
{
"pid": 9,
"user": "root",
"pr": 20,
"ni": 0,
"virt": 0,
"res": 0,
"shr": 0,
"s": "S",
"cpu": "0,0",
"mem": "0,0",
"time": "0:01.26",
"command": "rcuos/0"
},
{
"pid": 10,
"user": "root",
"pr": 20,
"ni": 0,
"virt": 0,
"res": 0,
"shr": 0,
"s": "S",
"cpu": "0,0",
"mem": "0,0",
"time": "0:00.00",
"command": "rcuob/0"
},
{
"pid": 11,
"user": "root",
"pr": "rt",
"ni": 0,
"virt": 0,
"res": 0,
"shr": 0,
"s": "S",
"cpu": "0,0",
"mem": "0,0",
"time": "0:00.51",
"command": "migration/0"
}
]
请注意,从第三个进程开始,这些进程都不会使用超过 0.0% 的内存或 CPU。
我怀疑这是因为 top 的第一帧是正在写入的帧,而在第一帧期间,top 仍在收集进程信息。
有没有办法将第二帧打印到文件中?
【问题讨论】:
-
请编辑问题并提供 JSON 格式的可访问 URL,或者最好将 JSON 作为问题中的可读格式代码 sn-p。提示:192.168.0.247 是私有 IP ...谢谢(注意到更新的 URL)-我在您的问题 HTH 中复制了代码块内的内容。所以你想要超过 10 个条目(当时在那台机器上),对吧?
-
哦,什么操作系统/发行版?在我的下一个 Ubuntu 服务器上,我有
top -b -n 1很好地打印出所有进程 ... -
这是在 Linux Mint 17.3 "Rosa" 中。 (在 OP 中添加了更多细节)
-
当我执行 top 时,我看到的第一帧显示的进程少于下一帧。我认为这第一帧正在写入文件。但是,我宁愿它打印第二帧,因为到那时 top 似乎已经收集了有关正在运行的进程的更多信息。
-
您知道您不必运行几十个单独的
sed命令。你可以做sed 'cmd1;cmd2;cmd3;...'