phpbar.de logo

Mailinglisten-Archive

Lösung: Viele Threads in MySQL bei hoher Serverlast ...
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Lösung: Viele Threads in MySQL bei hoher Serverlast ...



Ich möchte ja nix gegen die allgemeine Meinung sagen, aber der Unterschied 
zwischen mysql_pconnect und mysql_connect mit mysql_close ist nur eine HASH 
Abfrage. Es *bringt also nix*.

Was es aber getan hat, nämlich von hunderten mysql threads auf ca. 10-20 
dauerhaft herunterzukommen, ist die Option keepalive off in der Datei 
/etc/httpd/conf zu setzen. Keepalive sorgt für *hängende* Clients (Absturz 
des Browsers ...) dafür, daß der Apache WWW-Server versucht, mit kleinen 
Paketen die Verbindung offenzuhalten. Auch der Kernel macht z.B. bei nicht 
ordnungsgemäßen Verbindungen mit KeepAlive Paketen das so.
Also muß man mit (Kernel 2.4.1):

[root_(at)_bine stepken]# cat < /proc/sys/net/ipv4/tcp_keepalive_time
7200
[root_(at)_bine stepken]# echo 10 > /proc/sys/net/ipv4/tcp_keepalive_time
[root_(at)_bine stepken]#                                     

den Timeout auf ca. 10 Sekunden setzen. Wenn man dann noch seitens des Apache 
(der kann auch senden, jaja) die Option keepalive off setzt, dann hört es 
*schlagartig* auf, mit den dummen, nichtsnutzigen Threads von MySQL.

Ein Server, der zuvor mit 512 MByte RAM und PIII überfordert war, kann nun 
durch ein P75 mit 64 MByte abgelöst werden.

Und wer dann noch seine PHP Skripte beschleunigen möchte, der kann mit 
*tomahawk* den Squid vor den Apache setzen, sodaß dynamische Inhalte statisch 
aus dem Squid kommen, soweit es geht. Das hat zumindest bei mir den Server 
auf ca. Faktor 100 beschleunigt (schwere Last mit MySQL + PHP, kein 
User-Tacking, Session-Tracking).....Mit Kernel 2.4 und der neuen UMA (Unified 
Memory Architektur antwortet Linux sogar bei einer Last von 8-15 noch flink 
(ähnlich BSD)

Es wird aber langsam Zeit, daß PHP bzw. MOD_PHP multi-threaded wird. Wenn 
z.B. 2 Leute mit UPLOAD schön langsam Dateien hochladen (PHP), dann wird der 
2. bereits blockiert. Abhilfe schafft hier nur, die Zahl MaxClient *herunter* 
zu setzen, nicht hoch. Damit können umso mehr Client PHP Skripte gleichzeitig 
ausführen, da jeder Thread ja eigene, unabhängige Prozesse mit PHP ausführen 
kann. Wichtig ist auch, hostnamelookup auf off zu stellen, da auch der DNS 
Server gewaltig bremsen kann (Siehe Telekom DNS). Apache wartet dann immer 
auf einen Reverse Lookup, bevor er weitere Verbindungen annimmt.

Insgesamt habe ich so Performance-Verbesserungen von ca. 50-200 erreicht, auf 
der selben Hardware. Ich lache mich immer über so Firmen, wie Strato z.B. 
schief, deren WWW-Server sich trotz SUN MP Systemen (Preis: Einfamilienhaus) 
sich kaum rühren .... hihi.......

Gru/3, an alle GNU'ler Guido Stepken

---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql 


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive