尝试一下yum install php56w-mcrypt
,系统却给了我这个错误
libmcrypt-2.5.8-13.el7.x86_64: [Errno 5] [Errno 12] Cannot allocate memory
php56w-mcrypt-5.6.5-1.w7.x86_64: [Errno 5] [Errno 12] Cannot allocate memory
我检查了一下free -m
total used free shared buffers cached
Mem: 490 421 68 8 3 42
-/+ buffers/cache: 376 113
Swap: 0 0 0
top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9756 mysql 20 0 727588 81556 0 S 0.3 16.2 1:04.61 mysqld
11089 root 20 0 0 0 0 S 0.3 0.0 0:16.25 kworker/0:2
1 root 20 0 129396 2020 576 S 0.0 0.4 0:05.88 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.16 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 0:01.82 rcu_sched
11 root 20 0 0 0 0 R 0.0 0.0 0:02.10 rcuos/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.91 watchdog/0
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
不确定还要检查哪里。
我正在使用DigitalOcean
RAM 为 512MB 的 VPS,每月 5 美元的套餐。
答案1
问题是服务器似乎只有 490MB 的 RAM,而您使用了 421MB。只剩下 68MB 可用;对于任何系统来说,这都不是很多内存。
查看输出top
表明 MySQL(又名mysqld
:)是罪魁祸首。
如果这只是暂时的情况,那么最好的办法就是停止 MySQL,如下所示:
sudo service mysqld stop
然后,在 MySQL 停止后,您就可以yum install
按预期运行。
但另一种解决方案是使用类似脚本“MySQL 调优入门”帮助评估服务器上的 MySQL 使用情况和配置并进行相应调整。原因是开箱即用的普通 MySQL 会占用大量内存。但“MySQL Tuning Primer”将帮助评估您的安装并让您知道可以调整哪些内容。包括降低内存要求,以便设置可以满足您有限的资源。唯一的问题是 MySQL 需要连续运行至少 48 小时,才能使“MySQL Tuning Primer”结果具有价值。除此之外,使用此脚本对 MySQL 进行性能调整是微调 LAMP 设置的好方法。
此外,由于您正在运行 Apache,因此您可能可以降低 Apache(又名httpd
)的 RAM 要求,从而释放更多 RAM。这是针对 Apache 基本开发环境的一组相当通用的调整,但应该对您有所帮助。首先通过您最喜欢的命令行编辑器打开您的 Apache 配置,如下所示;我更喜欢nano
但任何文本编辑器都可以:
sudo nano /etc/httpd/conf/httpd.conf
现在找到 a 所说的行Timeout
并将其更改为“120”;两分钟是一个合理的超时窗口:
Timeout 120
同样地,找到MaxKeepAliveRequests
并将其更改为“24”;“保持活动”连接很好,但不要让它们压垮你的设置:
MaxKeepAliveRequests 24
找到KeepAliveTimeout
并将其设置为“2”;这应该与您网站上一个页面的加载速度相关,2 秒是一个很好的平均值:
KeepAliveTimeout 2
现在查找 XML 配置指令设置为<IfModule mpm_prefork_module>
:
<IfModule mpm_prefork_module>
StartServers 8
MinSpareServers 16
MaxSpareServers 32
ServerLimit 40
MaxClients 40
MaxRequestsPerChild 2000
</IfModule>
关键在于 和ServerLimit
。MaxClients
默认情况下,Apache 的设置相当高;MaxClients
我相信是 255。但实际情况是,即使是高流量网站每秒也只能获得 70-80 个连接……然后就死掉了……这意味着 Apache 连接是无状态的,因此基准是每秒连接数。因此,对于开发或小规模服务器,“40”是一个不错的数字。
现在完成了这些关键的调整,请像这样重新启动 Apache:
sudo service httpd restart
通过调整 MySQL 和 Apache 以获得比默认/预定值更合理的设置可以释放服务器上的资源并使一切运行得更顺畅。
答案2
您可以创建交换文件:
fallocate -l 512M /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
这将创建交换文件,您将能够安装应用程序。要删除交换文件:
swapoff -a
rm -f /swapfile
看Arch 维基了解详情。
答案3
在 CentOS7 上运行 yum 更新时遇到了类似的问题,重新启动服务器即可解决问题。我猜想它清除了内存以安装补丁/新软件包。
答案4
如果您的服务器已经运行了很长时间,系统重启通常会释放您的内存。
reboot
话虽如此,这可能只是一个临时解决方案!执行此操作后,您应该找出内存问题的实际原因,以防止再次发生。您可以使用此解决方案作为快速临时修复,让您的服务器再次运行,同时进一步调查内存问题。
第一个好的起点就是检查您的日志。
sudo grep -i -r 'out of memory' /var/log/