W ostatnim czasie dość często korzystam z serwera WAMP (ułatwia wiele spraw na etapie prototypów). Zwykle jego wydajność mi nie przeszkadzała, ale ostatnio zacząłem pracować nad skryptem, który wykonywał kilkaset zapytań do bazy danych w czasie jednej odsłony. Sytuacja ta spowodowała, że skrypt wykonywał się bardzo wolno. Około 40 sekund! Był to o tyle dziwne, że ten sam skrypt na serwerze zewnętrznym wykonywał się w około 3-4 sekundy. Wniosek? Coś nie tak jest w konfiguracji.
Znalazłem potencjalnego winnego zaistniałej sytuacji i rozpocząłem szukanie w Google odpowiedzi jak rozwiązać mój problem. Oczywiście zgodnie z oczekiwaniami dość szybko trafiłem na stackoverflow a tam na wpis zawierający odpowiedź.
Jak przyspieszyć serwer WAMP?
Okazało się, że nie tylko ja miałem problem z serwerem, ale co najważniejsze znane jest skuteczne rozwiązanie polegające na zmodyfikowaniu 3 plików konfiguracyjnych: httpd.conf serwera Apache, php.ini języka PHP i my.ini serwera MySQL.
Przyspieszenie serwera APACHE
W pliku httpd.conf serwera Apache należy znaleźć wpisy EnableMMAP i EnableSendfile i zmodyfikować ich wartość z Off na On (najprawodopodobniej oba polecenia będą umieszczone w komentarzu, więc należy je odkomentować)
EnableMMAP on EnableSendfile on
[important]Klikając lewym przyciskiem myszy na logo WAMP znajdujące się w pasku zadań (serwer musi być uruchomiony) pojawia się w menu. Z menu należy wybrać opcję APACHE a w niej kliknąć na httpd.conf. W tym momencie otworzy się plik, w którym należy zmodyfikować wcześniej wskazane wpisy. Po wprowadzeniu zmian należy zrestartować WAMP.[/important]
Przyspieszenie interprerata PHP
Kolejne działanie to modyfikacja wpisu w pliku php.ini.
realpath_cache_size= 4m
[important]Podobnie jak w przypadku Apache z menu dostępnego pod lewym przyciskiem wybieramy PHP a w nim php.ini. Po modyfikacji pliku należy zrestartować serwer..[/important]
Przyspieszenie serwera MySQL
Ostatni krok polega na modyfikacji pliku my.ini serwera MySQL. Należy odnaleźć wpis i ustawić w nim następującą wartość:
innodb_flush_log_at_trx_commit = 2
[important]Należy podjąć działania analogiczne jak w przypadku PHP i Apache.[/important]
Podsumowanie
Te kilka zmian spowodowało, że skrypt który wykonywał się w 40 sekund wykonuje się od 3 do 4 sekund, czyli znacznie szybciej. Prawdopodobnie optymalizacja samej bazy danych pozwali osiągnąć jeszcze lepszy wynik.
[important]Serwer WAMP dostępny jest na stronie http://www.wampserver.com/en/. Zwykle z jego instalacją nie ma problemu, ale może się zdarzyć, że jeśli w systemie zainstalowany jest Skype serwer nie wystartuje bo port, z którego będzie chciał skorzystać będzie zajęty.[/important]
Serwer na WAMP działa zbyt wolno? Kilka przydatnych porad,
1 komentarz
Mistrzu, chyba jestem Ci winny dużą flaszkę! 🙂
Zrobiłem aplikację opartą o PHP i MySQL, która przetwarza większą ilość dość dużych zdjęć (0,5MB – 5MB), robi miniatury, zapisuje na dysku, robi PDF’y i ich zawartością itp.
Najprawdopodobniej właśnie tego rozwiązania szukałem (stawiam na httpd.conf, ale nie wykluczam php.ini), bo WAMP przestał mi się zawieszać. Zawsze kończyło się restartem usług.
Mam podprogram, w którym za pomocą F5 (proste, ale skuteczne) zmienia się zawartość okienka popup, wypełniając je kolejnymi obrazami z dysku (info o ścieżce do pliku jest w bazie) o rozmiarze ok. 0,5MB. Oprócz zawieszania się WAMP’a obserwowałem nieciągłość: zamiast od 1 do 10, wyświetlał np. 1, 2, 3, 4, 1, 2, 3, 1, … – nie dochodził do 10. Zdjęcia wyświetlały się duuuużo wolniej.
Teraz ani się nie zawiesza, ani nie „resetuje” licznik – dochodzi do 10, a potem 1. Spędziłem kilka tygodni na szukaniu przyczyny, a dziś przeinstalowałem cały serwer razem z WAMP’em. Oczywiście nadal nie działał poprawnie. Szukam z beznadzieją na twarzy czegoś na kształt „WAMP server hangs” i znalazłem Twój artykuł! 🙂