CentOS 7 no puede asignar memoria durante una operación de "yum install"

11

Intenta yum install php56w-mcrypty el sistema me dio este error

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

Corrí un cheque en 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

No estoy seguro de dónde más consultar.

Estoy usando DigitalOceanVPS con RAM de 512 MB, el plan de $ 5 / mes.

Muhaimin
fuente

Respuestas:

8

Este problema es que el servidor parece tener solo 490 MB de RAM en la máquina y tiene 421 MB. Dejando solo 68MB libres; eso no es mucha memoria para que funcione ningún sistema.

Mirando el resultado de topmuestra que MySQL (aka:) mysqldes el culpable.

Lo mejor que puede hacer si se trata de una situación temporal es simplemente detener MySQL de esta manera:

sudo service mysqld stop

Luego, con MySQL detenido, puede ejecutar yum installcomo se esperaba.

Pero otra solución sería utilizar un script como "MySQL Tuning Primer" para ayudar a evaluar el uso y la configuración de MySQL en el servicio y ajustar en consecuencia. La razón es que MySQL vainilla fuera de la caja será un cerdo de memoria. Pero "MySQL Tuning Primer" ayudará a evaluar su instalación y le permitirá saber qué puede modificar. Incluyendo la reducción de los requisitos de memoria para que la configuración pueda ser feliz con sus recursos limitados. El único inconveniente es que MySQL debe estar funcionando activamente durante al menos 48 horas seguidas para que los resultados de "MySQL Tuning Primer" valgan la pena. Más allá de eso, el ajuste de rendimiento de MySQL con este script es una excelente manera de ajustar su configuración de LAMP.

Además, dado que está ejecutando Apache, probablemente pueda reducir los requisitos de RAM para Apache (también conocido como httpd), de modo que libere más RAM de esa manera. Este es un conjunto bastante genérico de ajustes para un entorno de desarrollo básico de Apache, pero debería ayudarlo. Primero abra su configuración de Apache a través de su editor de línea de comandos favorito de esta manera; Prefiero nanopero cualquier editor de texto es bueno:

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

Ahora encuentre la línea que dice a Timeouty cámbiela a "120"; dos minutos es una ventana de tiempo de espera razonable:

Timeout 120

Del mismo modo, encuentre MaxKeepAliveRequestsy cambie eso a "24"; Las conexiones de "mantener vivo" son buenas, pero no dejes que abrumen tu configuración:

MaxKeepAliveRequests 24

Y encuentre KeepAliveTimeouty establezca eso en "2"; esto debería correlacionarse con la rapidez con la que se carga una página en su sitio y 2 segundos es un buen promedio:

KeepAliveTimeout 2

Ahora busque la directiva de configuración XML establecida como <IfModule mpm_prefork_module>:

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

La clave de esto es ServerLimity MaxClients. Por defecto, la configuración de Apache es bastante alta; 255 porque MaxClientsyo creo. Pero la realidad es que incluso un sitio de alto tráfico solo obtendrá 70-80 conexiones por segundo ... Y luego morirá ... Lo que significa que las conexiones de Apache no tienen estado, por lo que el punto de referencia son las conexiones por segundo. Entonces, para un servidor de desarrollo o de pequeña escala, "40" es un buen número.

Ahora con esos ajustes clave realizados, reinicie Apache de esta manera:

sudo service httpd restart

Al ajustar MySQL y Apache para tener configuraciones más razonables que los valores predeterminados / enlatados puede liberar recursos en su servidor y hacer que todo funcione sin problemas.

JakeGould
fuente
17

Puede crear un archivo de intercambio:

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

Esto creará un archivo de intercambio y podrá instalar aplicaciones. Para eliminar el archivo de intercambio:

swapoff -a
rm -f /swapfile

ver Arch wiki para más detalles.

pbogut
fuente
1
Buena idea. ¿Alguna razón, además de perder algo de espacio en disco, para desactivar el intercambio?
raider33
Depende de la configuración de intercambio, un sistema puede comenzar a usarlo con una carga de memoria del 50% más o menos. Si su sistema tiene, digamos, 512 MB, pero la mayoría de las veces usa ~ 400 MB, funcionará perfectamente bien sin intercambio, pero con él, puede ralentizarse tratando de intercambiar 150 MB de un lado a otro. Pero puedo estar equivocado en eso.
pbogut
No se olvide de usar sudopara los comandos
Raptor
1
Falocate puede hacer trampa y no funcionar ... usosudo dd if=/dev/zero of=/swapfile count=512 bs=1MiB
Ray Foss