【发布时间】:2019-03-08 09:48:32
【问题描述】:
我找到了如何按 PID 获取汇总值分组列:
iotop -botqqqk -n 10 | awk '{print $13,$2,$5}'| sort -rnk 1 | awk '
{ a[$2] += $3 }
END {
for (i in a) {
printf "top_10_read{pid=\"%s\",name=\"%s\"} %s\n", i, $1, a[i] | "sort -rnk2";
}
}
'
但我需要按 PID 和 PROCESS NAME 对它进行分组的排序平均值“DISK READ”。
我找到了现成的解决方案:https://github.com/ncabatoff/process-exporter/。 但我认为它没有足够的细节。我已经有一些“杂乱”的脚本来导出有关进程的信息:
echo "TOP 10 CPU"
ps -A -rss -o comm,pcpu | awk -v cpus="$(nproc --all)" '
{ a[$1] += $2 }
END {
for (i in a) {
printf "top_10_cpu{process=\"%s\"} %s\n", i, a[i]/cpus | "sort -rnk2";
}
}
' | head -n 10
echo "TOP 10 RAM"
ps -A -rss -o comm,pmem | awk '
{ a[$1] += $2 }
END {
for (i in a) {
printf "top_10_ram{process=\"%s\"} %s\n", i, a[i] | "sort -rnk2";
}
}
' | head -n 10
echo "TOP 10 RSS"
ps -A -o comm,rss | awk '
{ a[$1] += $2 }
END {
for (i in a) {
printf "top_10_rss{process=\"%s\"} %s\n", i, a[i]/1024 | "sort -g -rk2,2";
}
}
' | head -n 10
echo "TOP 10 VSZ"
ps -A -o comm,vsz | awk '
{ a[$1] += $2 }
END {
for (i in a) {
printf "top_10_vsz{process=\"%s\"} %s\n", i, a[i]/1024 | "sort -g -rk2,2";
}
}
' | head -n 10
echo "TOP 10 SZ"
ps -A -o comm,sz | awk '
{ a[$1] += $2 }
END {
for (i in a) {
printf "top_10_sz{process=\"%s\"} %s\n", i, a[i]/1024 | "sort -g -rk2,2";
}
}
' | head -n 10
而且还会通过每个进程获取有关 TCP 连接状态的信息。
您认为这是一种切割器解决方案,还是我只是浪费时间而有一些现成的选择?
输入示例:
#iotop -botqqqk -n 10 | awk '{print $13,$2,$5}'| sort -rnk 1
glusterfsd 23976 0.00
glusterfsd 23976 0.00
glusterfsd 23975 122.89
glusterfsd 23975 116.36
预期输出示例:
glusterfsd 23976 0.00
glusterfsd 23975 119.625
其中 PID 23975 的平均磁盘读取值为“119.625”。
问候
【问题讨论】:
-
请使用代码标签发布输入示例和预期输出示例,以便更好地理解问题。
-
当我听到“按字段分组”并统计平均值之类的数据时,我认为 GNU datamash 是首选工具。
-
为什么要寻找更好的解决方案?并请定义“混乱”——据我所知,这些是针对不同用例的好解决方案。那么您打算优化哪个用例?
-
> 请张贴带有代码标签的输入示例和预期输出示例,以便更好地理解问题。 更新帖子。谢谢。
-
>当我听到“按字段分组”并统计平均值之类的东西时,我认为 GNU datamash 是首选工具 谢谢,我一定会试试这个