php zu unperformant

Freakson

New Member
Hallo...
Ich hab eine großes Problem mit mein Server...

Server daten
amd opteron server prozessor mit 2x2,4 ghz
3gb ram
2x120gb raid1

Folgendes Problem sobald mehr als 400-500 Leute gleichzeitig auf meine Seite sind bricht der webserver zusammen ich hab bereits mehrmals versucht Optimierungen am php Code und MySQL vorzunehmen aber viel hats nicht gebracht.

ich habe bereits psp versucht aber viel performanter ist es auchnicht.
auf dem Server läuft nix anderes als die seite
komplett selber geschrieben in php ein und ein wenig python
und Simple Machines Forum.

wär Vorschläge zb eine bessere dynamische scriptsprache hat ich bin für alles offen .....

mfg
 
Last edited by a moderator:
Hi,

paste doch mal die Ausgaben von

pstree
free -m
df -h
ps v

SMF ist ein sehr performantes Forum, da wirst Du nicht wirklich viel schnellere Sachen finden. Ich gehe eher davon aus, dass da was in der Konfiguration nicht stimmt.

Greetz,
Ralf
 
Ok

pstree:
Code:
init,1         
  ├─apache2,5531 -k start
  │   ├─apache2,13297 -k start
  │   ├─apache2,16892 -k start
  │   ├─apache2,17321 -k start
  │   ├─apache2,17664 -k start
  │   ├─apache2,18680 -k start
  │   ├─apache2,18890 -k start
  │   ├─apache2,18989 -k start
  │   ├─apache2,19001 -k start
  │   ├─apache2,19006 -k start
  │   ├─apache2,19021 -k start
  │   ├─apache2,19168 -k start
  │   ├─apache2,19295 -k start
  │   ├─apache2,19314 -k start
  │   ├─apache2,19315 -k start
  │   ├─apache2,19318 -k start
  │   ├─apache2,19319 -k start
  │   ├─apache2,19321 -k start
  │   ├─apache2,19323 -k start
  │   ├─apache2,19324 -k start
  │   ├─apache2,19325 -k start
  │   ├─apache2,19326 -k start
  │   ├─apache2,19328 -k start
  │   ├─apache2,19329 -k start
  │   ├─apache2,19330 -k start
  │   └─pipelog.pl,21277 /usr/local/confixx/pipelog.pl
  ├─atd,4369
  ├─clamd,2494
  ├─courierlogger,2554 imaplogin
  ├─courierlogger,2567 imapd-ssl
  ├─courierlogger,2588 courierpop3login
  ├─courierlogger,2589 pop3d-ssl
  ├─courierlogger,4445 -pid=/var/run/courier/authdaemon/pid -start /usr/lib/courier/authlib/authdaemond.plain
  │   └─authdaemond.pla,4446
  │       ├─authdaemond.pla,4447
  │       ├─authdaemond.pla,4448
  │       ├─authdaemond.pla,4449
  │       ├─authdaemond.pla,4456
  │       └─authdaemond.pla,4457
  ├─couriertcpd,2547 -address=0 -stderrlogger=/usr/sbin/courierlogger -maxprocs=40 -maxperip=20 -pid=/var/run/courier/imapd.pid -nodnslookup ...
  ├─couriertcpd,2565 -address=0 -stderrlogger=/usr/sbin/courierlogger -stderrloggername=imapd-ssl -maxprocs=40 -maxperip=20-pid=/var/run/courier/imapd-ssl.
  ├─couriertcpd,2573 -pid=/var/run/courier/pop3d.pid -stderrlogger=/usr/sbin/courierlogger -maxprocs=40 -maxperip=4 -nodnslookup -noidentlookup ...
  ├─couriertcpd,2585 -pid=/var/run/courier/pop3d-ssl.pid -stderrlogger=/usr/sbin/courierlogger -stderrloggername=pop3d-ssl -maxprocs=40 -maxperip=4-nodnslo
  ├─cron,4461
  ├─(events/0,5)
  ├─exim4,4618 -bd -q30m
  ├─freshclam,2535 -d --quiet -p /var/run/clamav/freshclam.pid
  ├─getty,2877 38400 tty1
  ├─getty,2883 38400 tty2
  ├─getty,2884 38400 tty3
  ├─getty,2885 38400 tty4
  ├─getty,2886 38400 tty5
  ├─getty,2887 38400 tty6
  ├─inetd,4380
  │   └─proftpd,18584
  ├─(khelper,6)
  ├─(kjournald,810)
  ├─(kjournald,1247)
  ├─klogd,2481
  ├─(ksoftirqd/0,3)
  ├─(kswapd0,72)
  ├─(kthread,7)
  │   ├─(aio/0,73)
  │   ├─(ata/0,733)
  │   ├─(kblockd/0,24)
  │   ├─(khubd,1570)
  │   ├─(kseriod,665)
  │   ├─(md0_raid1,1212)
  │   ├─(md1_raid1,798)
  │   ├─(pdflush,70)
  │   ├─(pdflush,71)
  │   ├─(scsi_eh_0,738)
  │   └─(scsi_eh_1,739)
  ├─mdadm,2849 -F -i /var/run/mdadm.pid -m root -f -s
  ├─(migration/0,2)
  ├─mysqld_safe,5037 /usr/bin/mysqld_safe
  │   ├─logger,5078 -p daemon.err -t mysqld_safe -i -t mysqld
  │   └─mysqld,5076 --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306...
  ├─nscd,2829
  ├─ntpd,8307 -p /var/run/ntpd.pid -u 108:108 -g
  ├─powernowd,2838 -q -m 2
  ├─server_linux,5845 -PID=tsserver2.pid
  ├─spamd,4431
  │   └─spamd,11208
  ├─sshd,4476
  │   ├─sshd,19123
  │   │   └─bash,19146
  │   └─sshd,19353
  │       └─bash,19358
  │           └─pstree,19384 -ap
  ├─syslogd,2478
  └─(watchdog/0,4)

