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.
Cz
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.
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.
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.
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?
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?
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.
Kod: Zaznacz cały
readfile();
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.