• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Apache teils sehr langsam

marzocchi1

Mitglied
Hallo Community,

habe als Apache Einsteiger ein kleines Problem.

Wir haben in unserer Firma ein Tool welches über einen Webserver betrieben wird.

In diesem Fall Apache 2.2.2 unter Ubuntu 12.04.3 64-Bit.
Läuft soweit eigentlich sehr stabil, nur habe ich momentan das Problem das bei hoher Zugriffszahl die Leistung komplett einbricht was dann letzten Endes zu einem Totalausfall führt. Das ganze beim Kunden wäre natürlich Katastrophe. Jetzt habe ich für meinen Server aber nur eine begrenzte Arbeitsspeicherkapazität zur Verfügung was mich zu dem Punkt Speicheroptimierung bringt. Könntet ihr mir da einige Tipps geben wie ich einfach meine Leistung steigern kann, da mir die Tutorials im Internet einfach zu komplex sind und mir da das nötige Wissen fehlt. (mod_cache habe ich schon versucht in Verbindung mit mem_cache, aber dann arbeitet unsere Software nicht mehr korrekt)

Vielen Dank im Voraus für eure Antworten.

Grüßle

Marzocchi1
 
Werbung:
Ein guter Tipp ist zunächst möglichst auf Apache-Module zu verzichten die nicht wirklich genutzt werden. mod_cache z.B. bringt nur etwas, wenn man auch weiß wozu es da ist ;)

Ähnlich verhält es sich auch mit den vielfältigen Apache-Einstellungsmöglichkeiten. Vor allem spielt die Einstellung des MPM eine große Rolle. Abhängig davon, welchen MPM Du nutzt hast Du verschiedene Einstellmöglichkeiten. Jede basiert aber auf dem selben Prinzip: möglichst optimale Einstellungen zu finden um a) die Aufrufe per HTTP performant zu verarbeiten und b) die verfügbare Speicherkapazität des System dabei nicht zu sehr zu belasten. Bei prefork kann man bspw. sagen wie viele Instanzen des Apache beim Starten zur Verfügung gestellt werden sollen, wieviele mindestens und maximal laufen sollen und wieviele Instanzen bis zum Erreichen der Grenze aufgehoben werden sollen.

Wenn man bspw. 150 unterschiedliche HTTP-Requests hat werden 150 Apache-Instanzen erzeugt die, angenommen ein Prozess belegt 1 MB insgesamt 150 MB im RAM belegen. Bei Systemen mit vielen Modulen ist der RAM-Verbrauch automatisch höher, zudem braucht der Apache dann einige Zeit um den Request korrekt zu verarbeiten (erhöhte Latenzzeit).

Wenn Du also dein System ideal tunen willst, musst Du dich mit diesen Möglichkeiten auseinandersetzen. Das was Du bereits gefunden hast ist das was dich zum Ziel bringt. Die Anschaffung zusätzlicher Hardware ist in den seltensten Fällen notwendig, oft reicht schon ein Tuning des Apache und eine Optimierung der Webseite aus.
 
Danke für die Top Antwort. Wie kann ich herausfinden welche Module ich brauch und welche nicht? Also was ich schon rauslesen konnte war, das die Static Module tunlichst nicht deaktiviert werden sollten aber Shared Module deaktiviert werden können wenn ich das richtig verstehe, aber das heißt ja auch nicht automatisch das ich jetzt alle Shared Module deaktivieren kann wenn ich mich nicht irre.

Eine Erweiterung der Hardware wäre auch nicht möglich da unser ESX für die VM's schon komplett ausgereizt ist und meine VM den letzten Platz belegt.

Also ein Request verbraucht bei mir 18,3 MB. Somit können bei meinem Aufbau momentan 27,1 gleichzeitige HTTP-Requests verarbeitet werden. Da wären wir denke ich beim entschlacken richtig. Fehlt nur noch die Möglichkeit herauszufinden welche Module nötig sind und welche nicht.

Anbei mal ein Auszug meiner Module über apache2ctl -M:

Code:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
perl_module (shared)
php5_module (shared)
reqtimeout_module (shared)
setenvif_module (shared)
status_module (shared)

Grüßle

Marzocchi1
 
Zuletzt bearbeitet:
Werbung:
Welche Module Du auf dem Server benötigst hängt primär von deinen Anwendungen ab. Die meisten bei Apache bereits durch eine Linux-Distribution mitgelieferten und aktivierten Module sind wirklich notwendig.

Wenn deine Webseite kein PHP einsetzt, könntest Du das PHP-Modul weglassen.
Wenn deine Webseite kein Perl einsetzt, könntest Du das Perl-Modul weglassen.
Wenn Du keine Aliase verwenden willst, könnte man mod_alias weglassen - nur muss man dafür meist auch alle vhost-Konfigurationen anpassen und es ist eher ein kleines Modul.
Etc.pp.
 
