Cz

Konfiguracja serwerów, usług, itp.
drakerc
Posty: 8
Rejestracja: 20 czerwca 2010, 15:10

Częste zawieszanie się PHP

Post 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.
Załączniki
test.jpg
Awatar użytkownika
grzesiek
Junior Member
Posty: 932
Rejestracja: 06 stycznia 2008, 10:41
Lokalizacja: Białystok

Post 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.
drakerc
Posty: 8
Rejestracja: 20 czerwca 2010, 15:10

Post 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.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post 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.
drakerc
Posty: 8
Rejestracja: 20 czerwca 2010, 15:10

Post 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.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post 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.
drakerc
Posty: 8
Rejestracja: 20 czerwca 2010, 15:10

Post 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?
life
Posty: 60
Rejestracja: 03 listopada 2008, 11:00

Post autor: life »

Wysyłanie plików do użytkowników robisz przez PHP

Kod: Zaznacz cały

readfile();
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.
ODPOWIEDZ