这几天在linux服务器上跑实验,进程占用的空间比较大,而且占用的时间也比较长,有时候会发现进程突然没有了。
这个时候去翻了翻系统的内核日志,/var/log 路径下会有一个kern.log的日志文件,你在里面检索被杀掉的进程号(cat kern.log | grep 1026xxx),日志中会有如下记录:
Apr 28 14:52:20 xxxx-xx kernel: [1617652.028901] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1001.slice/session-980.scope ,task=python3.9,pid=1282264,uid=1003
这样的一条日志记录,**pid 就是你被系统内核OOM-KILLER干掉的进程号,uid 就是你登录的用户id,里面还有一些别的信息(task)**等。
OOM:out of memory,指在linux里面,由于系统内存压力,系统会选择保护一些系统进程,而将一些其他的进程kill掉,释放内存。
如果你不想被系统内核干掉进程,就得修改OOM-score。这个由系统内核计算出来的值,用来评估你的进程是否改保留。
与OOM相关的几个文件是 /proc//oom_adj 、 /proc//oom_score。前者是一个权值-16至15,默认是0,设置为-17表示永远不被kill,其余情况值越大越容易被kill。后者就是它计算出来的一个值,就是根据这个值来选择哪些进程被kill掉的。
/proc//oom_adj 、 /proc//oom_score这两个东西会根据你的服务器选用的linux发行版,或者版本进行变化。
比如我的服务器就是在/proc/下有很多进程号的文件夹,你需要进入到你要改变的进程号下的文件夹下才有,oom_adj 、oom_score这两个文件。(/proc/1026445/oom_adj 和 /proc/1026445/oom_score)1026445表示你不想要被系统内核干掉的进程号。
使用 echo “17” > /proc/1026445/oom_adj 来修改里面的值,确保你的进程不会被系统内核干掉。
坏起来了,今天早上起来,服务器无响应了,估计应该是关机了,机房的老师还没来。警告兄弟们,此操作虽好,可不要大量使用,否则很容易导致系统关机