Hi threadi,

mal wieder Dankeschön für deine Antwort =)

Also zu deinen Vorschlägen kann ich sagen was ich weiß. Perl brauche ich da unsere Software auf Perl aufbaut. Das gleiche gilt für PHP. Die Aliase muss ich drin lassen da ansonsten Teile unserer Software nicht mehr funktionieren. Wenn ich dich richtig verstehe kann ich eigentlich an den Modulen nicht mehr viel rausholen, geh ich mal davon aus.

Was kann ich sonst noch tun damit es schneller wird?

Habe außerdem noch meine .conf angepasst, zwecks Zugriffe etc. Das sollte soweit auch passen.

Wüsste nicht was man sonst noch machen kann.


Gruß

Marzocchi1
 
Vorweg - Ich habe von Server-Sachen keine Ahnung. Ich bin schon froh wenn ich es schaffe die php.ini zu finden. Kann also gut sein dass es wirklich nur an der Server-Konfiguration liegt.

Aber hast du schon mal überlegt ob es vielleicht nicht am Server liegt, sondern an der Application die darauf betrieben wird? Also den PHP- oder Perl-Scripts?

Ich würde mal die Scripts auf die Performance testen und überlegen ob da Optimierungspotenzial vorhanden ist. Ich denke bei vielen Benutzern sollte es einen großen Vorteil bringen wenn die Script-Laufzeit um zB eine halbe Sekunde verkürzt wird.
 
Werbung:
Es ist so das die Software schon lange Release Status erreicht hat also sprich die Scripts, etc.

Es handelt sich hier nur um einen Kunden wo der Server extrem Leistungsfähig sein muss, denn die Scripte sind schon bis auf das äußerste ausgereizt.

Trotzdem danke dir für deine Antwort =)
 
Wüsste nicht was man sonst noch machen kann.

Die Optimierung ist keine Sache die man von jetzt auf gleich lösen kann. Du musst beobachten wie die Prozesse laufen, welchen Speicherplatz sie einnehmen, ab und an mal eine Stellschraube ändern und die Folgen beobachten. Die ultimative Lösung gibt es sicherlich nicht, aber Du kannst dich ihr durch Analyse und Austesten annähren.
 
Okay. Dann muss ich den Server wohl immer selbst wieder an die Grenzen fahren, da es sich hier noch um ein Testsystem handelt, welches ich ausreizen muss bevor es zum Kunden geht. Sollte aber trotzdem machbar sein. Ich werde einfach versuchen mehrere Threads zu starten um eine reale Umgebung zu simulieren und dann das Verhalten des Servers dokumentieren. Was mich wundert sind wenn ich in meiner Software ein Service Ticket erstelle (darum dreht sich die gesamte Software) wird ein 18,3MB großer Apache Thread gestartet und auch kurz bevor der Speicher voll läuft werden weiter fleißig connections aufgebaut. Kann ich das abfangen das z.B. wenn noch 50MB Speicher übrig sind, das keine weiteren Threads angenommen werden und stattdessen in eine Warteschlange gepackt werden das mein Server nicht an die Wand fährt, denn sobald der Speicher voll ist, schießt sich ja gewöhnlicherweise der ganze Apache ab. Dies sollte in der realen Umgebung aber unter keinen Umständen passieren, lieber sollen die User 10 oder 20 Sekunden warten um dann normal weiterarbeiten zu können. Wenn das möglich ist, könnte mir jemand bitte möglichst einfach erklären wie?
 
Werbung:
Das ginge z.B. indem Du Limitierungen für den Nutzer setzt unter dem der Apache läuft. Schau dir mal den Befehl

Code:
ulimit

dazu an. Damit kannst Du die Grenzen auslesen. Wie man sie setzt ist durchaus je Distribution unterschiedlich, aber unter ulimit findet man einige Anleitungen dazu.
 
Ah okey ich gebe den Befehl einfach so unter Ubuntu ein?

Da bekomm ich die Meldung: unlimited ... mehr leider auch nicht.

Danke dir aber =)
 
Also folgendes. Habe es jetzt soweit geschafft das mein Server beim Benchmark nicht mehr platzt. Nur ist mir der Datendurchsatz zu gering. 5,34 Requests pro Sekunde sind ehrlich gesagt wirklich mau. Wie kann ich den noch steigern? Der Speicher wird jetzt schonmal meiner Meinung nach gut ausgenutzt, nur eben die Performance lahmt noch. Kann die Requests ja auch nicht wirklich verkleinern, also muss ich jetzt noch irgendwo an einer Schraube drehen um meinen Durchsatz zu erhöhen :)

Tut mir Leid wenn ich mich manchmal missverständlich ausdrücke =)

Grüßle

Marzocchi1
 
Werbung:
Zurück
Oben