Strona 1 z 1
Częste zawieszanie się PHP
: 27 lipca 2010, 14:02
autor: drakerc
Witam.
Mam na serwerze serwer lighttpd w najnowszej wersji wraz z PHP5-cgi. Mam tam dosyć popularną stronę (około 6000uu dziennie) opartą na Joomli. Jednak dziś dwukrotnie zdarzył mi się dziwny problem: procesy /usr/bin/php5-cgi zajmują 100% użycia procesora do czasu aż zresetuję cały serwer lub lighttpd. Po resecie przez około 2 godziny jest normalnie, a potem znów 100% użycia procesora przez php5.
Czy mógłby mi ktoś doradzić, co mam z tym zrobić? Resetowanie lighttpd nie jest dla mnie wygodną opcją, bo na stronie prowadzę serwis z
pobieraniem plików, a przez to użytkownikom przerywa się pobieranie dużych plików (mody do gier). Jak to naprawić? Opcjonalnie - czy istnieje jakiś sposób resetowania samego php5, a nie lighttpd?
Załączam mój konfig PHP, być może on jest winny?
http://pastebin.com/N23h6Qd7
Dziękuję za odpowiedź. W załączniku
zrzut ekranu z programu htop podczas 100% użycia.
: 27 lipca 2010, 17:18
autor: grzesiek
Zainteresuj się ustawieniami, jak długo może być wykonywany skrypt, czy coś w tym stylu. Może to być wina jakiegoś skryptu, jeżeli aplikacja serwera nie była ostatnio zmieniana, a problem pojawił się nagle.
: 27 lipca 2010, 17:52
autor: drakerc
Ustawiłem max_execution_time na 30 i od dłuższego czasu problem znikł. Dzięki za odpowiedź.
Byłbym wdzięczny za niezamykanie jeszcze tematu, bo nie wiem, czy to tylko było tymczasowe rozwiązanie, czy problem jest już rozwiązany.
: 27 lipca 2010, 19:45
autor: Bastian
Generalnie nie słyszałem o przypadku, gdy obciążanie serwera przez skrypt byłoby związane, z krótkim czasem na wykonanie skryptów. Zazwyczaj krótkie czasy na wykonanie skryptu powodują, iż skomplikowany skrypt nie zdąża się wykonać i tyle. W twoim przypadku wygląda to tak jakby jakiś skrypt powodował obciążenie. Może masz jakąś pętlę czy coś. Zauważ, że pojedyńczy skrypt obciąża czas procesora w ok 20% a to jest generalnie możliwe, jeżeli jest mocno skomplikowany. Często tak się dzieje, gdy skrypt mocno męczy bazę danch, chociaż na moje oko to powinien wtedy proces bazy danych pojawić gdzieś w górnej pozycji, więc pewności nie mam.
: 27 lipca 2010, 21:09
autor: drakerc
Akurat ze względu na to, że mamy bardzo potężną bazę danych to korzystamy ze zdalnego MySQL-a na innym serwerze w tej samej serwerowni, bo przedtem było bardzo duże zużycie RAM-u i procesora.
Wcześniej miałem
naprawdę duży max_execution_time, chyba kilka tysięcy sekund. Może ktoś z konkurencji chciał nam zrobić na złość i coś robili - nie wiem. Na szczęście do tej pory jest wszystko w porządku, a zmniejszenie max_execution_time'u raczej nie odbiło się u nas zbytnio na niczym (tak w ogóle to jeśli przykładowo
wgrywam duży plik w PHP, to to czy się "wgra" zależy od max_input_time, mam rację?).
Sprawdziłem również logi błędów lighttpda i trochę dziwne rzeczy działy się tam podczas, gdy serwer padał. Jeśli ktoś jest zainteresowany ich przejrzeniem i wysunięciem wniosku, to dostępne są tutaj:
http://modbase.pl/error.log.txt
Problemy z tego co pamiętam były koło 9:50 i prawdpodobnie (spałem) około 6:10.
: 28 lipca 2010, 09:05
autor: Bastian
tak w ogóle to jeśli przykładowo wgrywam duży plik w PHP, to to czy się "wgra" zależy od max_input_time, mam rację?
Tak.
Nie znam się na logach lighttpd, ale to wygląda tak jakbyś miał w konfiguracji ustawione logowanie tylko błędów.
: 28 lipca 2010, 10:34
autor: drakerc
Oczywiście załączyłem jedynie log błędów, wolałem, aby access_log pozostał u mnie, poza tym mam ponad 40000 wyświetleń strony dziennie i access_log waży naprawdę sporo.
Na razie temat można już zamknąć - od wczoraj wszystko jest w porządku. Jak coś znów będzie to skontaktuję się z kimś z moderatorów o otworzenie tematu.
Edycja:
Jeszcze jedno pytanie, czy jest jakiś sposób na "reset" lighttpda w taki sposób, aby tylko wczytał nowy konfig, a nie wyłączał się i włączał (przez wyłączenie moim użytkownikom wyłącza się pobieranie plików) lub jakoś bez przerywania połączeń klientów?
: 30 lipca 2010, 18:21
autor: life
Wysyłanie plików do użytkowników robisz przez PHP
czy normalnie przez HTTP?
Jak przez readfile to przy dużych plikach i dużej ilości odwiedzin będzie to mordercze.
Z wgrywaniem plików możesz pokombinować przez FTP. Dać użytkownikom dostęp a potem skryptem tylko przetwarzać pliki z konta użytkownika itp.