Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [apache, Win2003] Wydajność Apache na Windows 2003 server, prośba o pomoc w ustaleniu możliwych przyczyn
soska66
post 16.11.2011, 15:14:17
Post #1





Grupa: Zarejestrowani
Postów: 132
Pomógł: 1
Dołączył: 3.02.2005

Ostrzeżenie: (0%)
-----


Witam

Mam dość spory problem z wydajnością serwera. Problem, z którym nie mogę sobie poradzić bo nie potrafie znależć jego źródła. Proszę o pomoc. Udziele wszelkich potrzebnych danych

Strona jest postawiona na następującym systemie - Windows Server 2003, Apache 2.2, PHP 5.3 i MySQL 5.5. Na serwerze działa jednocześnie MSSQL server i IIS6, które obsługują drugą, działającą na innym adresie IP, stronę.

Każda podstrona generuje pomiędzy 70-100 zapytań i w większości są to obrazki choć jest też sporo plików js (około 7-10) i css (tez okolo 7-10). Na każdą podstronę przypada też około 100 z reguły prostych zapytań SELECT do bazy danych. Sesja przechowuje każdorazowo około 15 zmiennych.

Po analizie access.log wychodzi, że normą jest około 1000 hits w ciągu kilkudziesięciu minut.

Strona z reguły ładuje się wolno. Koło 3-4 sekund zanim zostanie wyświetlona odpowiedź z serwera (pojawi się tytuł strony w zakładce). Ale nie zawsze... Bo przykładowo po 5 kliknięciach, następne dwa odświeżenia potrafią nastąpić w ułamku sekundy. Podobnie jest z odczytem przez ajax mimo, ze wczytywana logika jest i krótsza i przede wszystkim ma zaledwie kilka prostych zapytań SELECT do bazy w porównaniu do załadowania całej strony.

Gdy strona zaczyna działać wolno, apache zużywa około 200mb pamięci, mysql około 80mb (co zostawia około 1,5gb wolnej pamięci). Zużycie procesora jest niewielkie dla tych procesów (za to około 25% ciągnie proces cidaemon). Analiza zapisów xdebuggera jest niejasna albo nie potrafie jej zinterpretować - kilka testów pokazało śmiesznie krótki czas ładowania w zasadzie wszystkiego, prócz sessions_start. Wygooglowałem, że dyski NTFS miewają problemy z częstym używaniem sesji zapisywanych w plikach i zacząłem poszukiwania w tym kierunku do póki nie okazało się, że całkowite wyrzucenie sesji z kodu niczego nie przyspiesza

Nie wiem co robić i gdzie szukać. Konfigurowałem pliki apache (mpm i default), obecnie mam threads per process ustawione na 1000, keepAlive on i keepAliveTimeout na 2. Manewrowanie tgymi ustawieniami nie powoduje jednak znaczącej różnicy. MySQL przyjmuje obecnie do 500 połączeń (maxconnections). Mam również zainstalowany xcache, zaindeksowane odpowiednie pola w bazie i włączone query buffering

Zdaję sobie sprawę, że nie wkleiłem żadnych konkretnych konfiguracji i być może podałem za mało informacji. Z przyjemnością podam co trzeba jeśli znajdzie się ktoś chętny pomóc. Mam małe doświadczenie z Windows Server i nie wiem za bardzo, w którym teraz iść kierunku

Dzięki

Ten post edytował soska66 16.11.2011, 15:16:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
by_ikar
post 16.11.2011, 15:51:40
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Z tego co czytam, to w sumie najwięcej czasu schodzi na pobranie obrazków/styli/skryptów js. Podałeś że zarówno arkusze jak i style masz więcej niż w kilku plikach. Proponuje ci połączyć wszystkie style do jednego arkusza, to samo tyczy się skryptów js. Poczytaj o css sprites. Może być tak że tych obrazków masz dużo, layout pocięty w jakieś malutkie części i tutaj już nie tyle ważna jest kwestia rozmiaru takich obrazków, co ich ilość; ponieważ przeglądarki mają ograniczoną ilość żądań dla jednej domeny. Możesz rozmieszczać pliki na kilku subdomenach, wtedy zapewniasz równoległe pobieranie kilku plików. xdebug wygenerował ci plik, który można sobie przeanalizować chociażby w webgrind. Załącz ten plik, z chęcią zobaczę ile czasu ci się tam ten session_start generuje.

