# Symulacja dużej ilości requestów (apache benchmark)
ab dostępny jest w pakiecie apache2-utils
ab -c ilosc_jednoczesnych_polaczen -n laczna_ilosc_requestow domena/IP
ab -c 200 -n 100000 http://localhost/
* ważny / na końcu domeny oraz protokół na początku
Na końcu wyświetli statystyki.
Requests per second – ilość obsłużonych requestów w ciągu sekundy
Failed requests – problematyczne requesty
Time taken for tests – czas trwania testu
# Sprawdzenie MPM na jakim działa Apache
MPM – moduł, który obsługuje połączenia
apache2ctl -V | grep MPM
Domyślnie jest to prefork, którego konfig znajduje się :
/etc/apache2/mods-enabled/mpm_prefork.conf
# Statystyki serwera Apache
Sprawdźmy jaki mamy moduł do tego. Aktywne moduły możemy wyświetlić:
apache2ctl -M
Szukamy modułu, który ma w nazwie status. Jeżeli nie ma włączonego należy go uruchomić:
a2enmod status
# Wyświetlenie statystyk serwera
Na początek należy doinstalować przeglądarkę terminalową, np: links
apache2ctl status
lub
curl -s „localhost/server-status?auto”
?auto – wyświetli w formacie tekstowym, a nie w HTML
# Wyświetlenie scoreboardu w statusie:
watch -n1 'apache2ctl status | tail’
_ – oczekiwanie na połączenie
W – przesyłanie danych, pracujący worker
Na starcie jest 5 workerów. Domyślnie worker działa w trybie:
rodzi się -> obsługuje żądanie -> umiera
# Uruchomienie więcej workerów domyślnie
/etc/apache2/mods-enabled/mpm_prefork.conf:
StartServers– ilość workerów na start, zmieniamy na 25
MaxSpareServers – ilość czekających serwerów, ustawiamy taką samą wartość
MaxConnectionPerChild – ilość requestów obsługiwanych przez workera zanim umrze; tutaj również tracimy czas na umieranie-rodzenie nowego; ustawmy wartość np na 100
* najważniejszy parametr, 0 – nigdy nie umieraj [niezalecane, bo child puchnie i w pewnym momencie skończy się pamięć]
Inne zmienne, których modyfikacje warto rozważyć:
MinSpareServers – minimalna liczba zapasowych (nic nierobiących) serwerów
MaxRequestWorkers – maksymalna liczba uruchomionych serwerów
Te wartości trzeba dobrać pod siebie eksperymentując z wartościami.
# Problemy w scoreboardzie
– Na scoreboard prawie nie mam kropek
Twój serwer przyjmuje ogromny ruch, większy niż pozwala na to konfiguracja. Zwiększ MaxRequestWorkers.
– Na scoreboard mam mnóstwo liter „S”
Twój serwer marnuje czas na tworzenie nowych serwerów. Zwiększ ich początkową (StartServers) i zapasową liczbę (MaxSpareServers).
– Na scoreboard mam prawie same litery „W”
Twój backend podaje dane skrajnie wolno. Przyspiesz backend, dodaj cache. Nie rozwiążesz tego problemu przez tuningowanie MPM-a. Czasami taka sytuacja może być w zupełności naturalna, gdy np. dziesiątki klientów pobiera duże pliki z serwera.
– Na scoreboard jest sporo liter „R”
Requesty do Twojego serwera trwają bardzo długo. Jeśli nie jest to normalne (np. upload dużych plików od użytkowników), zmniejsz timeout dla połączeń.
– Na scoreboard mam pełno liter „C”
Spróbuj aktywować keepalive w konfiguracji serwera