CentOS 7 kann während einer "yum install" -Operation keinen Speicher zuweisen

11

Versuchen Sie es yum install php56w-mcryptund System gab mir diesen Fehler

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

Ich habe nachgesehen 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

Ich bin mir nicht sicher, wo ich sonst noch nachsehen soll.

Ich verwende DigitalOceanVPS mit RAM 512 MB, dem 5-Dollar-Monatsplan.

Muhaimin
quelle

Antworten:

8

Dieses Problem ist, dass der Server anscheinend nur 490 MB RAM auf dem Computer hat und Sie 421 MB verwendet haben. Nur 68 MB frei lassen; Das ist nicht viel Speicher, mit dem ein System arbeiten kann.

Ein Blick auf die Ausgabe von topzeigt, dass MySQL (aka mysqld:) der Schuldige ist.

Das Beste, was Sie tun können, wenn dies eine vorübergehende Situation ist, ist, MySQL einfach so zu stoppen:

sudo service mysqld stop

Wenn MySQL gestoppt ist, können Sie yum installwie erwartet ausgeführt werden.

Eine andere Lösung wäre die Verwendung eines Skripts wie „MySQL Tuning Primer“ , um die Verwendung und Konfiguration von MySQL auf dem Serve zu bewerten und entsprechend anzupassen. Der Grund dafür ist, dass Vanilla MySQL sofort ein Speicherfresser sein wird. Mit „MySQL Tuning Primer“ können Sie jedoch Ihre Installation bewerten und wissen, was Sie optimieren können. Einschließlich der Verringerung des Speicherbedarfs, damit das Setup mit Ihren begrenzten Ressourcen zufrieden sein kann. Der einzige Haken ist, dass MySQL mindestens 48 Stunden lang aktiv ausgeführt werden muss, damit die Ergebnisse des „MySQL Tuning Primer“ irgendetwas wert sind. Darüber hinaus ist die Leistungsoptimierung von MySQL mit diesem Skript eine hervorragende Möglichkeit, Ihr LAMP-Setup zu optimieren.

Da Sie Apache ausführen, können Sie außerdem wahrscheinlich die RAM-Anforderungen für Apache (auch bekannt als httpd) verringern, sodass Sie auf diese Weise mehr RAM freigeben. Dies ist eine ziemlich allgemeine Reihe von Optimierungen für eine grundlegende Entwicklungsumgebung von Apache, sollte Ihnen aber helfen. Öffnen Sie zuerst Ihre Apache-Konfiguration über Ihren bevorzugten Befehlszeileneditor wie folgt. Ich bevorzuge, nanoaber jeder Texteditor ist gut:

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

Suchen Sie nun die Zeile, die a sagt, Timeoutund ändern Sie diese in „120“. Zwei Minuten sind ein angemessenes Zeitlimit:

Timeout 120

Finden MaxKeepAliveRequestsund ändern Sie dies auf ähnliche Weise in „24“. "Keep Alive" -Verbindungen sind gut, aber lassen Sie sich nicht von Ihrem Setup überfordern:

MaxKeepAliveRequests 24

Und finde KeepAliveTimeoutund setze das auf "2"; Dies sollte damit korrelieren, wie schnell eine Seite auf Ihrer Website geladen wird und 2 Sekunden ein guter Durchschnitt sind:

KeepAliveTimeout 2

Suchen Sie nun nach der XML-Konfigurationsanweisung, die wie folgt festgelegt ist <IfModule mpm_prefork_module>:

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

Der Schlüssel dazu ist ServerLimitund MaxClients. Standardmäßig sind die Einstellungen von Apache ziemlich hoch. 255 denn MaxClientsich glaube. Aber die Realität ist, dass selbst eine stark frequentierte Site nur 70-80 Verbindungen pro Sekunde erhält… und dann stirbt… Das bedeutet, dass Apache-Verbindungen zustandslos sind, sodass der Benchmark Verbindungen pro Sekunde sind. Für einen Entwicklungs- oder kleinen Server ist „40“ eine gute Zahl.

Starten Sie Apache nun nach diesen wichtigen Anpassungen wie folgt neu:

sudo service httpd restart

Durch Anpassen von MySQL und Apache an vernünftigere Einstellungen als Standardwerte / vordefinierte Werte können Ressourcen auf Ihrem Server freigesetzt und alles reibungsloser ausgeführt werden.

JakeGould
quelle
17

Sie können eine Auslagerungsdatei erstellen:

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

Dadurch wird eine Auslagerungsdatei erstellt und Sie können Anwendungen installieren. So entfernen Sie die Auslagerungsdatei:

swapoff -a
rm -f /swapfile

Weitere Informationen finden Sie im Arch-Wiki .

pbogut
quelle
1
Gute Idee. Gibt es einen Grund, neben dem Verlust von Speicherplatz den Swap auszuschalten?
raider33
Abhängig von den Swap-Einstellungen kann ein System sie bei etwa 50% Speicherlast verwenden. Wenn Ihr System beispielsweise 512 MB hat, aber die meiste Zeit ~ 400 MB verwendet, funktioniert es ohne Swap einwandfrei, aber damit kann es den Versuch, 150 MB hin und her zu tauschen, verlangsamen. Aber da kann ich mich irren.
pbogut
Vergessen Sie nicht, sudofür die Befehle zu verwenden
Raptor
1
Fallocate kann betrügen und nicht funktionieren ... verwendensudo dd if=/dev/zero of=/swapfile count=512 bs=1MiB
Ray Foss