CentOS 7 ne peut pas allouer de mémoire pendant une opération «yum install»

11

Essayez yum install php56w-mcryptet le système m'a donné cette erreur

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

J'ai vérifié 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

Je ne sais pas où vérifier.

J'utilise DigitalOceanVPS avec 512 Mo de RAM, le plan de 5 $ / mois.

Muhaimin
la source

Réponses:

8

Ce problème est que le serveur ne semble avoir que 490 Mo de RAM sur la machine et que vous en avez utilisé 421 Mo. Ne laissant que 68 Mo libres; ce n'est pas beaucoup de mémoire pour un système avec lequel travailler.

En regardant la sortie de topmontre que MySQL (aka:) mysqldest le coupable.

La meilleure chose que vous puissiez faire si c'est une situation temporaire est d'arrêter simplement MySQL comme ceci:

sudo service mysqld stop

Ensuite, avec MySQL arrêté, vous pouvez exécuter yum installcomme prévu.

Mais une autre solution serait d'utiliser un script comme «MySQL Tuning Primer» pour aider à évaluer l'utilisation et la configuration de MySQL sur le serveur et à l'ajuster en conséquence. La raison en est que MySQL est un porc de mémoire. Mais «MySQL Tuning Primer» vous aidera à évaluer votre installation et vous fera savoir ce que vous pouvez modifier. Y compris la réduction de la mémoire requise pour que la configuration soit satisfaite de vos ressources limitées. Le seul hic, c'est que MySQL doit fonctionner activement pendant au moins 48 heures d'affilée pour que les résultats de «MySQL Tuning Primer» valent quoi que ce soit. Après cela, l'optimisation des performances de MySQL avec ce script est un excellent moyen d'affiner votre configuration LAMP.

De plus, puisque vous exécutez Apache, vous pouvez probablement réduire les exigences de RAM pour Apache (aka httpd) afin de libérer plus de RAM de cette façon. Il s'agit d'un ensemble assez générique de réglages pour un environnement de développement de base d'Apache, mais cela devrait vous aider. Ouvrez d'abord votre configuration Apache via votre éditeur de ligne de commande préféré comme celui-ci; Je préfère nanomais tout éditeur de texte est bon:

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

Maintenant, trouvez la ligne qui dit a Timeoutet changez-la en «120»; deux minutes est un délai d'attente raisonnable:

Timeout 120

De même, trouvez MaxKeepAliveRequestset modifiez cela en «24»; Les connexions «garder en vie» sont bonnes, mais ne les laissez pas submerger votre configuration:

MaxKeepAliveRequests 24

Et trouvez KeepAliveTimeoutet réglez cela sur «2»; cela devrait correspondre à la vitesse à laquelle une page sur votre site se charge et 2 secondes est une bonne moyenne:

KeepAliveTimeout 2

Recherchez maintenant la directive de configuration XML définie comme suit <IfModule mpm_prefork_module>:

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

La clé de ceci est ServerLimitet MaxClients. Par défaut, les paramètres d'Apache sont assez élevés; 255 car MaxClientsje crois. Mais la réalité est même qu'un site à fort trafic n'obtiendra que 70 à 80 connexions par seconde ... Et puis mourra ... Ce qui signifie que les connexions Apache sont sans état, donc la référence est les connexions par seconde. Donc, pour un serveur de développement ou à petite échelle, «40» est un bon chiffre.

Maintenant, avec ces ajustements clés, redémarrez Apache comme ceci:

sudo service httpd restart

En ajustant MySQL et Apache pour avoir des paramètres plus raisonnables que les valeurs par défaut / prédéfinies, vous pouvez libérer des ressources sur votre serveur et tout fonctionner plus facilement.

JakeGould
la source
17

Vous pouvez créer un fichier d'échange:

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

Cela créera un fichier d'échange et vous pourrez installer des applications. Pour supprimer le fichier d'échange:

swapoff -a
rm -f /swapfile

voir Arch wiki pour plus de détails.

pbogut
la source
1
Bonne idée. Une raison, outre la perte d'espace disque, pour désactiver le swap?
raider33
En fonction des paramètres de swap, un système peut commencer à l'utiliser avec une charge de mémoire de 50% environ. Si votre système a, disons, 512 Mo mais la plupart du temps il utilise ~ 400 Mo, il fonctionnera parfaitement sans échange, mais avec lui, il peut ralentir en essayant d'échanger 150 Mo d'avant en arrière. Mais je me trompe peut-être là-dessus.
pbogut
N'oubliez pas d'utiliser sudopour les commandes
Raptor
1
fallocate peut tricher et ne pas fonctionner ... utilisationsudo dd if=/dev/zero of=/swapfile count=512 bs=1MiB
Ray Foss