流式传输可用内存的变化

流式传输可用内存的变化

我想出了以下命令来检查内存使用的变化:

free -s 1 -h | awk 'NR%4==2'

这显示了这样的输出:

Mem:           125G         32G         82G        404M         10G         91G     
Mem:           125G         32G         82G        404M         10G         91G     
Mem:           125G         32G         82G        404M         10G         92G     

我实际上只对内存使用的变化感兴趣,所以我尝试通过管道传递uniq

free -s 1 -h | awk 'NR%4==2' | uniq

然而,当使用这个时,根本没有给出任何输出。我假设uniq正在等待其输入完成,但当然它永远不会完成。

我使用的是 RedHat 7.6

答案1

这个例子来自man stdbuf就是您正在寻找的。它适用于您想要通过管道将流传输到的一般情况uniq,与此类似。原因是uniq需要查看更多行来决定是否应该打印当前行。

EXAMPLES
       tail -f access.log | stdbuf -oL cut -d ' ' -f1 | uniq
       This will immediately display unique entries from access.log

对于你的情况:

free -s1 -h | stdbuf -oL awk 'NR%4==2' | uniq

另一种方法是使用一个awk命令,保存刚刚打印的行并在打印之前测试该值:

free -s1 -h | awk 'NR%4 == 2 {if ($0 != p) print; p = $0}'

此外,监视命令的输出watch可能很有用。

相关内容