Temat: Darmowy monitoring strony - czy użyteczne?
Dariusz P.:
Tyle że Twoje wewnętrzne narzędzia wpływają na wyniki rzeczy które sprawdzają przez samo działanie. I nie jest to 1-2% ale 10-20% a czasem więcej. W zależności od technologi, użytych narzędzi, ilości informacji jakie zbierasz itp. Testując system z zewnątrz, symulując użytkownika dostajesz faktyczne dane.
Mylisz się, po to jest tzw znacznik czasu, aby pomijać cykle procesora marnowane na zadania poboczne. Oczywiście powstaje jakaś niedokładność spowodowana chociażby niedokładnością zegara. Bo trzeba pamiętać że jeden takt typowego procesora to tylko 0,33ns. Ale to akurat niedokładność dwukierunkowa.
Powstają też cykle dodatkowe pomiędzy pobraniem znacznika czasu, jego zapisaniem a uruchomieniem kodu i powtórnym pobraniu wskaźnika. Ale nie jest to 10% jak piszesz ale najprawdopodobniej poniżej 1%. Kluczowy jest tutaj pomiar czasu i czasochłonność testowanej próbki kodu.
Na marginesie polecam ciekawy i szokujący artykuł o dokładności zegarów elektronicznych napisany przez doświadczonego elektronika:
http://mikrokontrolery.blogspot.com/2011/04/stopery-ti...
Możliwe że miałeś potężne przekłamania pomiarów. Ale moim zdaniem było to spowodowane zupełnie czym innym. Otóż współczesne komputery są tak przekombinowane że już ciężko się połapać w jaki sposób działają.
Przykładem niech będzie tryb turbo, który wchodzi już masowo do komputerów osobistych. Zdaje się że działa to na zasadzie zmiany częstotliwości zależnie od zapotrzebowania na moc obliczeniową. Jak masz doświadczenia z testów na takim procesorze to się nie dziw że były różnice 20%.
A powód stosowania trybu turbo jest prosty. W technologi wykonania elektroniki CMOS, układy zużywają prąd niemal wyłącznie na zmianę stanu. Czyli zmniejszając taktowanie o np 25% zmniejsza się o podobny procent nie tylko zużycie energii, ale i wytwarzanie tak wrogiego ciepła.
Pewnie Ci chodzi o wynalazki jak jMeter, Apache Benchmark (sławne AB) itp. Muszę Cie rozczarować, są kompletnie niemiarodajne. Miałem okazję porównać wyniki testów z wykonaniem podobnych narzędzi a testem który został wykonany przez firmę która nam wygenerowała ściśle określony ruch z całego globu, z dziesiątek tysięcy maszyn jednocześnie.
Przyczyna błędu może być taka jak powyżej.
Natomiast opóźnienia sieci powodują że na dobrą sprawę nie wiesz czy winna jest aplikacja, czy może infrastruktura. To trochę tak jak jakby:
- Mam zepsuty samochód
- Co nie działa?
- Nie jedzie...
Jeśli potrzeba zbadać dostępność aplikacji dla klientów w różnych lokalizacjach to w porządku. Ale jeśli trzeba robić optymalizację kodu to takie badanie internetowe jest niewiele warte.
Problem jest właśnie taki że to są tylko tysiące zapytań tylko z localhosta. Robisz je z maszyny na której masz appkę, nie masz opóźnień, procesy apache czy co tam używasz za serwer trwają o wiele krócej itp. Przechodzisz na większą skalę i się okazuje że taki test można do kosza wyrzucić bo różnica kilkuset kilkudziesięciu milisekund (lub kilkuset) sprawia że apache ma jednocześnie dużo więcej połączeń otwartych, dużo więcej jednoczesnych requestów niż przy lokalnym teście i tym sposobem Twoje serwery padają jeden po drugim.
Słowo tysiące to tak mi się symbolicznie napisało. Ale tak masz tutaj rację, testy na różnych maszynach dają różne wyniki. Tylko że ja nie wspominałem żeby robić takie bezsensowne rzeczy. Testy wydajnościowe powinny być wykonywane na maszynie identycznej z serwerem docelowym. Powodem jest tutaj budowa wewnętrzna komputera. Jak się tak wgłębić w szczegóły to się okazuje że konkretna konfiguracja może być zła lub dobra do konkretnych obliczeń.
Odnośnie tych procesów Apache, to z tego co pamiętam to ustawia się ich maksymalną ilość. Problem z nimi taki że są pamięciożerne i stąd zdaje się rosnąca popularność nginx. Taki proces jest otwarty dopóki nie odpowie na request. Jak masz wolną bazę danych to w ten sposób łatwo zapchać Apache. Procesy ustawią się w kolejce zapisu do jednej tabeli i jak tylko częstotliwość nowych requestów przekroczy czas odpowiedzi DB, mamy padnięcie serwera. Dlatego DB trzeba mieć na dyskach SSD, a przy dużych DB na sąsiednim dedyku w szafie.
Trochę nie rozumiem Twojego toku rozumowania. Tak jakbyś chciał wepchnąć więcej użytkowników na serwer niż się da. W chwili obecnej to serwery są tanie jak przysłowiowy barszcz. Administrator nierzadko bierze więcej za obsługę dedyka niż on sam kosztuje. Więc bez problemu można wynająć potężnego dedyka który utrzyma odpowiednią ilość procesów Apache. Tym bardziej że można automatycznie ubijać procesy które przekroczą krytyczny czas wykonywania.
Odnośnie reszty Twojej wypowiedzi to się zgodzę.
@Dariusz Rorat
Testy na hostingach współdzielonych nie są ani trochę wiarygodne.
Ten post został edytowany przez Autora dnia 24.06.16 o godzinie 20:03