Linux系统没有交换时的最小测试用例(或在测试之前运行sudo swapoff -a).以普通用户身份运行以下bash one-liner:
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
高优先级进程应该尽可能准确地每秒运行一次.但是,即使此进程以优先级-19运行,优先级为20的后台进程也会导致严重延迟.似乎对低优先级后台进程引起的延迟没有限制,因为可以通过增加压力 – 超时值来激活更高的延迟.
有没有办法限制最大延迟并在需要时自动消除压力?增加/ proc / sys / vm / user_reserve_kbytes或/ proc / sys / vm / admin_reserve_kbytes或/ proc / sys / vm / min_free_kbytes似乎没有帮助.
解决方法:
请考虑从this问题尝试*内核补丁,因为它似乎为我做的工作(避免在oom附近的高延迟)(甚至使用你的问题中的代码来测试它),我也避免了大量的磁盘颠簸(例如当我编译firefox时,由于内存不足导致操作系统因冻结而导致).
该补丁避免驱逐活动(文件)页面,从而保留(至少)RAM中的可执行代码页,以便上下文切换不会导致kswapd0(?)重新读取它们(这将导致大量磁盘读取和frozen OS ).
*甚至建议更好的方法?
标签:linux,out-of-memory 来源: https://codeday.me/bug/20190816/1671126.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。