如何使用 top 或 htop 收集过滤的时间序列

如何使用 top 或 htop 收集过滤的时间序列

我的目标是在易于解析的时间序列中跟踪特定命令的资源使用情况。下面是我跟踪node3 个批次的所有命令的示例:

top -b -n3 | grep node                
 222097 root      20   0  954444 672616  32452 S 105.9   4.1  46:23.02 node
 221922 root      20   0  305792  51408  23900 S   0.0   0.3   0:00.58 node
 222113 root      20   0  554304 343092  23736 S   0.0   2.1   0:26.25 node
 222097 root      20   0  954444 672616  32452 S 159.8   4.1  46:27.83 node
 221922 root      20   0  305792  51408  23900 S   0.0   0.3   0:00.58 node
 222113 root      20   0  554304 343092  23736 S   0.0   2.1   0:26.25 node
 222097 root      20   0  954444 672616  32452 S 167.1   4.1  46:32.86 node
 221922 root      20   0  305792  51408  23900 S   0.0   0.3   0:00.58 node
 222113 root      20   0  554304 343092  23736 S   0.0   2.1   0:26.25 node

问题是没有简单的方法来区分批次。在这个简单的示例中,很容易看到断点,但在较长的系列中或具有更多进程的系列中,就变得很困难。

通过一些繁重的脚本,我们可以做一些奇特的事情,但我想保持简单。希望输出:

 221922 root      20   0  305792  51408  23900 S   0.0   0.3   0:00.58 node
 222113 root      20   0  554304 343092  23736 S   0.0   2.1   0:26.25 node
------------------------------------------------------------------------------
 222097 root      20   0  954444 672616  32452 S 159.8   4.1  46:27.83 node
 221922 root      20   0  305792  51408  23900 S   0.0   0.3   0:00.58 node
 222113 root      20   0  554304 343092  23736 S   0.0   2.1   0:26.25 node
------------------------------------------------------------------------------
 222097 root      20   0  954444 672616  32452 S 167.1   4.1  46:32.86 node
 221922 root      20   0  305792  51408  23900 S   0.0   0.3   0:00.58 node
 222113 root      20   0  554304 343092  23736 S   0.0   2.1   0:26.25 node

答案1

这个不完美的 bash 脚本比写这篇文章花费的时间更少:

# /bin/bash

echo "Monitor process $1"
echo " for $2 batches"


for i in $(seq 1 $2); do 
    top -b -n 1 | grep $1
    echo "-------------------------------------------------";
    sleep 1
done

相关内容