Nie dam sobie co do tego ręki uciąć, ale często zdarza mi się spotykać z opinią (linków pod ręką nie mam na szybkiego) że apache będzie chodził wolniej pod windowsem, dlatego że w głównej mierze został napisany na systemy *.nixowe. Dodatkowo windows ma jedną wadę i zaletę jednocześnie. Każdą ścieżkę do pliku możesz podać zarówno z małych liter jak i z dużych. Windows jakby dwa lub nawet więcej razy, sprawdza tą samą ścieżkę do pliku, uwzględniając różne kombinacje wielkości liter. Sam zauważyłem jakieś 30-40% różnicy w czasie generowania skryptu jeżeli chodzi o windowsa w stosunku do *.nixa. Przykładowo ten sam skrypt na podobnej konfiguracji apache/mysql/php w przypadku windowsa generuje się w jakieś ~300ms, w przypadku *.nixa czas generowania oscyluje między 180ms a 210ms. Mogą być jeszcze inne powody w przypadku windowsa, udało mi się jakiś czas temu zauważyć właśnie ten problem z tymi ścieżkami..
Go to the top of the page
+Quote Post
soska66
post 16.11.2011, 16:14:12
Post #3





Grupa: Zarejestrowani
Postów: 132
Pomógł: 1
Dołączył: 3.02.2005

Ostrzeżenie: (0%)
-----


Cytat(by_ikar @ 16.11.2011, 14:51:40 ) *
Z tego co czytam, to w sumie najwięcej czasu schodzi na pobranie obrazków/styli/skryptów js. Podałeś że zarówno arkusze jak i style masz więcej niż w kilku plikach. Proponuje ci połączyć wszystkie style do jednego arkusza, to samo tyczy się skryptów js. Poczytaj o css sprites. Może być tak że tych obrazków masz dużo, layout pocięty w jakieś malutkie części i tutaj już nie tyle ważna jest kwestia rozmiaru takich obrazków, co ich ilość; ponieważ przeglądarki mają ograniczoną ilość żądań dla jednej domeny. Możesz rozmieszczać pliki na kilku subdomenach, wtedy zapewniasz równoległe pobieranie kilku plików. xdebug wygenerował ci plik, który można sobie przeanalizować chociażby w webgrind. Załącz ten plik, z chęcią zobaczę ile czasu ci się tam ten session_start generuje.

Nie dam sobie co do tego ręki uciąć, ale często zdarza mi się spotykać z opinią (linków pod ręką nie mam na szybkiego) że apache będzie chodził wolniej pod windowsem, dlatego że w głównej mierze został napisany na systemy *.nixowe. Dodatkowo windows ma jedną wadę i zaletę jednocześnie. Każdą ścieżkę do pliku możesz podać zarówno z małych liter jak i z dużych. Windows jakby dwa lub nawet więcej razy, sprawdza tą samą ścieżkę do pliku, uwzględniając różne kombinacje wielkości liter. Sam zauważyłem jakieś 30-40% różnicy w czasie generowania skryptu jeżeli chodzi o windowsa w stosunku do *.nixa. Przykładowo ten sam skrypt na podobnej konfiguracji apache/mysql/php w przypadku windowsa generuje się w jakieś ~300ms, w przypadku *.nixa czas generowania oscyluje między 180ms a 210ms. Mogą być jeszcze inne powody w przypadku windowsa, udało mi się jakiś czas temu zauważyć właśnie ten problem z tymi ścieżkami..


Dzieki za sugestie. Wiem, ze Windows czyta troche wolniej ale zakładam, że nawet a ramach tego wolniejszego czytania powinien być konsekwentny.
Jeśli chodzi o obrazki, js i css... Faktyczenie mógłbym to poprawić ale patrząc na analizy ładowania choćby w firebug, nie wygląda to na podstawowy problem. Ładowanie css, js i obrazków następuje dopiero po załadowaniu logiki php i, z pewnymi wyjątkami, trwa chwile. Mnie najbardziej martwi process płatności na stronie. To prawie nie zawiera obrazków i bardzio mało js a mimo to potrafi się wy-time-out'owac - tak przynajmniej twierdza klienci sklepu.

Zanim zaczniemy, jeśli oczywiście będziecie dalej chętni pomóc, szukać dalej, chciałbym się upewnić apropos żądań i zapytań do bazy. 100 requestów na strone i też kolo 100 prostych zapytań do bazy to chyba nie jest jakoś strasznie dużo prawda? Jak pisałem wcześniej mysql i apache są bardzo daleka od zużycia zasobów pamięci i procesora. Czy możecie wskazać parametry konfiguracji, które mogłyby być ważnym czynnikiem w mojej sytuacji? Wolałbym rozwiać wszelkie swoje wątpliwości na poziomie konfiguracji mysql i apache zanim zaczne analizować sam system Windows
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 20:31