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