Performanceproblem

Darkdream

Registered User
Ich bin gerade am verzweifeln :(
Mein Root Server hat die Aufgabe eine einzige Webseite zu hosten. Wenn jedoch mehrere User online sind (ab ca 40 Usern tritt das Problem auf) dauert der Seitenaufbau ewig lange. Ich habe mir danach mit Hilfe von "top" die Auslastung angesehen und habe festgestellt, dass die "httpd2-prefork" Prozesse eine hohe Auslastung haben (sind meistens 2 Prozesse, die jeweils 50% der CPU Leistung beanspruchen).

Die MySQL abfragen dauern zwischen 0,3 und 0,9 Sekunden (bei etwas mehr als 250000 Datensätzen) - sind das normale Zeiten?

Server ist ein ROOT Power bei S4Y mit SuSE.

Ist es möglich, dass ein uneffizient programmierter PHP Code den Server in die Knie zwingt? Welche Ursachen könnte es noch geben?

Der MySQL Server wird alle 24 Stunden restartet - sollte man dies bleiben lassen?
Anbei die Statusinformationen des MySQL Servers und die php.ini. Ich hoffe, dass diese Informationen ausreichen, wenn nicht einfach nachfragen. :)

Ich hoffe, dass mir einer von euch helfen kann, denn ich bin leider am Ende mit meinem Latein.
Danke für eure Antworten!

mfg
Michael
 

Attachments

Darkdream said:
Ich bin gerade am verzweifeln :(
Kein Problem dafür sind wir ja da :)
Darkdream said:
Die MySQL abfragen dauern zwischen 0,3 und 0,9 Sekunden (bei etwas mehr als 250000 Datensätzen) - sind das normale Zeiten?
Ja :)
Darkdream said:
Ist es möglich, dass ein uneffizient programmierter PHP Code den Server in die Knie zwingt?
Naja wir reden hier von mehr als 40 simultanen Usern? JA!
Darkdream said:
Welche Ursachen könnte es noch geben?
Rechenleistung / Systemresourcen am Limit? Läuft wirklich nur:
Mail, HTTP, MySQL ? oder hast du noch einen Counterstriker Server nebenbei laufen :)
Darkdream said:
Der MySQL Server wird alle 24 Stunden restartet - sollte man dies bleiben lassen?
Ist dir überlassen, jedoch wenn du soviele User hast, dann fällt deine Seite ja alle 24 Stunden jeweils für ein paar Sekunden aus. Wieso resettest du die MySQL überhaupt? Bislang sehe ich keinen triftigen Grund dafür.
 
djrick said:
Rechenleistung / Systemresourcen am Limit? Läuft wirklich nur:
Mail, HTTP, MySQL ? oder hast du noch einen Counterstriker Server nebenbei laufen :)

Ja, nur Mail, HTTP, MySQL und der Standard FTP

Es braucht auch nur der Prozess Namens "httpd2-prefork" CPU-Zeit. Ich nehme einmal an, dass das der Apache Prozess für die jeweiligen User ist. Mir ist nur Unklar, warum der Server die Rechenleistung nicht besser verteilt und warum diese Prozesse so viel Leistung brauchen.
 
Zu entsprechender Auslastungszeit:
a) in MySQL: show processlist;
b) in Apache mod_status mit ExtendedStatus=on aktivieren und ansehen.
Dann siehst Du zumindest welche Scripte daran beteiligt sind.

Evtl. ist es einfach ein Deadlock, vieleicht auch ein PHP-Bug.
Welche PHP-Version hast Du drauf?

huschi.
 
Huschi said:
Zu entsprechender Auslastungszeit:
a) in MySQL: show processlist;

