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

10

Tente yum install php56w-mcrypt e o sistema me forneceu 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 DigitalOcean VPS com RAM 512 MB, o plano de US $ 5 / mês.

    
por Muhaimin 30.01.2015 / 02:32

2 respostas

6

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

Olhando para a saída de top mostra que o MySQL (aka: mysqld ) é o culpado.

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

sudo service mysqld stop

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

Mas outra solução seria usar um script como o "MySQL Tuning Primer" para ajudar a avaliar o uso e a configuração do MySQL no saque e ajuste de acordo. A razão disso é que o MySQL simples e pronto para uso é um "memory hog". Mas o “MySQL Tuning Primer” ajudará a avaliar sua instalação e permitirá que você saiba o que você pode ajustar. Incluindo a redução dos requisitos de memória para que a configuração possa ser feliz com seus recursos limitados. O único problema é que o MySQL precisa estar rodando ativamente por pelo menos 48 horas seguidas para que os resultados do “MySQL Tuning Primer” valham alguma coisa. Além disso, o desempenho ajustando o MySQL com este script é uma ótima maneira de ajustar seu L.A.M.P. configuração.

Além disso, como você está executando o Apache, é provável que você diminua os requisitos de RAM do Apache (também conhecido como httpd ) para liberar mais RAM dessa maneira. Este é um conjunto bastante genérico de ajustes para um ambiente de desenvolvimento básico 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 nano mas qualquer editor de texto é bom:

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

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

Timeout 120

Similarmente, encontre MaxKeepAliveRequests e mude para "24"; Conexões "keep alive" são boas, mas não deixe que elas sobrecarreguem sua configuração:

MaxKeepAliveRequests 24

Encontre KeepAliveTimeout e defina como "2"; Isso deve se correlacionar a quão rápida uma página no seu site é carregada e 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 é ServerLimit e MaxClients . Por padrão, as configurações do Apache são bastante altas; 255 para MaxClients eu acredito. Mas a realidade é que mesmo um site de alto tráfego terá apenas 70-80 conexões por segundo ... E então morrer ... Significado As conexões do Apache são sem estado, então o benchmark é conexões por segundo. Portanto, para um servidor de desenvolvimento ou de pequena escala, "40" é um bom número.

Agora, com esses ajustes de chave feitos, reinicie o Apache assim:

sudo service httpd restart

Ao ajustar o MySQL e o Apache para ter configurações mais razoáveis do que os valores padrão / enlatados, você pode liberar recursos em seu servidor e fazer com que tudo funcione melhor.

    
por 30.01.2015 / 04:04
14

Você pode criar um arquivo de troca:

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 Arch wiki para detalhes.

    
por 17.07.2016 / 12:09

Tags