今天早些时候,建设东西的时候,我决定运行make
为
$ make -j
也许是出于与其他软件的习惯,如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
因此,我检查了GNU make的手册页:(添加了重点)
-j [jobs],--jobs [= jobs]指定要同时运行的作业(命令)数。如果有多个-j选项,则最后一个有效。 如果给-j选项不带参数,make将不会限制可以同时运行的作业数量。
我不愿意看到我是否能重现该问题(医生,我这样做时,它会伤害这个 ...) ,但调查的结果似乎到目前为止是一个本垒打:显然,make -j
与数百产生过程必须有是挂起和磁盘抖动的原因。也就是说,在互联网上搜索时,我找不到很多警告。我在得出结论吗?
是make -j
因为危险的,因为它似乎给我吗? 如果是这样,为什么在地球上呢?如何对它进行白痴验证?
alias make="make -j4"
以消除添加参数的需要-jN
,但是我仍然没有考虑所有可能的结果...