Поставил nginx+PHP/FastCGI вместо апача на ad сервер, крутить phpAdsnew.
После нескольких дней работы наблюдается такая картина: на все PHP
запросы 500 internal server error, в логе:
2005/03/15 11:21:39 [alert] 13114#0: *8550225 socket() failed (24: Too
many open files) while connecting to upstream, client: 24.233.133.21,
URL: /adjs.php?n=505798710&what=zone:89&exclude=,, upstream:
fastcgi://127.0.0.1:1234/adjs.php?n=505798710&what=zone:89&exclude=,
2005/03/15 11:21:39 [alert] 13114#0: *8550231 socket() failed (24: Too
many open files) while connecting to upstream, client: 208.44.235.98,
URL: /adjs.php?n=af63bc71&what=zone:75&block=1&exclude=,, upstream:
fastcgi://127.0.0.1:1234/adjs.php?n=af63bc71&what=zone:75&block=1&exclude=,
2005/03/15 11:21:39 [alert] 13114#0: accept() on xx.xx.xx.xx:80 failed
(24: Too many open files)
cat /proc/sys/fs/file-nr
1993 113 104032
Рестарт nginx помогает, дескрипторы освобождаются:
cat /proc/sys/fs/file-nr
1993 1095 104032
После получаса работы имеем:
cat /proc/sys/fs/file-nr
1993 961 104032
Если я правильно понимаю в Линуксе, то эти строки показывают следующее:
1) за всё время было открыто одновременно всего 1993 файла;
2) в первом примере открыто 113 файла;
3) после рестарта стало открыто 1095; где здесь происходит освобождение,
я не вижу;
4) после получаса работы открыто 961 файл, то есть, меньше, чем на старте.
Как боротся, кроме бесконечного увеличения доступных дескрипторов и
регулярных рестартов nginx? Может, я чего делаю неправильно?
Система: RHEL3, 2.4.21-20.EL
nginx 0.1.24, PHP 4.3.11-dev (из CVS)
Начало конфига:
user apache apache;
worker_processes 1;
events {
connections 1560;
use rtsig;
}
Скорее всего, нужно увеличить "limits -n".
Можно ещё отключить keep-alive, если он не нужен:
keepalive_timeout 0;
Игорь Сысоев
http://sysoev.ru