free -m
Code:
             total       used       free     shared    buffers     cached
Mem:          3010       2829        181          0         44       2503
-/+ buffers/cache:        280       2730
Swap:         1907          0       1907

df -h
Code:
Dateisystem          GröÃe Benut  Verf Ben% Eingehängt auf
/dev/md1              178G  8,6G  160G   6% /
tmpfs                 1,5G     0  1,5G   0% /dev/shm
/dev/md0               93M  7,5M   81M   9% /boot

psv
Code:
  PID TTY      STAT   TIME  MAJFL   TRS   DRS  RSS %MEM COMMAND
 2877 tty1     Ss+    0:00      0    10  1573  492  0.0 /sbin/getty 38400 tty1
 2883 tty2     Ss+    0:00      0    10  1573  488  0.0 /sbin/getty 38400 tty2
 2884 tty3     Ss+    0:00      0    10  1569  488  0.0 /sbin/getty 38400 tty3
 2885 tty4     Ss+    0:00      0    10  1573  492  0.0 /sbin/getty 38400 tty4
 2886 tty5     Ss+    0:00      0    10  1569  488  0.0 /sbin/getty 38400 tty5
 2887 tty6     Ss+    0:00      0    10  1573  492  0.0 /sbin/getty 38400 tty6
19146 pts/1    Ss     0:00      6   588  3619 1556  0.0 -bash
21948 pts/1    R+     0:00      1    61  2398  692  0.0 ps v
 
sobald mehr als 400-500 Leute gleichzeitig auf meine Seite sind bricht der webserver zusammen
Dann mußt Du am Webserver optimieren!
Du hast wahrscheinlich Einträge im /var/log/apache2/error_log.
Fang mal da an: Hochleistungs-Apache: Performance-Tuning

Der erste Schritt sollte immer sein das ganze mal mit "KeepAlive off" (bzw. einer recht kleinen "KeepAliveTimeout 2") zu testen.
Außerdem hilft das mod_status im ExtendedMode ziemlich gut die Übeltäter zu finden.

huschi.
 
Gut wäre auch mal eine URL zur Seite.

Soweit ich das erlesen konnte, hast du viele PHP Abfragen... bzw. jeder Besucher, der eine Seite öffnet, bekommt ein Apache Dienst. (k.a. ob das jetzt SOOO koorekt ausgedrückt ist => da wird die Huschi unser Oberindiana mehr sagen können)


