VPS编译程序时virtual memory exhausted: Cannot allocate memory解决办法

今天在VPS上用pip安装gevent,结果遇到报错:

virtual memory exhausted: Cannot allocate memory

上网查了一下,有的人说看 ulimit -a

# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7899
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7899
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

里面的max memory size和virtual memory设置成比VPS的内存小就行了,分别用 ulimit -m 60000 和 ulimit -v 60000设置成功了,但问题依旧。

显然给VPS加内在的方法太麻烦了,得重做系统。接着又在网上找到了用swap扩展内存的方法,具体做法是建一个大文件做swap用。
先建一个3G大的文件

# dd if=/dev/zero of=/var/swap bs=1M count=3072
3072+0 records in
3072+0 records out
3221225472 bytes (3.2 GB) copied, 16.7703 s, 192 MB/s

使用 mkswap 将 /var/swap 这个文件格式化为 swap 的文件格式:

# mkswap /var/swap 
Setting up swapspace version 1, size = 3145724 KiB
no label, UUID=138195eb-1d16-4b06-b6ad-b5b26fc71622

使用swapon来将 /var/swap 启动

# swapon swap

这样就OK了,看一下新的内存情况

# free
             total       used       free     shared    buffers     cached
Mem:       1019048     952148      66900          0       5172     100576
-/+ buffers/cache:     846400     172648
Swap:      3145724          0    3145724

用完之后再关掉swap

# swapoff swap
# free
             total       used       free     shared    buffers     cached
Mem:       1019048     947136      71912          0       6840      91816
-/+ buffers/cache:     848480     170568
Swap:            0          0          0

之后的大文件也可以删除掉了。