在VPS上用pip安装一个python包时,直接提示Killed退出了
#Output
Installing collected packages: pypinyin
Killed
无法安装,好奇怪,别的包都安装上了,就这个出问题,在stackoverflow搜到一个问答,https://stackoverflow.com/questions/43245196/pip-install-killed ,貌似是内存不足导致的。
按照问答里说的,查看Linux kernel日志
tail -f /var/log/kern.log
#Output
Out of memory: Kill process 18741 (pip) score 251 or sacrifice child
Killed process 18741 (pip) total-vm:178620kB, anon-rss:121956kB, file-rss:2996kB
看来确实是内存不足,Out of memory,然后直接被系统kill掉了。
内存不够,增加swap交换分区,正好vps用的是Ubuntu系统,直接参照这篇文章 https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-16-04 。
Ubuntu添加Swap分区
查看系统是否有Swap分区
sudo swapon --show
如果没有任何输出,表示没有swap分区,也可以通过free命令验证一下
free -h
#Output
total used free shared buff/cache available
Mem: 486 316 81 5 88 132
Swap: 0 0 0
可以看到Swap的大小是零,也就是没有swap分区。
创建Swap分区文件
创建一个1G大小的文件作为交换分区的文件
sudo fallocate -l 1G /swapfile
设置这个文件权限
sudo chmod 600 /swapfile
格式化为交换分区文件
sudo mkswap /swapfile
启用交换分区文件
sudo swapon /swapfile
验证一下swap分区文件是否创建成功
sudo swapon --show
#Output
NAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -1
设置开机时自启用Swap分区
备份/etc/fstab
文件,防止出错
sudo cp /etc/fstab /etc/fstab.bak
输入下面的命令在/etc/fstab
文件添加一行swap文件的信息
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
优化Swap设置
调整Swappiness值
sudo sysctl vm.swappiness=10
#Output
vm.swappiness = 10
调整Cache Pressure值
sudo sysctl vm.vfs_cache_pressure=50
#Output
vm.vfs_cache_pressure = 50
设置开机时自动调整这两项设置值
在/etc/sysctl.conf
文件最后添加下面两行内容
vm.swappiness=10
vm.vfs_cache_pressure=50
OK,搞定,测试一下看pip是否能安装这个包了,哈哈,不再是Killed,变成了Successfully installed,没有问题,成功安装。
#Output
Installing collected packages: pypinyin
Successfully installed pypinyin-0.33.0