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 Tuning Primer" допоможе оцінити встановлення та повідомить про те, що можна змінити. Включаючи зниження вимог до пам'яті, щоб установка могла задовольнити обмежені ресурси. Єдина уловка полягає в тому, що MySQL потрібно активно працювати принаймні 48 годин прямо, щоб результати "MySQL Tuning Primer" нічого не варті. Минуле налаштування продуктивності MySQL за допомогою цього сценарію - це чудовий спосіб налагодити налаштування LAMP.

Крім того, оскільки ви працюєте з Apache, ви, ймовірно, можете знизити вимоги оперативної пам’яті для Apache (ака httpd), щоб ви звільнили більше оперативної пам’яті таким чином. Це досить загальний набір налаштувань для базового середовища розвитку Apache, але повинен вам допомогти. Спочатку відкрийте конфігурацію Apache через улюблений редактор командного рядка, як це; Я вважаю за краще, nanoале будь-який текстовий редактор хороший:

sudo nano /etc/httpd/conf/httpd.conf 

Тепер знайдіть рядок, який говорить, 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 досить високі; 255 бо MaxClientsя вірю. Але реальність навіть у тому, що сайт з високим трафіком отримає лише 70-80 з'єднань в секунду ... І тоді помре ... Значить, з'єднання Apache не мають статусу, тому орієнтиром є з'єднання в секунду. Тож для сервера розробки або невеликого масштабу "40" - це хороше число.

Тепер, виконавши ці ключові коригування, перезапустіть Apache так:

sudo service httpd restart

Налаштувавши MySQL та Apache на більш розумні налаштування, ніж значення за замовчуванням / консерви, можна звільнити ресурси на вашому сервері та змусити все працювати більш плавно.


17

Ви можете створити файл swap:

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

Це створить файл swap, і ви зможете встановлювати програми. Щоб видалити файл swap:

swapoff -a
rm -f /swapfile

див. Arch wiki для детальної інформації.


1
Хороша ідея. Будь-яка причина, крім втрати трохи дискового простору, відключити своп?
raider33

Залежно від налаштувань підкачки система може почати використовувати її при 50% завантаженні пам'яті. Якщо у вашій системі є, скажімо, 512 Мб, але більшу частину часу вона використовує ~ 400 МБ, то вона буде прекрасно працювати без підкачки, але при цьому вона може сповільнити спробу змінити 150 МБ назад і назад. Але я можу помилятися на цьому.
пбогут

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

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