Server Angriff oder Config/Hardware defekt?

darkster

New Member
Hallo

Ich habe seit gestern Mittag ein Problem mit meinem Server.
Debian Etch, Kernel 2.6.18
AMD Athlon 3500+, 1GB Ram
Apache2, PHP5, MySQL 5

Zum Problem: Seit gestern sind meine Seiten (4 liegen auf dem Server, relativ
gut besucht!) nur sehr schwer bis gar nicht zu erreichen. Ich habe schon
relativ viel ausprobiert (LAMP config variablen) - was aber zu keinem Erfolg
geführt hat. Ich habe zuvor auch nichts verändert, also nichts neues
installiert oder Config geändert.


/server-status vom Apache
Code:
Current Time: Monday, 03-Dec-2007 18:31:36 CET 
Restart Time: Monday, 03-Dec-2007 17:39:05 CET 
Parent Server Generation: 0 
Server uptime: 52 minutes 30 seconds 
Total accesses: 362441 - Total Traffic: 7.7 GB 
CPU Usage: u343.98 s67.24 cu0 cs0 - 13.1% CPU load 
115 requests/sec - 2.5 MB/second - 22.1 kB/request 
442 requests currently being processed, 3 idle workers

Apache2 Config
Code:
Timeout 120
KeepAlive Off
<IfModule mpm_prefork_module>
StartServers         20
MinSpareServers      10
MaxSpareServers     25
ServerLimit         450
MaxClients          450
MaxRequestsPerChild  30000
</IfModule>
Ebenfalls installiert ist eAccelerator

my.cnf
Code:
key_buffer = 128M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
myisam_sort_buffer_size = 128M
thread_cache_size = 16

query_cache_limit = 1M
query_cache_size = 32M
thread_concurrency = 4
max_connections = 200

ft_min_word_len = 3
- Queries pro Sekunde: 128,24 (Aus phpmyadmin).
wobei noch zu erwähnen ist, dass ich noch einen externen mysql server habe, d.h. viele Anfragen gehen zu einem anderen Server.

netstat -an |grep :80 |wc -l
Code:
7642

uptime
Code:
18:47:19 up  2:16,  1 user,  load average: 1.37, 1.04, 1.27

Die Load ist nicht so hoch, sie war trotz der Probleme auch schon tiefer. Sinst liegt sie so bei ca. 2

Jetzt noch etwas interessantes: Ich habe versucht, etwas herunterzuladen von einem anderen Server aus. Ich kam nur auf ca 70KB/s.
Wenn ich den Apache abschalte, komme ich immerhin auf 1400KB/s

traffic Grafik: http://www.pic-upload.de/03.12.07/paqmcw.png

Man sieht schön, dass plötzlich der Traffic nach unten geht und immer schön konstant bleibt. Der Serveranbieter sagt aber, dass die Leitung nicht gedrosselt wird oder so.

mii-tool -v eth0
Code:
eth0: negotiated 100baseTx-FD, link ok
  product info: vendor 00:50:43, model 11 rev 1
  basic mode:   autonegotiation enabled
  basic status: autonegotiation complete, link ok
  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD


ich habe das gefühl, dass die Apache Verbindungen (442 siehe Server-status)
so sind, weil die Anfragen nicht abgearbeitet werden können, da nichts raus
geht, also dass die Leitung zu langsam ist (es werden 5000KB/s benötigt,
sind aber nur 1500 verfügbar, demnach bleibt die Verbindung länger offen
und so sammeln sich die an.).

Aber wieso?


Ich bin dankbar für jegliche Hilfe und Tipps!


Gruss
darkster
 
Ein Blick in "top" hätte bereits mehr Aufschluss gegeben.

AMD Athlon 3500+, 1GB Ram

ServerLimit 450
MaxClients 450
Kurze mal die Daumenregeln angewandt:
450 Apache-Threads mit je ~12 MByte brauchen 5.400 MByte bzw. 5,4 GByte
Du hast aber nur 1GB, die auch noch anderen Programmen und dem OS Platz bieten müssen.
Ergo ist Linux die ganze Zeit am swappen und schaft es nicht, seine Arbeit zu verrichten. (Siehe auch CPU-Last.)

Lösung:
Entschlacke Deinen Apache:
- Schmeiß Module raus, die Du nicht brauchst.
- Stelle realistische Werte ein.
- Ziehe alle Timeouts deutlich runter.
- Beobachte ihn mit mod_status im ExtendedStatus.

huschi.
 
Auch wenn einige es vielleicht nicht mehr hören wollen/können, versuche es doch auch mal mit einem anderen Webserver, der hilft zwar nicht, wenn der Datendurchsatz gedrosselt wurde, kann aber Arbeitsspeicher einsparen. Lighttpd kenne ich aus persönlicher Erfahrung und finde, dass der sich nach etwas Einarbeit sehr einfach und auch flexible administrieren läßt.
Sonst fällt mir noch nginx ein, allerdings habe ich damit noch nicht gearbeitet, kann also nichts dazu sagen.
 
Hi,

450 Apache-Threads mit je ~12 MByte brauchen 5.400 MByte bzw. 5,4 GByte
An dieser Rechnung zweifle ich ein bisschen, auch wenn nur 140 Threads am laufen sind (was ja >>1GB wäre) - läuft der Server ohne Swap ganz normal.
Naja vielleicht sinds ja bei mir auch weniger MB pro Thread, wirklich viele Zusatzmodule laufen eigentlich nicht

Lighttpd habe ich davor schon ausprobiert - allerdings ohne positivem Resultat (jetzt aufs Problem bezogen, ansonsten schon).

Das Problem ist jetzt gelöst worden, der Hoster hat nach einem Telefonat und einigen Testfiles einige Dinge am Switch (oder wo auch immer) geändert und das ganze ruckelt jetzt wieder wie es soll.

Das Problem war wirklich so, dass 3-4000KB/s "gebraucht" wurden, aber nur 1000KB/s verfügbar waren.
 
Deswegen nennt man sowas Daumenregel.
Aber selbst der schlankest Apache kommt nicht im Prefork mit 420 Threads mit nur einem Megabyte Speicher aus.
Aber vielleicht hast Du auch kein MPM-Prefork sondern MPM-Worker?
Und die top-Ausgabe bliebst Du auch schuldig... ;)

huschi.
 
Back
Top