Ich betreibe einen dedizierten Apache-Webserver unter CentOS6: 12 GB Speicher 4 cpus
Meine httpd-Konfiguration lautet wie folgt:/etc/httpd/conf/httpd.conf
Timeout 60
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
Der Server verwendet Prefork MPM mit den folgenden Einstellungen.
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 300
</IfModule>
Dies wurde von einer vorherigen Einstellung von
geändert<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
DAS PROBLEM
Nachdem Sie diese Werte ein paar Mal geändert und httpd neu gestartet haben, passiert immer dasselbe. Eine der PIDs reicht bis zu 11 GB Arbeitsspeicher, also töte ich sie manuell und der Speicher wird freigegeben.
Hier ist meine free -m-Ausgabe, nachdem ich eine unzulässige PID getötet und neu gestartet habe:
total used free shared buffers cached
Mem: 11891 1132 10759 0 34 417
-/+ buffers/cache: 679 11212
Swap: 3827 227 3600
Es scheint, dass meine httpd-PIDs zu viel Speicher benötigen.
top - 11:26:58 up 1:20, 1 user, load average: 2.87, 2.43, 4.25
Tasks: 174 total, 12 running, 162 sleeping, 0 stopped, 0 zombie
Cpu(s): 83.3%us, 4.4%sy, 0.0%ni, 10.4%id, 1.7%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 12177272k total, 4746532k used, 7430740k free, 50012k buffers
Swap: 3919840k total, 227860k used, 3691980k free, 776180k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3848 apache 20 0 653m 216m 8908 R 31.3 1.8 0:11.77 httpd
3862 apache 20 0 627m 194m 6824 R 30.3 1.6 0:09.62 httpd
3846 apache 20 0 562m 126m 8728 R 28.6 1.1 0:10.20 httpd
3844 apache 20 0 638m 204m 6704 R 27.9 1.7 0:08.40 httpd
3911 apache 20 0 638m 203m 5880 R 27.6 1.7 0:04.92 httpd
3880 apache 20 0 639m 205m 6724 R 27.3 1.7 0:06.76 httpd
3918 apache 20 0 680m 246m 5820 S 25.3 2.1 0:05.38 httpd
3921 apache 20 0 630m 197m 4440 R 24.0 1.7 0:01.63 httpd
3843 apache 20 0 624m 191m 6684 R 23.3 1.6 0:07.50 httpd
2317 mysql 20 0 2463m 116m 3584 S 23.0 1.0 20:07.12 mysqld
3907 apache 20 0 620m 187m 5856 R 23.0 1.6 0:04.35 httpd
3927 apache 20 0 623m 188m 3624 R 22.6 1.6 0:00.68 httpd
3906 apache 20 0 628m 195m 6080 R 20.6 1.6 0:04.27 httpd
3908 apache 20 0 556m 123m 5880 S 8.0 1.0 0:02.79 httpd
3917 apache 20 0 536m 104m 6064 S 2.7 0.9 0:00.39 httpd
3909 apache 20 0 554m 121m 6120 S 2.3 1.0 0:01.19 httpd
3915 apache 20 0 614m 182m 6372 S 2.3 1.5 0:02.51 httpd
3849 apache 20 0 576m 144m 6700 S 1.7 1.2 0:06.54 httpd
3838 root 20 0 508m 84m 12m S 0.3 0.7 0:00.27 httpd
3931 apache 20 0 509m 76m 4216 S 0.3 0.6 0:00.01 httpd
Und einer von ihnen springt immer heraus und verbraucht ALLE Speicherplatz.
4076 apache 20 0 7834m 7.2g 6172 S 11.6 62.2 0:34.86 httpd
MYSQL-Speicher
[root@xxx ~]# ps aux | grep 'mysql' | awk '{print $6}'
4
148316
884
APACHE-Prozessgröße
[root@xxx ~]# ps aux | grep 'httpd' | awk '{print $6}'
93640
73196
133840
204352
170620
202056
120312
123600
123492
119048
131316
119744
200304
203160
118468
189300
203196
200024
124184
880
NETSTAT zu Spitzenzeiten (wenn die PID den gesamten Speicher belegt hat)
[root@xxx ~]# netstat -plan | grep :80
tcp 0 0 :::80 :::* LISTEN 4235/httpd
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:208.167.230.35:47089 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:208.167.230.35:59089 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:208.167.230.35:35831 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:208.167.230.35:42075 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:208.167.230.35:49612 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:208.167.230.35:43970 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:173.199.114.19:44220 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:208.167.230.35:34405 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:208.167.230.35:33963 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:66.249.75.222:42306 ESTABLISHED 4241/httpd
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:173.199.115.67:53145 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:91.232.96.34:64675 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:107.20.53.252:40552 ESTABLISHED 4247/httpd
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:173.199.114.19:46658 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:208.167.230.35:46954 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:74.208.104.107:33988 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:208.167.230.35:51501 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:208.167.230.35:52628 TIME_WAIT -
tcp 0 0 ::ffff:74.208.104.107:80 ::ffff:74.208.104.107:33989 TIME_WAIT -
Der Server dient verschiedenen Zwecken: Führt eine Reihe von Wordpress-Sites aus. CRON-Jobs für verschiedene automatisierte Aufgaben (ich habe die meisten davon erledigt und das Problem tritt immer noch auf) Verfügt über mobile Anwendungen, die eine Verbindung per POST herstellen.
FRAGEN:
1) What ELSE can I do to troubleshoot this problem?
2) How do I find WHICH PHP script might be running to take up all the memory? Perhaps this might be some runaway script that I haven't isolated.
3) Am I editing the right file for my httpd config,/etc/httpd/conf/httpd.conf?
4) What are the optimal settings for my server?
5) Could there be some kind of attack or rootkit thing happening?
BEARBEITEN
Ich habe 2 permanente ulimit-Limits mit/etc/security/limits.conf für maxlock und als (virtueller Speicher) auf 1048576 KB (1 GB) festgelegt. Dies scheint das Verhalten gestoppt zu haben, aber ich glaube, es ist nur eine Notlösung. Ich brauche noch ein paar Antworten.
Rick
Bemerken, dass die Frage seit 2013 immer noch unbeantwortet ist, hoffentlich wurde das jetzt gelöst
Ihr Webserver wird wahrscheinlich angegriffen, z. XML-RPC-Angriffe, bei denen viel Verkehr durch Ihren Server ohne Unterbrechung fließt. Überprüfen Sie access.log
, um das Dateizugriffsmuster herauszufinden.
Um zu wissen, welche PHP die meisten Ressourcen verbraucht, folgen Sie den Anweisungen in dieser Antwort.
Ja.
Hängt davon ab, wie PHP funktioniert, konzentrieren sich auf gleichzeitige Benutzer oder Rechenleistung?
Wie # 1. Überprüfen Sie Zugriffsprotokoll & amp; Aktivieren Sie bei Bedarf die Anwendungsfirewall.
Ich hoffe, es hilft.