Code:
+-------+------+-------------------------------------------------+------------+---------+------+----------------------+
| Id    | User | Host                                            | db         | Command | Time | State                |
+-------+------+-------------------------------------------------+------------+---------+------+----------------------+
| 74091 | web1 | localhost                                       | usr_web1_1 | Sleep   | 163  |                      |
| 74148 | web1 | localhost                                       | usr_web1_1 | Query   | 1    | Sending data         |
| 74182 | web1 | localhost                                       | usr_web1_1 | Sleep   | 142  |                      |
| 74194 | web1 | localhost                                       | usr_web1_1 | Query   | 0    | Sending data         |
| 74221 | web1 | localhost                                       | usr_web1_1 | Sleep   | 108  |                      |
| 74313 | web1 | localhost                                       | usr_web1_1 | Query   | 2    | Sending data         |
| 74320 | web1 | localhost                                       | usr_web1_1 | Query   | 0    | Sending data         |
| 74327 | web1 | localhost                                       | usr_web1_1 | Sleep   | 102  |                      |
| 74329 | web1 | localhost                                       | usr_web1_1 | Query   | 2    | Sending data         |
| 74354 | web1 | localhost                                       | usr_web1_1 | Query   | 2    | Sending data         |
| 74374 | web1 | localhost                                       | usr_web1_1 | Query   | 1    | Sending data         |
| 74383 | web1 | localhost                                       | usr_web1_1 | Query   | 1    | Sending data         |
| 74401 | web1 | localhost                                       | usr_web1_1 | Query   | 2    | Sending data         |
| 74468 | web1 | localhost                                       | usr_web1_1 | Query   | 2    | Sending data         |
| 74539 | web1 | localhost                                       | usr_web1_1 | Query   | 1    | Sending data         |
| 74555 | web1 | localhost                                       | usr_web1_1 | Query   | 1    | preparing            |
| 74560 | web1 | localhost                                       | usr_web1_1 | Query   | 0    | Copying to tmp table |
| 74579 | web1 | localhost                                       | usr_web1_1 | Query   | 7    | Sorting result       |
| 74585 | web1 | -:1366 					 | usr_web1_1 | Sleep   | 12   |                      |
| 74603 | web1 | localhost                                       | usr_web1_1 | Query   | 12   | Sending data         |
| 74604 | web1 | localhost                                       | usr_web1_1 | Query   | 12   | Sending data         |
| 74605 | web1 | localhost                                       | usr_web1_1 | Query   | 12   | Sending data         |
| 74607 | web1 | localhost                                       | usr_web1_1 | Query   | 11   | Sending data         |
| 74608 | web1 | localhost                                       | usr_web1_1 | Query   | 11   | Sending data         |
| 74609 | web1 | localhost                                       | usr_web1_1 | Query   | 11   | Sending data         |
| 74610 | web1 | localhost                                       | usr_web1_1 | Query   | 11   | Sending data         |
| 74613 | web1 | localhost                                       | usr_web1_1 | Query   | 11   | Sending data         |
| 74614 | web1 | localhost                                       | usr_web1_1 | Query   | 11   | Sending data         |
| 74617 | web1 | localhost                                       | usr_web1_1 | Query   | 10   | Sending data         |
| 74619 | web1 | localhost                                       | usr_web1_1 | Query   | 10   | Sending data         |
| 74620 | web1 | localhost                                       | usr_web1_1 | Query   | 10   | Sending data         |
| 74623 | web1 | localhost                                       | usr_web1_1 | Query   | 2    | Sending data         |
| 74626 | web1 | localhost                                       | usr_web1_1 | Query   | 1    | Sending data         |
| 74629 | web1 | localhost                                       | usr_web1_1 | Query   | 6    | Sending data         |
| 74630 | web1 | localhost                                       | usr_web1_1 | Query   | 6    | Sending data         |
| 74631 | web1 | localhost                                       | usr_web1_1 | Query   | 6    | Sending data         |
| 74632 | web1 | localhost                                       | usr_web1_1 | Query   | 5    | Sending data         |
| 74634 | web1 | localhost                                       | usr_web1_1 | Query   | 5    | Sending data         |
| 74635 | web1 | localhost                                       | usr_web1_1 | Sleep   | 5    |                      |
| 74640 | web1 | localhost                                       | usr_web1_1 | Query   | 4    | Sending data         |
| 74641 | web1 | localhost                                       | usr_web1_1 | Query   | 4    | Sending data         |
| 74642 | web1 | localhost                                       | usr_web1_1 | Sleep   | 3    |                      |
| 74644 | web1 | -:1367 					 | [NULL]     | Query   | 0    | [NULL]               |
| 74645 | web1 | localhost                                       | usr_web1_1 | Query   | 0    | Sending data         |
| 74647 | web1 | localhost                                       | usr_web1_1 | Query   | 2    | Sending data         |
| 74648 | web1 | localhost                                       | usr_web1_1 | Sleep   | 1    |                      |
| 74649 | web1 | localhost                                       | usr_web1_1 | Sleep   | 0    |                      |
+-------+------+-------------------------------------------------+------------+---------+------+----------------------+

