php4-fpm: errno 24 Too many open files

225 views
Skip to first unread message

david

unread,
Apr 18, 2008, 7:46:32 AM4/18/08
to highload-php-ru
FreeBsd 6.2, amd64. Запускаю php-4.4.8 + fpm-0.5.7 под nginx.

Через некоторое время работы с сайтом, он перестаёт отзываться, говоря
на все запросы "No input file specified" (код 404). Как я понял по
выводу ktrace, php не может открыть запрошенный файл:

91046 php-4.4.8-fpm CALL lstat(0x7fffffffbe50,0x7fffffffbd70)
91046 php-4.4.8-fpm NAMI "/www"
91046 php-4.4.8-fpm RET lstat 0
91046 php-4.4.8-fpm CALL lstat(0x7fffffffbe50,0x7fffffffbd70)
91046 php-4.4.8-fpm NAMI "/www/guest"
91046 php-4.4.8-fpm RET lstat 0
91046 php-4.4.8-fpm CALL lstat(0x7fffffffbe50,0x7fffffffbd70)
91046 php-4.4.8-fpm NAMI "/www/guest/hiero.ru"
91046 php-4.4.8-fpm RET lstat 0
91046 php-4.4.8-fpm CALL lstat(0x7fffffffbe50,0x7fffffffbd70)
91046 php-4.4.8-fpm NAMI "/www/guest/hiero.ru/htdocs"
91046 php-4.4.8-fpm RET lstat 0
91046 php-4.4.8-fpm CALL lstat(0x7fffffffbe50,0x7fffffffbd70)
91046 php-4.4.8-fpm NAMI "/www/guest/hiero.ru/htdocs/
series_show_modes.php"
91046 php-4.4.8-fpm RET lstat 0
91046 php-4.4.8-fpm CALL sigprocmask(0x1,0,0x7099c8)
91046 php-4.4.8-fpm RET sigprocmask 0
91046 php-4.4.8-fpm CALL setitimer(0x2,0x7fffffffc530,0)
91046 php-4.4.8-fpm RET setitimer 0
91046 php-4.4.8-fpm CALL sigaction(0x1b,
0x7fffffffc4e0,0x7fffffffc4c0)
91046 php-4.4.8-fpm RET sigaction 0
91046 php-4.4.8-fpm CALL sigprocmask(0x2,0x7fffffffc520,0)
91046 php-4.4.8-fpm RET sigprocmask 0
91046 php-4.4.8-fpm CALL open(0x7dab98,0,0x1b6)
91046 php-4.4.8-fpm RET open -1 errno 24 Too many open files

Файлов открыто в самом деле много:

> fstat | grep php-4 | wc -l
3104

Причём это одни и те же файлы открыты множество раз (взял наугад inode
из списка, с остальными ситуация ровно такая же):

> fstat | grep php-4 | grep 1179615 | wc -l
72

Если рестартануть php, то с каждым релоадом страницы число открытых
файлов увеличивается где-то на сотню штук.

Рядом работает php-5.2.5 + fpm-0.5.4, он гораздо скромнее (хотя
реальная нагрузка на него куда выше):

> fstat | grep php-5 | wc -l
212


Кто виноват (похоже, что всё-таки php/fpm) и что делать?

david

unread,
Apr 18, 2008, 8:26:18 AM4/18/08
to highload-php-ru
UPD: php-4.4.8-fpm-0.5.8-rc1 и php-4.4.7-fpm-0.5.4 -- то же самое.

Станислав Игнатов

unread,
Apr 18, 2008, 1:53:38 PM4/18/08
to highload-php-ru
Подскажите в CentOS аналого ktrace и fstat?

Станислав Игнатов

unread,
Apr 18, 2008, 8:45:52 AM4/18/08
to highload-php-ru
у меня такая же проблема,
подскажите пожалуйста аналоги fstat и ktrace в CentOS 5.1?

Artyom Nosov

unread,
Apr 19, 2008, 9:13:05 AM4/19/08
to highloa...@googlegroups.com
lsof и strace

david

unread,
Apr 19, 2008, 10:07:56 AM4/19/08
to highload-php-ru
У Вас тоже на четвёртой версии?

Andrei Nigmatulin

