在Ubuntu服务器安装软件包时出现内存不足问题

31

我正在使用一台内存有限的Ubuntu云服务器,只有512MB RAM和20GB HDD。其中450MB+ RAM已经被进程占用。

我需要安装一个名为lxml的新软件包,它在安装时使用Cpython进行编译,是非常繁重的过程,因此它总是以错误退出gcc: internal compiler error: Killed (program cc1),这是由于没有可用的RAM来运行它。

升级机器是一个选择,但它也有自己的问题,而且我的一些服务/网站就直接运行在这台服务器上。

但是在我的本地机器上,lxml已经成功安装。由于我的需求仅限于lxml,所以是否可能从本地机器的目录中挑选所有有用的文件并将其复制到远程机器上?

这样会有效吗?如果可以,如何获取软件包的所有文件?

谢谢


添加一个交换分区/文件怎么样?这样就可以获得足够的RAM来安装lxml。 - cptPH
我是Ubuntu的新手,至少在内存管理方面是这样。你能再详细解释一下吗? - Man8Blue
1
首先,您需要在文件系统中创建一个正确大小和连续的交换文件,例如“sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024k”。然后调用“sudo mkswap /swapfile”和“sudo swapon /swapfile”。如需更易读的答案,请参见https://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04。 - TeTeT
1
@TeTeT,它运行得很好。但是我如何在不重新启动服务器的情况下删除它?这将如何影响已经存储在其中的数据? - Man8Blue
确保您不再使用交换空间(free命令很有用),然后swapoff文件。但要注意它不再被使用,否则您的系统可能会出现问题。通常最好重新启动。 - TeTeT
1个回答

82

通过添加交换文件扩展RAM:http://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/

一个交换文件是存储在计算机硬盘上的文件,用作临时位置来存储当前未被计算机RAM使用的信息。通过使用交换文件,计算机可以使用比实际安装在计算机中更多的内存。 http://www.computerhope.com/jargon/s/swapfile.htm

简而言之:

  1. 登录为root用户:su - 或者在命令前加上sudo
  2. dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
  3. mkswap /swapfile1
  4. chown root:root /swapfile1
  5. chmod 0600 /swapfile1
  6. swapon /swapfile1

现在交换文件将会被临时激活,但是在重启后将会消失。你应该有足够的RAM来进行安装。

删除文件:

  1. swapoff -v /swapfile1
  2. rm /swapfile1

哇,它运行得非常好。但是我如何在不重新启动服务器的情况下将其删除?这会影响已经存储在其中的数据吗? - Man8Blue
在安装完成后,您的系统可能不需要交换文件上的额外空间,因此它应该是空的,或者在您删除它的那一刻,它将被移回到RAM中。 - cptPH
3
这个答案真的救了我一命,不确定为什么这是答案但它只有 0 分。 - Scott Coates
8
如果有人在使用Digital Ocean,可以按照以下步骤在Ubuntu 12.04上添加交换空间:https://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04 - Camilo Nova
在我处理pip安装lxml时遇到内存问题的时候,在Fedora 21 Digital Ocean上运行良好。 - carterh062
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接