今天早些时候,建设东西的时候,我决定运行make
为
$ make -j
Run Code Online (Sandbox Code Playgroud)
也许是出于与其他软件的习惯,如cabal
其中-j
默认为一个合理的限度。
大约 20 秒后,我的整个桌面都停止了。我寻找各种活动迹象。没有粉丝旋转。HDD 指示灯呈稳定的绿色,但我没有听到磁盘活动。嗯嗯。沉默了 10 分钟后,我终于看到了我很久以前第一次按键的反应,并且我也开始听到非常熟悉的磁盘抖动声音。20 分钟后,我慢慢地尝试涉水进入这台没有响应的机器上的终端,我屈服并使用了 REISUB。
起初,我认为一个不相关的桌面应用程序一定是罪魁祸首,因为我早就对交互式 bash 会话设置了内存限制,以防止我将自己置于这种情况!但/var/log/syslog
讲述了一个不同的故事;在OOM杀手留下一些ps
垃圾场被怀疑的包装与c++
和cc1plus
流程!
以下是其中一个转储的频率分析:
Command Number of appearances
'sh' 322
'c++' 321
'cc1plus' 321
'chrome' 27
'make' 27
'bash' 3
all else combined 120
Run Code Online (Sandbox Code Playgroud)
所以我检查了 GNU make 的手册页:(强调)
-j [jobs], --jobs[=jobs] 指定要同时运行的作业(命令)的数量。如果有多个 -j 选项,则最后一个有效。 如果 -j 选项不带参数给出,make 将不会限制可以同时运行的作业数量。
我不愿意看到我是否能重现该问题(医生,我这样做时,它会伤害这个 …