最近Angular8 在编译时老师被killed 查看日志发现是内存溢出了

日志错误如下:tail -100f /var/log/messages

  1. May 3 22:22:02 bobo kernel: [27020] 0 27020 458986 218818 1359 0 0 ng build --prod
  2. May 3 22:22:02 bobo kernel: [27027] 1000 27027 40470 162 34 0 0 top
  3. May 3 22:22:02 bobo kernel: Out of memory: Kill process 27020 (ng build --prod) score 453 or sacrifice child
  4. May 3 22:22:02 bobo kernel: Killed process 27020 (ng build --prod) total-vm:1835944kB, anon-rss:874252kB, file-rss:1020kB, shmem-rss:0kB

查看linux的日志发现,内存溢出被杀进程,阿里云服务器就2个g,然后开了一下php和java服务占用好多,大概剩下600m,发现是LINUX内核Out-Of-Memory killer机制是一种防止内存耗尽影响系统运行而采用的一种自我保护机制。
根据内核源码oom_kill.c中的定义,系统会依据“进程占用的内存”,“进程运行的时间”,“进程的优先级”,“是否为 root 用户进程“,”子进程个数和占用内存“,”用户控制参数oom_adj ”等计算一个oom_score值,分数越高就越会被内核优先杀掉。
找到原因后,我先把部分进程杀了。同时通过node的内存设置来限制,通过package.json里面设置ng build命令,设置为如下:

  1. "build": "node --max_old_space_size=700 ./node_modules/@angular/cli/bin/ng build --prod"