Huschi said:
b) in Apache mod_status mit ExtendedStatus=on aktivieren und ansehen.
Dann siehst Du zumindest welche Scripte daran beteiligt sind.

Sorry für die Frage, aber wie mache ich das?

Huschi said:
Evtl. ist es einfach ein Deadlock, vieleicht auch ein PHP-Bug.
Welche PHP-Version hast Du drauf?

PHP Version 4.3.8


Ich denke, dass die Config der MySQL Datenbank nicht das wahre ist, ich habe zwischendurch einmalmal ein paar einfache abfragen ausgeführt und musste 10 Sekunden auf das Ergebnis warten. Nur ob das die Ursache ist, weil die CPU Auslastung 100% beträgt oder andere Gründe hat weiß ich leider nicht.


Danke für Eure Antworten

mfg
 
Darkdream said:
Sorry für die Frage, aber wie mache ich das?
Indem Du die Boardsuche konsultierst oder in der httpd.conf nach 'Status' suchst.

PHP Version 4.3.8
Wäre Update fähig.
(Wie gesagt: Boardsuche)

Welche MySQL-Version hast Du drauf? noch ne 3er oder schon eine 4er?

Was die MySQL-Prozesslist angeht:
Es sind 4 schlafende Prozesse mit einer Laufzeit von über 100 Sekunden drin.
Dies solltest Du mal beobachten und (mithilfe von Apache-Status) rausfinden zu welchem Script die gehören.
Kann sein, daß einer davon einen Deadlock verursacht.
Die kannst Du übrigends mit 'kill [PID];' in mysql abschiessen.
Direkt danach eine prozesslist laufen lassen, damit Du siehst ob die anderen Prozesse direkt weiter arbeiten oder nicht.

huschi.
 
Leider konnte ich mir deine Tipps erst jetzt ansehen...

Huschi said:
Welche MySQL-Version hast Du drauf? noch ne 3er oder schon eine 4er?

Version: 4.0.21

Huschi said:
Es sind 4 schlafende Prozesse mit einer Laufzeit von über 100 Sekunden drin.
Diese habe ich seither nie wieder beobachtet. Habe auch zu verschiedensten Zeiten geschaut, gefunden habe ich sie nicht wieder. An einem Tag ist mir nur aufgefallen, dass viele "Slow Queries", so bei den 500, in der Statistik waren.

Apache status und Info File, hab ich nun auf dem Server hinterlegt:
http://www.snap-shots.at/server-info.html
http://www.snap-shots.at/info.php

Welcher Unterschied besteht zwischen dem prefork und dem worker Modus (?) von Apache?

Vielleicht habe ich noch vergessen zu schreiben, dass es sich hier überall um Standardconfigs von Server4You handelt. Vielleicht gibt es ja da irgendwelche Optionen, welche noch eingestellt werden müssten, da der Server sonst die Useranzahl nicht "packt"??

Ich danke noch einmal für Eure Antworten!
 
Besteht das Problem eigendlich immer noch?
Denn beim Surfen auf Deinen Seiten sind mir so keine Probleme aufgefallen.

huschi.
 
Nein, nicht immer. Ich nehme einmal an, dass es sich um ein Konfigurationsproblem handelt, denn sobald mehrere/viele Leute online sind, wird das ganze langsam (ab 40-50 Online Users). An der Leitung liegts nicht, das habe ich getestet. Die Queries dauern, zu entsprechender Auslastung dann auch bis zu 10 Sekunden (für eine einfache count(*) abfrage). Eventuell ein config Problem? Derzeit läuft die Kiste mit der Standardconfig von S4Y.

mfg
 
@Darkdream
Ich würde die info.php wieder vom Server nehmen, ist quasi eine Einladung zum hacken des Servers, da viele Informationen über deinen Server verraten werden.
 
Nein, leider nicht, ich bin gerade einmal dabei, alles upzudaten und die Datenbank ein wenig zu überarbeiten, sprich Indizes erstellen usw...
 
Back
Top