unread,
Apr 19, 2008, 1:20:40 PM4/19/08
to highloa...@googlegroups.com
On Friday 18 April 2008 15:46, david wrote:
> FreeBsd 6.2, amd64. Запускаю php-4.4.8 + fpm-0.5.7 под nginx.
>
> Через некоторое время работы с сайтом, он перестаёт отзываться, говоря
> на все запросы "No input file specified" (код 404). Как я понял по
> выводу ktrace, php не может открыть запрошенный файл:
>
> Файлов открыто в самом деле много:
> > fstat | grep php-4 | wc -l
>
> 3104
>
> Причём это одни и те же файлы открыты множество раз (взял наугад inode
>
> из списка, с остальными ситуация ровно такая же):
> > fstat | grep php-4 | grep 1179615 | wc -l
>
> 72
>
> Если рестартануть php, то с каждым релоадом страницы число открытых
> файлов увеличивается где-то на сотню штук.
>
> Рядом работает php-5.2.5 + fpm-0.5.4, он гораздо скромнее (хотя
>
> реальная нагрузка на него куда выше):
> > fstat | grep php-5 | wc -l
>
> 212
>
>
> Кто виноват (похоже, что всё-таки php/fpm) и что делать?

Похоже на утечку дескрипторов.
Надо посмотреть что это за открытые файлы с помощью "lsof".


--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take

david

unread,
Apr 20, 2008, 10:19:15 AM4/20/08
to highload-php-ru
Остаются открытыми php-файлы -- и те, что вызываются непосредственно, и
те, что в них инклюдятся. Вот что имеет место после нескольких
релоадов:

# /usr/local/sbin/lsof -p 67950 | grep Mail.php
php-4.4.7 67950 www 23r VREG 0,82 8066 1131079 /
jail/usr/local/lib/php/pear/Mail.php
php-4.4.7 67950 www 68r VREG 0,82 8066 1131079 /
jail/usr/local/lib/php/pear/Mail.php
php-4.4.7 67950 www 113r VREG 0,82 8066 1131079 /
jail/usr/local/lib/php/pear/Mail.php
php-4.4.7 67950 www 158r VREG 0,82 8066 1131079 /
jail/usr/local/lib/php/pear/Mail.php
php-4.4.7 67950 www 203r VREG 0,82 8066 1131079 /
jail/usr/local/lib/php/pear/Mail.php
php-4.4.7 67950 www 248r VREG 0,82 8066 1131079 /
jail/usr/local/lib/php/pear/Mail.php
php-4.4.7 67950 www 293r VREG 0,82 8066 1131079 /
jail/usr/local/lib/php/pear/Mail.php

Никакие другие файлы, кроме .php, так не размножаются.


On 19 апр, 21:20, Andrei Nigmatulin <andrei.nigmatu...@gmail.com>
wrote:

david

unread,
Apr 20, 2008, 11:29:58 AM4/20/08
to highload-php-ru
Так, а fpm-то, похоже, не при чём. Запустил голый "php -b" -- та же
история...

On 18 апр, 15:46, david <david.mzareul...@gmail.com> wrote:

Andrei Nigmatulin

unread,
Apr 20, 2008, 3:02:49 PM4/20/08
to highloa...@googlegroups.com
On Sunday 20 April 2008 19:29, david wrote:
> Так, а fpm-то, похоже, не при чём. Запустил голый "php -b" -- та же
> история...

Какие-нибудь экзотические extensions / акселераторы используются ?

david

unread,
Apr 20, 2008, 3:25:48 PM4/20/08
to highload-php-ru
APC используется. 3.0.18. Попробую-ка без него, в самом деле.

Ещё мемкеш, но едва ли в нём дело.

On 20 апр, 23:02, Andrei Nigmatulin <andrei.nigmatu...@gmail.com>
wrote:

david

unread,
Apr 20, 2008, 3:35:42 PM4/20/08
to highload-php-ru
Да, убрал APC из сборки -- утечка прекратилась. Тогда, наверное, вопрос
снят, спасибо... придётся без акселератора пожить:(

Antony Dovgal

unread,
Apr 20, 2008, 3:35:43 PM4/20/08
to highloa...@googlegroups.com
On 20.04.2008 23:25, david wrote:
> APC используется. 3.0.18. Попробую-ка без него, в самом деле.

Похоже на это: http://pecl.php.net/bugs/bug.php?id=13529
Судя по комментариям, исправлено в CVS-версии APC.

Если не поможет - сигнальте, я пну Гопала.

--
Wbr,
Antony Dovgal

david

unread,
Apr 20, 2008, 4:35:03 PM4/20/08
to highload-php-ru
Большое Вам спасибо! CVS-версия не течёт, в самом деле.

Antony Dovgal

unread,
Apr 20, 2008, 5:23:15 PM4/20/08
to highloa...@googlegroups.com
On 21.04.2008 00:35, david wrote:
> Большое Вам спасибо! CVS-версия не течёт, в самом деле.

Да не за что.
Вы отпишите в репорт, что работает патч - будет Гопалу радость =)

--
Wbr,
Antony Dovgal

Reply all
Reply to author
Forward
0 new messages