wtorek, 21 kwietnia 2009

Wyciek pamięci w PHP 5

W jednym z moich projektów ważną część stanowi skrypt PHP działający non-stop, coś w rodzaju uniksowego demona. Mniejsza o szczegółowe funkcje, istotne jest to, że pracuje w sposób ciągły przez długi czas, nawet pół roku.

Wszystko było dobrze do niedawna, kiedy to ni z tego ni z owego serwer zaczął zgłaszać problemy braku pamięci. Bliższe oględziny wykazały że winny jest właśnie ten demonowy skrypt.
Co ciekawe, tego znikania pamięci nie było widać ani wywołując memory_get_usage(false) ani memory_get_usage(true). Nie był to też proces bardzo szybki - w moim przypadku pożarcie całej pamięci serwera (łącznie ze swapem) zajmowało mniej więcej 2-3 doby.
Zacząłem więc sprawdzać co takiego zmieniałem ostatni w skrypcie że zaczął "wyciekać". Okazało się, że jedyną modyfikacją było dodanie pewnej funkcji która z kolei używała funkcji PHP strtotime() i to jest główna podejrzana w sprawie. Przeszukałem Google i wszystko stało się jasne: to pluskwa w PHP właśnie w strtotime. Zamieniłem więc strtotime() na mktime() i problem ustąpił.

Brak komentarzy:

Prześlij komentarz