如何编写高效的脚本来达到内存(RAM)峰值?

如何编写高效的脚本来达到内存(RAM)峰值?

我有一个包含多台 PC 的网络。我希望每个系统的内存都达到峰值。

我编写了一个脚本来检查已使用的内存,并将峰值写入文件中/tmp;并且我已将脚本设置为在系统启动时在后台运行。但它似乎占用了大量资源,因为运行时 top 显示大约 2(对于 8 线程 CPU,共 8 个)。

#! /bin/bash
touch /tmp/mempeak

while true
do
     A=$(free -m | grep "Mem"|awk '{printf "%.2f",$3/1000-$NF/1000}')
     B=$(cat /tmp/mempeak)
     A=$(awk -va=$A -vb=$B 'BEGIN {print (a>b)?a:b }')
     echo $A > /tmp/mempeak
done

我想知道是否有其他方法可以有效地获得这个值。

PS. 内存峰值应在系统重新启动时重置,并且应可通过以下方式从远程服务器访问ssh

答案1

您的脚本占用了大量 CPU 资源,因为它会持续运行,效率很低。为了避免这种情况,请添加对 的调用sleep,这意味着它每 5 秒只会执行一次工作,即很多效率更高。你也许可以将其延长到更长的时间,比如 60 秒,这取决于需要的频率/准确性。

加上这个 extra 之后看起来是这样的sleep 5

#! /bin/bash
touch /tmp/mempeak

while true
do
     A=$(free -m | grep "Mem"|awk '{printf "%.2f",$3/1000-$NF/1000}')
     B=$(cat /tmp/mempeak)
     A=$(awk -va=$A -vb=$B 'BEGIN {print (a>b)?a:b }')
     echo $A > /tmp/mempeak
     sleep 5
done

如果您想避免过多的磁盘写入(例如为了减少 SSD 磨损),您可以更改脚本,以便只有在值实际发生变化时才写入磁盘,并且可能将输出文件放在临时内存文件系统上。

相关内容