CentOS 7 не может выделить память во время операции «yum install»


11

Попробуй 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

Не уверен, где еще проверить.

Я использую DigitalOceanVPS с оперативной памятью 512 МБ, план $ 5 / месяц.

Ответы:


8

Эта проблема заключается в том, что сервер имеет только 490 МБ ОЗУ на компьютере, а у вас используется 421 МБ. Оставляя только 68 МБ бесплатно; это не много памяти для любой системы для работы.

Глядя на вывод из topпоказывает, что MySQL (aka:) mysqldявляется виновником.

Лучшее, что вы можете сделать, если это временная ситуация, это просто остановить MySQL следующим образом:

sudo service mysqld stop

Затем, остановив MySQL, вы можете работать yum installкак положено.

Но другим решением было бы использование сценария, такого как «MySQL Tuning Primer», чтобы помочь оценить использование и конфигурацию MySQL на подаче и настроить соответственно. Причина в том, что простой MySQL, встроенный в MySQL, станет проблемой с памятью. Но «Учебник по настройке MySQL» поможет оценить вашу установку и даст вам знать, что вы можете настроить. В том числе снижение требований к памяти, так что установка может быть довольна вашими ограниченными ресурсами. Единственный улов - MySQL должен быть запущен в течение как минимум 48 часов подряд, чтобы результаты «MySQL Tuning Primer» чего-то стоили. Кроме того, настройка производительности MySQL с помощью этого скрипта - отличный способ отрегулировать настройки LAMP.

Кроме того, поскольку вы используете Apache, вы, вероятно, можете снизить требования к оперативной памяти для Apache (aka httpd), чтобы таким образом освободить больше оперативной памяти. Это довольно общий набор настроек для базовой среды разработки 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 config, установленную как <IfModule mpm_prefork_module>:

<IfModule mpm_prefork_module>
  StartServers           8
  MinSpareServers       16
  MaxSpareServers       32
  ServerLimit           40
  MaxClients            40
  MaxRequestsPerChild 2000
</IfModule>

Ключ к этому есть ServerLimitи MaxClients. По умолчанию настройки Apache довольно высоки; 255 ибо MaxClientsя верю. Но реальность такова, что даже сайт с высоким трафиком будет получать только 70-80 соединений в секунду ... А потом умрет ... Это означает, что соединения Apache не имеют состояния, поэтому эталоном является число соединений в секунду. Так что для сервера разработки или небольшого масштаба «40» - это хорошее число.

Теперь, после внесения этих ключевых изменений, перезапустите Apache следующим образом:

sudo service httpd restart

Настройка MySQL и Apache на более разумные настройки, чем стандартные / стандартные значения, может освободить ресурсы на вашем сервере и заставить все работать более гладко.


17

Вы можете создать файл подкачки:

fallocate -l 512M /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

Это создаст файл подкачки, и вы сможете устанавливать приложения. Чтобы удалить файл подкачки:

swapoff -a
rm -f /swapfile

см. Arch wiki для деталей.


1
Хорошая идея. Любая причина, кроме потери дискового пространства, отключить своп?
raider33

Зависит от настроек подкачки, система может начать использовать ее при 50% загрузки памяти или около того. Если ваша система имеет, скажем, 512 МБ, но большую часть времени она использует ~ 400 МБ, то она будет прекрасно работать без подкачки, но с ней она может замедлиться, пытаясь обменивать 150 МБ туда и обратно. Но я могу ошибаться в этом.
pbogut

Не забудьте использовать sudoдля команд
Raptor

1
Fallocate может обманывать, а не работать ... использоватьsudo dd if=/dev/zero of=/swapfile count=512 bs=1MiB
Рэй Фосс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.