O CentOS 7 não pode alocar memória durante uma operação “yum install”

11

Tente yum install php56w-mcrypte sistema me deu esse erro

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

Eu verifiquei 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

Não tenho certeza de onde mais verificar.

Estou usando o DigitalOceanVPS com RAM de 512 MB, o plano de US $ 5 / mês.

Muhaimin
fonte

Respostas:

8

Esse problema é que o servidor parece ter apenas 490 MB de RAM na máquina e você tem 421 MB usados. Deixando apenas 68 MB grátis; isso não é muita memória para qualquer sistema trabalhar.

Observar a saída de topmostra que o MySQL (aka:) mysqldé o culpado.

A melhor coisa que você pode fazer se esta for uma situação temporária é simplesmente parar o MySQL assim:

sudo service mysqld stop

Então, com o MySQL parado, você pode executar yum installconforme o esperado.

Mas outra solução seria usar um script como "MySQL Tuning Primer" para ajudar a avaliar o uso e a configuração do MySQL no serviço e ajustar em conformidade. O motivo é que o MySQL simples e simples, fora da caixa, será um problema de memória. Mas o “MySQL Tuning Primer” ajudará a avaliar sua instalação e informará o que você pode ajustar. Incluindo a redução dos requisitos de memória para que a instalação possa ficar satisfeita com seus recursos limitados. O único problema é que o MySQL precisa estar funcionando ativamente por pelo menos 48 horas seguidas para que os resultados do “MySQL Tuning Primer” valam alguma coisa. Além disso, ajustar o desempenho do MySQL com esse script é uma ótima maneira de ajustar sua configuração do LAMP.

Além disso, como você está executando o Apache, é provável que você possa diminuir os requisitos de RAM do Apache (aka httpd) para liberar mais RAM dessa maneira. Este é um conjunto bastante genérico de ajustes para um ambiente básico de desenvolvimento do Apache, mas deve ajudá-lo. Primeiro abra sua configuração do Apache através do seu editor de linha de comando favorito como este; Eu prefiro, nanomas qualquer editor de texto é bom:

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

Agora encontre a linha que diz Timeoute mude para "120"; dois minutos é uma janela de tempo limite razoável:

Timeout 120

Da mesma forma encontrar MaxKeepAliveRequestse mudar isso para “24”; Conexões "manter vivo" são boas, mas não deixe que elas sobrecarreguem sua configuração:

MaxKeepAliveRequests 24

E encontre KeepAliveTimeoute defina isso como "2"; isso deve estar relacionado à rapidez com que uma página é carregada e em 2 segundos é uma boa média:

KeepAliveTimeout 2

Agora, procure a diretiva de configuração XML definida como <IfModule mpm_prefork_module>:

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

A chave para isso é ServerLimite MaxClients. Por padrão, as configurações do Apache são bastante altas; 255 porque MaxClientsacredito. Mas a realidade é que mesmo um site de alto tráfego terá apenas 70 a 80 conexões por segundo ... E então morre ... Significado As conexões do Apache são sem estado, portanto, a referência é a conexão por segundo. Portanto, para um servidor de desenvolvimento ou de pequena escala, "40" é um bom número.

Agora, com os principais ajustes feitos, reinicie o Apache assim:

sudo service httpd restart

Ajustando o MySQL e o Apache para ter configurações mais razoáveis ​​do que os valores padrão / enlatados, pode liberar recursos no servidor e fazer tudo funcionar de maneira mais suave.

JakeGould
fonte
17

Você pode criar um arquivo de permuta:

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

Isso criará um arquivo de troca e você poderá instalar aplicativos. Para remover o arquivo de troca:

swapoff -a
rm -f /swapfile

veja o Arch wiki para detalhes.

pbogut
fonte
1
Boa ideia. Alguma razão, além de perder espaço em disco, para desativar a troca?
raider33
Depende das configurações de troca que um sistema pode começar a usar com 50% de carga de memória. Se o seu sistema está tendo, digamos, 512 MB, mas na maioria das vezes está usando ~ 400 MB, ele funcionará perfeitamente sem troca, mas com ele, pode desacelerar ao tentar trocar 150 MB para frente e para trás. Mas posso estar errado nessa.
Pbogut
Não se esqueça de usar sudopara os comandos
Raptor
1
fallocate pode enganar e não trabalho ... usosudo dd if=/dev/zero of=/swapfile count=512 bs=1MiB
Ray Foss