1

我制作了一个 Bash 提示,当工作目录是 Git 存储库时,显示当前存储库的名称。此外,它还包含当前正在进行的任务和花费的时间(来自自制计时工具)。当然,这意味着只显示提示意味着运行两个进程。

这样做的缺点是,如果系统由于某种原因而抖动,则需要永远得到提示来执行killall保存系统所必需的操作,因为在这种状态下仅加载git二进制文件对系统的要求太多了。

所以,现在,提示默认是禁用的,只是按需启用,但这不是那么舒服。检测 中的负载会更好.bashrc,并且仅在系统运行良好(即具有可接受的磁盘延迟)时才启用提示。

在这种情况下,CPU 相当便宜,只有磁盘很贵。因此,我需要一种无需依赖外部实用程序即可检测抖动的方法。

提示:/proc可能有一些有用的东西。例如/proc/loadavg,如果是 CPU 导致瓶颈,而不是磁盘,将解决我的问题。

4

2 回答 2

2

vmstat可以帮助你。如果您不想使用它,所有信息都在

  • /proc/meminfo
  • /proc/stat
  • /proc/PID/stat
于 2010-07-19T06:31:18.907 回答
2

最简单的方法是检查 的第一个字节/proc/loadavg,并且仅在它是0

这将起作用

loadavg=$(</proc/loadavg)
if [ "${loadavg:0:1}" = "0" ]; then echo "all clear"; fi

但是您仍然有test(or [) 可以运行,尽管它可能是 bash 中的内置函数。编辑^2它至少在 bash 3.2.39 中是内置的,但我怀疑它已经内置了很长时间。所以这一切都可以在没有另一个过程的情况下发生。

编辑^3:更新,用于细粒度控制:

if [ "${loadavg:0:1}${loadavg:2:2}" -lt "60" ]; then echo "below 0.6"; fi

编辑^4:我无法想象磁盘 I/O 是当前问题的瓶颈。只要您不写,而只从缓存的地方读取,这就是纯粹的内存/cpu问题。

编辑^5:当然这是针对 1 cpu 的情况,将阈值百分比乘以内核数(对于 HT 处理器,确定“内核”的一半)

于 2010-07-19T06:31:48.560 回答