Mein Apache startet sofort mit hohem Speicherverbrauch. Nach einem Neustart oder Neustart sehe ich diese Art von Zahlen
top - 15:37:59 up 22 min, 1 user, load average: 0.12, 0.09, 0.12
Tasks: 101 total, 1 running, 100 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 88.0%id, 11.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3076864k total, 1098872k used, 1977992k free, 75348k buffers
Swap: 2097148k total, 0k used, 2097148k free, 582912k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1108 mysql 20 0 859m 185m 8136 S 0.0 6.2 0:08.91 mysqld
1335 root 20 0 581m 109m 18m S 0.0 3.7 0:00.61 apache2
2064 www-data 20 0 586m 107m 12m S 0.0 3.6 0:00.16 apache2
2068 www-data 20 0 586m 107m 11m S 0.0 3.6 0:00.09 apache2
2083 www-data 20 0 586m 106m 11m S 0.0 3.6 0:00.05 apache2
2085 www-data 20 0 586m 106m 11m S 0.0 3.6 0:00.03 apache2
2081 www-data 20 0 589m 101m 7368 S 0.0 3.4 0:00.48 apache2
2086 www-data 20 0 582m 95m 4036 S 0.0 3.2 0:00.00 apache2
Hier ist das Ergebnis von apache2 -V
Server version: Apache/2.4.12 (Ubuntu)
Server built: Feb 4 2015 14:21:10
Server's Module Magic Number: 20120211:41
Server loaded: APR 1.5.1, APR-UTIL 1.5.3
Compiled using: APR 1.5.1, APR-UTIL 1.5.3
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
Und hier ist schließlich meine apache2/mods-enabled/mpm_prefork.conf:
Zu Ihrer Information – das ist meine neue Konfiguration, die derzeit live ist. Ich habe die ServerLimit-Direktive eingerichtet, um zu verhindern, dass 100 Server gestartet werden und das System abstürzt.
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 5
MaxSpareServers 5
MaxClients 50
ServerLimit 30
MaxRequestsPerChild 200
# MaxSpareServers 5
# MaxRequestWorkers 150
# MaxConnectionsPerChild 0
</IfModule>
Ich betreibe einen anderen Server mit einer ähnlichen Konfiguration und mein Top zeigt Folgendes:
top - 15:48:32 up 10 days, 14 min, 2 users, load average: 0.10, 0.06, 0.06
Tasks: 172 total, 1 running, 171 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 3078580 total, 2749928 used, 328652 free, 229412 buffers
KiB Swap: 3141628 total, 1608 used, 3140020 free. 1868332 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1286 mysql 20 0 1344940 265440 8340 S 0.0 8.6 56:22.39 mysqld
21176 www-data 20 0 428168 64900 41772 S 0.0 2.1 0:01.24 apache2
21020 www-data 20 0 429684 58164 36664 S 0.0 1.9 0:01.93 apache2
21185 www-data 20 0 425460 52332 31952 S 0.0 1.7 0:00.91 apache2
21199 www-data 20 0 425884 50604 30144 S 0.0 1.6 0:00.26 apache2
21130 www-data 20 0 423124 48396 30372 S 0.0 1.6 0:00.52 apache2
21186 www-data 20 0 422796 48296 30584 S 0.0 1.6 0:00.46 apache2
21205 www-data 20 0 422992 47608 29740 S 0.0 1.5 0:00.18 apache2
21204 www-data 20 0 422944 43576 25756 S 0.0 1.4 0:00.12 apache2
21203 www-data 20 0 424220 28016 8896 S 0.0 0.9 0:00.23 apache2
6095 root 20 0 414748 24100 14424 S 0.0 0.8 0:14.32 apache2
Das ist nach 10 Tagen Betrieb ... Mein System stürzte nach ein paar Tagen ab und die Protokolle zeigten, dass etwa 75 Apache-Prozesse gestartet wurden, alle mit hohem Speicherverbrauch. Ich bin nicht sicher, was los ist. Ich habe mod_pagespeed um den 17. Februar herum installiert ... es lief bis etwa zum 25. Februar problemlos. Ab dem 25. Februar habe ich alle möglichen Probleme bemerkt.
Es wird Ubuntu 12.04 LTS ausgeführt.
Ich wäre für alle weiteren Schritte zur Lösung dieses Problems dankbar.
Antwort1
„eine ähnliche Konfiguration verwenden“
Ich möchte in aller Bescheidenheit darauf hinweisen, dass dies eine ganz andere Konfiguration ist. Der erste Schritt bei der Feinabstimmung besteht darin, alles zu entfernen, was Sie nicht benötigen (im Fall von Apache die gemeinsam genutzten Module). Als nächstes sollten Sie bedenken, dass RSS und VSZ keine guten Indikatoren für den Speicherbedarf eines Prozesses unter Linux sind, und schon gar nicht eines gegabelten Prozesses. Um herauszufinden, wie viel Speicher Ihre Apache-Prozesse wirklich verwenden, verfolgen Sie die Ausgabe von „free“ und ps -ef | grep apache2 | wc
Sobald Sie einige Daten gesammelt haben, können Sie eine lineare Regression durchführen, um das gewünschte Serverlimit zu berechnen.
Es ist keine gute Idee, minspareserver auf denselben Wert wie maxspareservers zu setzen.
Ich hatte mod_pagespeed installiert
mod_pagespeed ist sowohl speicher- als auch cpu-hungrig und sollteniemalsohne vorgeschalteten Reverse-Proxy verwendet werden.