
Ich suche nach Möglichkeiten, unseren aktuellen, intern gehosteten Webserver zu optimieren. Ich versuche, so viel wie möglich zu liefernrelevantInformationen unten. Bitte lassen Sie mich wissen, wenn Sie zusätzliche Informationen benötigen, um helfen zu können.
Auf dem Server läuft eine einzige Website, eine Online-Plattform zur Pizzabestellung, die auf dem Zend Framework (ver1) basiert. Die Verkehrsstatistiken des letzten Monats zeigen etwa 6.000 Seitenaufrufe pro Tag, hauptsächlich um die Essenszeit herum. In diesem Zeitraum wurden Spitzenwerte von etwa 1500 Aufrufen/Stunde erreicht.
Wir haben vor Kurzem von einer 2/2 Mbit-ADSL-Leitung auf 100/100 Mbit-Glasfaser aufgerüstet und haben beim Abendessen immer noch Leistungsprobleme. Wir gingen davon aus, dass die 2 Mbit das Problem waren. Die Website ist in Zeiten geringer Auslastung ziemlich flott.
Hardware
CPU: Intel(R) Xeon(R) CPU 5160 @ 3.00GHz (3000.13-MHz K8-class CPU)
Mem: 328M Active, 4427M Inact, 891M Wired, 244M Cache, 623M Buf, 33M Free
Swap: 16G Total, 468K Used, 16G Free
(6GB physical, 16GB swap)
Filesystem Type Size Used Avail Capacity Mounted on
/dev/ad7s1a ufs 4.8G 768M 3.7G 17% /
devfs devfs 1.0K 1.0K 0B 100% /dev
/dev/ad7s1g ufs 176G 5.2G 157G 3% /home
/dev/ad7s1e ufs 4.8G 2.8M 4.5G 0% /tmp
/dev/ad7s1f ufs 19G 3.5G 14G 19% /usr
/dev/ad7s1d ufs 4.8G 550M 3.9G 12% /var
Server-Betriebssystem
FreeBSD 8.2-RELEASE
Software
apache-2.2.17
php5-5.3.8
mysql-server-5.5
Apache-Fußabdruck(Beispiel, entnommen aus # oben)
31140 www 1 45 0 377M 41588K lockf 2 0:00 0.00% httpd
31122 www 1 44 0 375M 35416K lockf 2 0:00 0.00% httpd
31109 www 1 44 0 375M 38188K lockf 2 0:00 0.00% httpd
31113 www 1 44 0 375M 35188K lockf 2 0:00 0.00% httpd
Apache verwendet das Prefork-MPM, APC (Alternative PHP Cache). Das SSL-Modul ist geladen, wird aber nicht verwendet (d. h. es funktioniert nicht wirklich und wird daher nicht verwendet). Es gibt eine Datei mit Einstellungen für MPM-Module, aber wie ich sehe, ist sie nicht in der Datei httpd.conf enthalten, die Include-Zeile ist auskommentiert. Daher würde ich vermuten, dass das Prefork-MPM auch mit Standardwerten funktioniert.
Hier sind einige andere Apache-Conf-Werte, die ich gefunden habe - die in https.conf enthalten sind
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
UseCanonicalName Off
HostnameLookups Off
Laden bei Leistungsproblemen
Hinweis: API-Anfragen an das Backend
Unsere Online-Plattform kommuniziert mit unserem Backend-System über eine API (GET/POST). Für Preisangaben zu Warenkörben (zwischengespeichert, bis ein neuer Artikel hinzugefügt wird), Produkte (zwischengespeichert), Produktpreise (zwischengespeichert). Und der Backend-Server zeigt tatsächlich eine echte Auslastung, wenn Leistungsprobleme im Web auftreten. Ich gehe also eher davon aus, dass es die API-Anfragen sind, deren Ausführung ewig dauert und die Clients auf dem Webserver aufhalten. Meine Frage ist also, ob die oben angegebenen Statistiken (Verkehr/Last) und die aktuelle Konfiguration der Software im Vergleich zu den Spezifikationen der Internetverbindung und der Hardware Anzeichen für einen überlasteten Server sind. Und könnte ich die maximale Anzahl von Clients auf dem Webserver basierend auf den verfügbaren Ressourcen und dem tatsächlichen Platzbedarf von Apache erhöhen?
Antwort1
Die Leistung von Websites ist ein großes Thema. So wie ich das sehe, liegt das Problem höchstwahrscheinlich nicht bei Apache.
Es gibt jedoch einige Dinge, die Ihnen helfen können, Ihre Leistung zu verbessern.
Caching! Ich weiß nicht, wie viel Sie in Ihrem PHP-Code zwischenspeichern. Aber da Sie kein SSL verwenden und vermutlich viele schreibgeschützte Daten haben, versuchen SieLack
Aktivierenmod_expires
Profilieren Sie Ihre Website/Backend-API mitJMeter
Antwort2
Nein, die oben genannten Punkte sind keine Anzeichen für einen überlasteten Server.
Obwohl es möglicherweise zu einer Netzwerk-E/A-Sättigung kommt (da Sie keine tatsächlichen Daten dazu bereitstellen), ist dies äußerst unwahrscheinlich, da während Spitzenzeiten so wenige tatsächliche Anfragen erfolgen.
Sie müssen einige Tests am HTTP-Backend ausführen, um zu sehen, ob es mit maximaler Kapazität läuft. Wenn ja, müssen Sie DAS beheben.
Für die Zukunft sollten Sie dieServer StatusHandler zur Überwachung von Apache, wie hier dokumentiert:http://httpd.apache.org/docs/2.2/mod/mod_status.html
Antwort3
Die Leistung von Apache kann mit Worker MPM und Prefork-Einstellungen optimiert werden. Das Ändern der Keepalive- und Max-Spare-Threads kann zu einer Leistungssteigerung und einem geringeren Speicherbedarf beitragen. Die optimale Einstellung für Prefork und Worker finden Sie unterHier
Antwort4
Möglicherweise gehen Ihnen die Prozesse aus (definiert durch MaxSpareServers
und StartServers
). Der Standardwert ist nur 10. Wenn Ihre Antwortzeiten also hoch sind, reicht das möglicherweise nicht für eine Anfrage alle 2 Sekunden (1500 / Stunde).
Schalten Sie das server-status
Modul ein, um die verwendeten Prozesse zu überwachen.Stellen Sie sicher, dass Sie Zugriffsregeln festlegen, sodass nur intern darauf zugegriffen werden kann.