CentOS 7 non può allocare memoria durante un'operazione di "installazione yum"


11

Prova yum install php56w-mcrypte il sistema mi ha dato questo errore

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

Ho eseguito un controllo 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

Non so dove altro controllare.

Sto usando DigitalOceanVPS con RAM 512 MB, il piano di $ 5 al mese.

Risposte:


8

Questo problema è che il server sembra avere solo 490 MB di RAM sulla macchina e hai 421 MB utilizzati. Lasciando liberi solo 68 MB; non c'è molta memoria per nessun sistema con cui lavorare.

Guardando l'output di topmostra che MySQL (aka:) mysqldè il colpevole.

La cosa migliore che puoi fare se questa è una situazione temporanea è semplicemente fermare MySQL in questo modo:

sudo service mysqld stop

Quindi con MySQL interrotto, è possibile eseguire yum installcome previsto.

Ma un'altra soluzione sarebbe quella di utilizzare uno script come "MySQL Tuning Primer" per aiutare a valutare l'utilizzo e la configurazione di MySQL sul servizio e ad adeguarsi di conseguenza. Il motivo è che MySQL vanilla è un vero toccasana per la memoria. Ma "MySQL Tuning Primer" ti aiuterà a valutare la tua installazione e ti farà sapere cosa puoi modificare. Compreso l'abbassamento dei requisiti di memoria in modo che l'installazione possa essere soddisfatta delle risorse limitate. L'unico problema è che MySQL deve essere attivo per almeno 48 ore di fila affinché i risultati di "MySQL Tuning Primer" possano valere qualsiasi cosa. Oltre a ciò, ottimizzare le prestazioni di MySQL con questo script è un ottimo modo per ottimizzare la configurazione della LAMPADA.

Inoltre, poiché stai eseguendo Apache, puoi probabilmente abbassare i requisiti di RAM per Apache (aka httpd) in modo da liberare più RAM in quel modo. Questo è un insieme abbastanza generico di modifiche per un ambiente di sviluppo di base di Apache, ma dovrebbe aiutarti. Per prima cosa apri la tua configurazione di Apache tramite il tuo editor di riga di comando preferito in questo modo; Preferisco nanoma qualsiasi editor di testo è buono:

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

Ora trova la linea che dice a Timeoute cambiala in "120"; due minuti è una finestra di timeout ragionevole:

Timeout 120

Allo stesso modo trova MaxKeepAliveRequestse cambia quello in "24"; Le connessioni "keep alive" sono buone, ma non lasciarle sopraffare dalla configurazione:

MaxKeepAliveRequests 24

E trovalo KeepAliveTimeoute impostalo su "2"; questo dovrebbe essere correlato alla velocità con cui una pagina viene caricata sul tuo sito e 2 secondi è una buona media:

KeepAliveTimeout 2

Ora cerca la direttiva di configurazione XML impostata come <IfModule mpm_prefork_module>:

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

La chiave di ciò è ServerLimite MaxClients. Di default le impostazioni di Apache sono piuttosto alte; 255 perché MaxClientscredo. Ma la realtà è che anche un sito ad alto traffico otterrà solo 70-80 connessioni al secondo ... E poi morirà ... Significa che le connessioni Apache sono senza stato, quindi il benchmark è connessioni al secondo. Quindi, per uno sviluppo o un server su piccola scala, "40" è un buon numero.

Ora con le modifiche apportate ai tasti, riavvia Apache in questo modo:

sudo service httpd restart

Regolando MySQL e Apache per avere impostazioni più ragionevoli rispetto ai valori predefiniti / fissi, puoi liberare risorse sul tuo server e rendere tutto più fluido.


17

È possibile creare il file di scambio:

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

Questo creerà il file di scambio e sarai in grado di installare applicazioni. Per rimuovere il file di scambio:

swapoff -a
rm -f /swapfile

vedi Arch wiki per i dettagli.


1
Bella idea Qualche motivo, oltre a perdere spazio su disco, per disattivare lo scambio?
Raider33,

Dipende dalle impostazioni di scambio che un sistema può iniziare ad usarlo con un carico di memoria del 50% circa. Se il tuo sistema ha, diciamo, 512 MB, ma la maggior parte delle volte usa ~ 400 MB, funzionerà perfettamente senza scambio, ma con esso può rallentare cercando di scambiare 150 MB avanti e indietro. Ma potrei sbagliarmi su quello.
pbogut,

Non dimenticare di usare sudoper i comandi
Raptor

1
fallocate può imbrogliare e non funzionare ... usaresudo dd if=/dev/zero of=/swapfile count=512 bs=1MiB
Ray Foss il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.