CentOS 7 无法在“yum install”操作期间分配内存

Muh*_*min 11 yum centos-7

尝试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
Run Code Online (Sandbox Code Playgroud)

我检查了 free -m

             total       used       free     shared    buffers     cached
Mem:           490        421         68          8          3         42
-/+ buffers/cache:        376        113
Swap:            0          0          0
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

不知道还有什么地方可以检查。

我正在使用DigitalOceanVPS 和 RAM 512MB,每月 5 美元的计划。

小智 19

您可以创建交换文件:

fallocate -l 512M /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
Run Code Online (Sandbox Code Playgroud)

这将创建交换文件,您将能够安装应用程序。删除交换文件:

swapoff -a
rm -f /swapfile
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Arch wiki

  • fallocate 可能会作弊而不起作用...使用`sudo dd if=/dev/zero of=/swapfile count=512 bs=1MiB` (2认同)

Gia*_*968 12

这个问题是服务器的机器上似乎只有 490MB 的 RAM,而您使用了 421MB。仅剩 68MB 可用空间;对于任何系统来说,这都不是很多内存。

查看输出top结果表明 MySQL (aka:)mysqld是罪魁祸首。

如果这是临时情况,您可以做的最好的事情就是像这样简单地停止 MySQL:

sudo service mysqld stop
Run Code Online (Sandbox Code Playgroud)

然后在 MySQL 停止的情况下,您可以yum install按预期运行。

但另一种解决方案是使用“MySQL Tuning Primer”之类的脚本来帮助评估服务器上的 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 
Run Code Online (Sandbox Code Playgroud)

现在找到 a 所说的行Timeout并将其更改为“120”;两分钟是一个合理的超时窗口:

Timeout 120
Run Code Online (Sandbox Code Playgroud)

同样找到MaxKeepAliveRequests并将其更改为“24”;“保持活动”连接很好,但不要让它们压倒您的设置:

MaxKeepAliveRequests 24
Run Code Online (Sandbox Code Playgroud)

并找到KeepAliveTimeout并将其设置为“2”;这应该与您网站上一页的加载速度和 2 秒的平均速度有关:

KeepAliveTimeout 2
Run Code Online (Sandbox Code Playgroud)

现在查找设置为的 XML 配置指令<IfModule mpm_prefork_module>

<IfModule mpm_prefork_module>
  StartServers           8
  MinSpareServers       16
  MaxSpareServers       32
  ServerLimit           40
  MaxClients            40
  MaxRequestsPerChild 2000
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这个的关键是ServerLimitMaxClients。默认情况下,Apache 的设置相当高;255 因为MaxClients我相信。但现实情况是,即使是高流量站点每秒也只能获得 70-80 个连接……然后死亡……这意味着 Apache 连接是无状态的,因此基准是每秒连接数。因此,对于开发或小型服务器,“40”是一个不错的数字。

现在完成了这些关键调整,像这样重新启动 Apache:

sudo service httpd restart
Run Code Online (Sandbox Code Playgroud)

通过将 MySQL 和 Apache 调整为比默认/预设值更合理的设置,可以释放服务器上的资源并使一切运行更顺畅。