Linux 系统没有交换(或sudo swapoff -a
在测试之前运行)时的最小测试用例。以普通用户身份运行以下 bash 一行:
while true; do date; nice -20 stress --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 + 4000;}' < /proc/meminfo)k --vm-keep -m 1 --timeout 10s; sleep 5s; done
并使用高优先级 root shell 运行以下 bash 单行代码(例如sudo nice -n -19 bash
):
while true; do NS=$(date '+%N' | sed 's/^0*//'); let "S=998000000 - $NS"; S=$(( S > 0 ? S : 0)); LC_ALL=C sleep "0.$S"; date --iso=ns; done
高优先级进程应该date
尽可能准确地每秒运行。但是,即使该进程以优先级运行-19
,以优先级运行的后台进程20
也可能会导致严重延迟。低优先级后台进程引起的延迟似乎没有限制,因为可以通过增加值来激活更高的延迟stress --timeout
。
有没有办法限制最大延迟并自动终止stress
(如果需要)来实现这一目标?增加/proc/sys/vm/user_reserve_kbytes
或/proc/sys/vm/admin_reserve_kbytes
或/proc/sys/vm/min_free_kbytes
似乎没有帮助。