昨天在测试服自动化部署前端代码时,总是失败,然后进到服务器手动构建,发现在npm install
的时候耗时很长,而且总是会自动被kill掉,一直不明白是什么原因,去找node和npm版本的问题也一无所获,后来想到我们鸡肋的测试服(1G1CPU1M,当然生产服也差不多),可能是因为资源不足导致的进程被kill
npm 打印
top统计
可以看到cpu使用率几乎100%
在执行npm install是明显看到cpu执行上升
处理
由于代码在本地打包的时候没有任何问题,结合上面的内容,基本上可以说是机器资源不足导致的进程被kill,在这里通常是cpu和n内存,cpu是没法控制了,毕竟老板觉得一台服务器就可以上天了,不过可以通过swap来缓解下内存的问题
swap
###检查swap空间,屁都没得
[node@iZ28tmashffZ ~]$ swapon -s
Filename Type Size Used Priority
[node@iZ28tmashffZ ~]$
###创建swap分区文件
[node@iZ28tmashffZ var]$ sudo dd if=/dev/zero of=swapfile bs=1024 count=1048576
[sudo] password for node:
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB) copied, 20.2998 s, 52.9 MB/s
注意:由于我是在var目录下,而且目标文件没有加路径,所以上面的命令和下面是等价的。上面的命令大体意思是,/dev/zero是一个输入设备源源不断输出0来初始化/var/swapfile文件,设置读写缓存块大小,每个block是1024b=1K,初始化10241024个(通常情况下linux下的1G=10001024),结果是初始化了一个大小为1G的文件(/dev/zero是源,/dev/null是黑洞)
sudo dd if=/dev/zero of=/var/swapfile bs=1024 count=1048576
###格式化新建的SWAP分区
[node@iZ28tmashffZ var]$ sudo mkswap /var/swapfile
mkswap: /var/swapfile: warning: don't erase bootbits sectors
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=84f6cb67-bfdd-4b77-9223-c8f8990ed052
###将swap文件变成swap分区
[node@iZ28tmashffZ var]$ sudo swapon /var/swapfile
[node@iZ28tmashffZ var]$ swapon -s
Filename Type Size Used Priority
/var/swapfile file 1048572 0 -1
###最后发现的确是内存的原因