Aber eins sollte deinen Server ERHEBLICH entlasten...

uns zwar Cache.

Es gibt 2 Arten von Cache => einmal den File Cache. und einmal der richtige Cache (Header Cache)

Jeder Besucher der aus deine Seite kommt, wird z.B. die Startseite sehen. Wenn dort viele Abfragen passieren, dann werden diese jedesmal ausgeführt. Ändern tut sich da ja nichts... ergo = die einmal fertig abgefragte Seite kommt in den Cache und steht dem nächsten Besucher schon fertig zur Verfügung.

Ich setzte das ganze bei CMS ein, wo es sich hervorragend bewährt hat.
-joomla hat z.b. vom Hause aus den File Cache.
Typo3 ist schon etwas weiter und nutzt den richtigen Cache.
Beides ist mittlerweile in den aktuellen Versionen implantiert.

Aber wenn ich es richtig gelesen habe, is ja bei dir eh alles selbst geproggt.




Edit: könnte sein, das sich der Tipp mit dem Cache bereits in Huschis Howto wieder findet. => du solltest eh mal Huschi's HP durchforsten.... da findet man fast monatlich neue Artikel / Tipps etc :D
 
Es gibt 2 Arten von Cache => einmal den File Cache. und einmal der richtige Cache (Header Cache)
Nicht zu vergessen der PHP-Cache oder ein Proxy-Cache oder Template-Cache oder oder oder...
Aber einen "richtigen Cache" oder "Header Cache" habe ich noch nie gehört.

Aber unser Lördchen hat schon recht: An PHP-Performance läßt sich meist auch immer noch was rausholen.
Sobald aber der Apache nicht mehr mitmacht, hilft das alles nicht mehr. Dann muß seine Hand an den Indianer legen.

huschi.
 
Zitat:
Zitat von Lord_Icon
Es gibt 2 Arten von Cache => einmal den File Cache. und einmal der richtige Cache (Header Cache)

Nicht zu vergessen der PHP-Cache oder ein Proxy-Cache oder Template-Cache oder oder oder...
Aber einen "richtigen Cache" oder "Header Cache" habe ich noch nie gehört.

Blöd ausgedrückt... war schon spät ^^

Richtiger Cache... damit meine ich den RAM... also nicht den File Cache.

Header Cache = rotfl... hätt ich jetzt noch ein paar interpreten dazwischengesetzt, dann wüstest du, was es ist (header("Cache).... => beinahe der fertige Befehl.


header("Cache-control: xxxxxxxx");

HTTP/1.1: Header Field Definitions
 
... war schon spät ^^
...und anscheinend früh aufgestanden... :D

Ich will keine Grundsatzdiskussion über Caching-Methoden anstoßen. Aber bei Dir scheinen ein paar Lücken vorhanden zu sein. Ich möchte daß Du einfach mal über folgende Kommentare nach denkst. Du mußt hier nicht mehr darauf antworten, denn der Thread ist damit eh schon entartet.

damit meine ich den RAM...
Wie rettet man den Speicher von einem Request zum anderen? Wie verschiebt man den zwischen zwei verschiedenen Apache-Childs?

header("Cache-control: xxxxxxxx");
Gilt vorallem für dazwischen geschaltete Proxies und evtl. für den Browser.
Hilft nicht viel wenn 400-500 unterschiedliche Leute surfen.
Abgesehen davon, daß bei so vielen Usern sich wahrscheinlich soviel ändert, daß man gar nicht will das irgendetwas dazwischen cached.

huschi.
 
also danke erstmal für die antworten...

ich wollt die Domain erst nich Posten da es ja als Werbung hätte interpretiert werden können.

http://www.dtwow.eu/

ich werde in den nächsten tagen mal ein bissel Rumtesten..

mfg
 
Hi,

kannst Du mal ein paar Dutzend Zeilen von

vmstat -n 1

hier rein kopieren? Am besten während was im Forum los ist.

Sinnvoll wären auch noch die mysql config und die Version, das muss nicht am Apache liegen.

Greetz,
Ralf
 
Back
Top