LinuxForum.Fans
Тема

Максимальное количество файлов

Автор: CyberGod 19 сообщений 6993 просмотров
#198152

Здравствуйте! Возникла проблемка.
В связи с тем, что на сервере резко возникла проблема с нехваткой ОЗУ, решил уменьшить стек, то 2Мб командой ulimit -s 2048.
Записал её в /etc/init.d/rc
В качестве первой не закоментированной строчки: ulimit -s 2048
Перезагрузился, вбил ulimit -s(если память не изменяет всё нормально показало 2048).
В течении суток всё было нормально, однако потом apache стал падать каждые 30 минут.
При попытке start/restart апачь выдаёт ошибку, о том, что исчерпано максимальное количество открытых файлов.

Когда падение случилось впервые перезагрузил весь сервер, обнаружил то что ulimit -s выдаёт размер стека как обычно 8192, хотя строка никуда не делась. Попробовал убрать строку. Но это никак не повлияло, апачь всё также падает через определённое время с этой, же ошибкой(раньше такого никогда не было).

При вводе ulimit -n выводит 1024, то есть очень мало для веб сервера и не удивительно, что падает. Сколько ulimit -n выводит по умолчанию мне не известно, так как никогда ранее не интересовался этим вопросом и не вбивал ulimit -n.

Начал пробовать все известные мне методы, а также те которые нашли поисковики. Собственно если бы, они помогли, вы бы не читали данный топик)

Сейчас ситуация следующая:
В файле /etc/init.d/rc
Первыми двумя не закомментированными строчками написано следующее:
ulimit -n 65536
ulimit -s 2048
В файле /etc/init.d/rc.local

Первыми двумя не закомментированными строчками написано следующее:
ulimit -n 65536
ulimit -s 2048

Где то прочёл, что если указать в файле апача в этой же директории может помочь, потому в В файле /etc/init.d/apache2 первая не закоментированная строчка:
ulimit -n 65536

По идее это надо было писать в теле функции start(), но таковой в данном файле у меня нет.

В файле /etc/security/limits.conf :
@dirsvr soft nofile 65536
@dirsvr hard nofile 65536
* - nofile 2048

Ничто это не помогает.
На данный момент апачь не рушится примерно 12 часов, потом падает и не запускается. Приходится ребутить весь сервер.
То, что держится 12 часов мне кажется из-за уменьшения нагрузки, а не из-за прописанного сверху.
Надо либо вернуть, как было изначально, либо прописать так чтобы данные задавались при загрузке сервера для всего сервера, либо при загрузке апача лично для апача.
Прошу помощи. :cool:

Вбивать в командной строке ulimit -n 65536 в ручную не вариант, ибо при разъединении сессии данные обнуляются, да и без разъединения это тоже не помогает.

С нетерпением жду овтета, заранее спасибо!

#198153
CyberGod написал:

В файле /etc/init.d/rc

Объясни толком зачем этот (/etc/init.d/rc) файл трогал?
По-умолчанию ulimit -n = 4096.

#198161

По-умолчанию ulimit -n = 4096.

Спасибо буду знать.

Объясни толком зачем этот (/etc/init.d/rc) файл трогал?

В источниках, которые я читал, было написано, что требуется добавить ulimit -s = 1024 в /etc/init.d/rc и перезапустить машину, чтобы стек при загрузке задавался указанным.

И на сколько я помню после первой перезагрузки и запросе ulimit -s выводил заданное.

Ну теперь это надо как-то разрулить)

#198164

CyberGod, /etc/init.d/rc - в Debian системная служба запуска/остановки сервисов в соответсвии с runlevel - и трогать её нельзя!
Можешь заглянуть в /etc/inittab и посмотреть как она работает.

#198180

Имхо я в UNIX системах трогаю всё, но вот конечно то, что я это потрогал на удалённом сервере, конечно пожалел уже очень много раз.

Однако как исправить данную ситуацию не ясно. По прежнему жду помощи.

Появился и ещё вопрос.
newzenon, если по-умолчанию ulimit -n = 4096.

Как так получилось, что когда я до жанглирования вводил lsof | grep apache2 | wc -l и выводило примрено 16 тыс. Вводил lsof | wc -l, выводило ещё больше соответственно?

#198181

CyberGod, во первых если мало ресурсов зачем Апач?
/etc/init.d/rc - этот файл верни в первозданное состояние.
Что по списку еще трогали?
и как там с жонглированием - не знаю. :O

#198239

Вернул /etc/init.d/rc в первозданное состояние.
Во всех остальныхфайлах тоже всё добавленное убрал. Апачь умирает кажыде 2 часа и не запускается.


ulimit -n выводит 1024

#198247

CyberGod, лог ошибок апача смотрел? На первый вопрос - ответь, апач не единственный...

#198249

ы. И да:
[console]$ nano /etc/security/limits.conf [/console]

что-то типа

text
*               hard    nofile             2048

Дальше
[console]$ cat /proc/sys/fs/file-max[/console]
установка:
[console]$ echo "104854" > /proc/sys/fs/file-max[/console]
[console]$ nano /etc/sysctl.conf[/console]
[console]$ cat /proc/sys/fs/file-nr
3391 969 52427
| | |
| | |
| | maximum open file descriptors
| total free allocated file descriptors
total allocated file descriptors
(the number of file descriptors allocated since boot)[/console]

#198255

И еще настройки самого апача смотри
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=615632
The canonical place is /etc/apache2/envvars, which is sourced by
apache2ctl. apache2ctl even executes the value of
APACHE_ULIMIT_MAX_FILES if it is set. Try adding
APACHE_ULIMIT_MAX_FILES="ulimit -n 65535"


Покажи httpd.conf

Вот еще нашел:
http://httpd.apache.org/docs/2.0/vhosts/fd-limits.html
http://httpd.apache.org/docs/1.3/misc/descriptors.html

#198331

Сейчас стоит Nginx+Apache. Я рассматривал переход на Nginx+php+FastCGI, но уже заказал увеличение на сервере ОЗУ в два раза. ОЗУ будет хватать, а других причин для перехода не вижу. Тем более никогда раньше не работал с данной связкой, и многого не знаю, тем более .htaccess нужен многим. В общем без особой надобности нет желания лесть в данную тему на данный момент. Конечно если и после увеличения ОЗУ памяти будет мало, то перейду.

Кстате, вот к примеру один процесс apache2 пожирает у меня 30 Мб оперативы. Сколько примерно потребил бы FastCGI?

А теперь по теме.


В логах ошибок у апача ничего сильно подозрительного не заметил разрыв, последнии стрчоки перед падением:
[Fri Oct 07 22:58:07 2011] [notice] mod_python: Creating 8 session mutexes based on 256 max processes and 0 max threads.
[Fri Oct 07 22:58:07 2011] [notice] mod_python: using mutex_directory /tmp
[Fri Oct 07 22:58:07 2011] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Fri Oct 07 22:58:07 2011] [warn] RSA server certificate CommonName (CN) `hosting-rabbit.ru' does NOT match server name!?
[Fri Oct 07 22:58:07 2011] [notice] Apache/2.2.16 (Debian) PHP/5.3.3-7+squeeze3 with Suhosin-Patch mod_python/3.3.1 Python/2.6.6 mod_ssl/2.2.16 OpenSSL/0.9.8o configured -- resuming normal operations
[Fri Oct 07 23:00:04 2011] [notice] caught SIGTERM, shutting down
[Fri Oct 07 23:00:06 2011] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Fri Oct 07 23:00:06 2011] [warn] RSA server certificate CommonName (CN) `hosting-rabbit.ru' does NOT match server name!?
[Fri Oct 07 23:00:06 2011] [notice] suEXEC mechanism enabled (wrapper: /usr/lib/apache2/suexec)
[Fri Oct 07 23:00:06 2011] [warn] module rpaf_module is already loaded, skipping
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/pdo_sqlite.so' - /usr/lib/php5/20090626/pdo_sqlite.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/pspell.so' - /usr/lib/php5/20090626/pspell.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/sqlite.so' - /usr/lib/php5/20090626/sqlite.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/sqlite3.so' - /usr/lib/php5/20090626/sqlite3.so: cannot open shared object file: No such file or directory in Unknown on line 0
[Fri Oct 07 23:00:07 2011] [error] python_init: Python version mismatch, expected '2.6.5+', found '2.6.6'.
[Fri Oct 07 23:00:07 2011] [error] python_init: Python executable found '/usr/bin/python'.
[Fri Oct 07 23:00:07 2011] [error] python_init: Python path being used '/usr/lib/python2.6/:/usr/lib/python2.6/plat-linux2:/usr/lib/python2.6/lib-tk:/usr/lib/python2.6/lib-old:/usr/lib/python2.6/lib-dynload'.
[Fri Oct 07 23:00:07 2011] [notice] mod_python: Creating 8 session mutexes based on 256 max processes and 0 max threads.
[Fri Oct 07 23:00:07 2011] [notice] mod_python: using mutex_directory /tmp
[Fri Oct 07 23:00:07 2011] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Fri Oct 07 23:00:07 2011] [warn] RSA server certificate CommonName (CN) `hosting-rabbit.ru' does NOT match server name!?
[Fri Oct 07 23:00:07 2011] [notice] Apache/2.2.16 (Debian) PHP/5.3.3-7+squeeze3 with Suhosin-Patch mod_python/3.3.1 Python/2.6.6 mod_ssl/2.2.16 OpenSSL/0.9.8o configured -- resuming normal operations
[Fri Oct 07 23:01:16 2011] [warn] MaxClientsVhost reached for mine-blog.com, refusing client.
[Fri Oct 07 23:02:05 2011] [notice] caught SIGTERM, shutting down
[Fri Oct 07 23:54:50 2011] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)

Разрыв во времени между:
[Fri Oct 07 23:02:05 2011] [notice] caught SIGTERM, shutting down
[Fri Oct 07 23:54:50 2011]

Это и было падение, не сразу заметил(

В $ nano /etc/security/limits.conf
У меня закоменчено всё, потому первой стрчокой вбил
* hard nofile 2048
Не мало ли?

Команда $ cat /proc/sys/fs/file-max
Выводит 205068

Вбил: echo "104854" > /proc/sys/fs/file-max


В nano /etc/sysctl.conf ничего интересного:
#
# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additonal system variables
# See sysctl.conf (5) for information.
#

#kernel.domainname = example.com

# Uncomment the following to stop low-level messages on console
#kernel.printk = 3 4 1 3

##############################################################3
# Functions previously found in netbase
#

# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
#net.ipv4.conf.default.rp_filter=1

Команда cat /proc/sys/fs/file-nr выводит:
5760 0 104854

В /etc/apache2/envvars
вбил в конец APACHE_ULIMIT_MAX_FILES="ulimit -n 65535"

Надеюсь это поможет.
Перезагрузился, жду результатов. Если снова упадёт(или не упадёт) отпишусь)

#198388

CyberGod, я например уже забывать начинаю что такое апач, использую только nginx.

#198482

Не помогло. Продержался в этот раз апач 24 часа и упал. Та же самая ошибка, и из-за неё же не перезапускается, пришлось ребутить весь сервер.

Что ещё можно сделать?

PS: Кстате, если попытаться перезапустить апач прям после старта сервера, опять же выдаст эту же ошибку, если потом подождать 2 мин, то перезапустится, ведать потому, что при старте открывается много файлов.

Последняя строчка из лога ошибок: [Sat Oct 08 22:54:04 2011] [notice] caught SIGTERM, shutting down

Кстате чем отличается ulimite -n от sysctl fs.file-max ?

#198835
CyberGod написал:
Сейчас стоит Nginx+Apache.

Если связка настроена неправильно, то могут быть тормоза, допустим nginx версия и версия ядра какие (новый nginx со старыми ядрами не ладит).
Конфиг апача и nginx то же глянуть бы.
Посмотреть открытые файлы для процессов так:
Apache
[console]for pid in `pidof apache2`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done[/console]
Nginx
[console]for pid in `pidof nginx`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done[/console]

У nginx например в конфиге (/etc/nginx/nginx.conf) указавается кол-во рабочих процессов и лимиты.

И да в логах ошибок туча, с php там еще что-то твориться...
ы. CyberGod, тегами code/spoiler/console пользуйся.

#199191

Server version: Apache/2.2.16 (Debian)
nginx version: nginx/0.7.67

Связка настроена правильно, раньше долгое время, всё стабильно работало.
Недавно снова прозошёл выход из строя из-за этой проблемы. Симптомы.
При заходе на сайт nginx выводит ошибку 502, 504.
При попытке сделать рестарт апача, выводит всё ту же ошибку: http://radikal.ru/F/s49.radikal.ru/i123/1110/6e/2e12826567e7.png.html
Делаю killall apache2
Вбил lsof | grep apache2 | wc -l, вывело совсем малое количество 600. За место обычных 15000+
Снова делаю рестарт апача, снова ошибка.
Удаляю /var/log/apache2/error.log который весил 30 Мб.
Делаю рестарт апача, ошибка.

Из этого, думаю можно сделать вывод, что апач не стартует не из-за того, что уже открыто максимальное количество файлов.
Кстате при killall apache2 вместе с процессами ведь закрываются и открытые ранее файлы этими процессами?

К сожалению заюзать
for pid in `pidof apache2`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done

до перезапуска сервера не удалось.

Заюзал после перезапуска:
[console]
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 618

/usr/sbin/apache2-kstart
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 618

/usr/sbin/apache2-kstart
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 618

/usr/sbin/apache2-kstart
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 619

/usr/sbin/apache2-kstart
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 618

/usr/sbin/apache2-kstart
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 618

/usr/sbin/apache2-kstart
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 618

/usr/sbin/apache2-kstart
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 618

/usr/sbin/apache2-kstart
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 617

/usr/sbin/apache2-kstart
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 618

/usr/sbin/apache2-kstart
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 618

/usr/sbin/apache2-kstart
Limit Soft Limit Hard Limit Units
Max open files 65535 65535 files
Currently open files: 618
[/console]

[console]lsof | grep apache2 | wc -l[/console]
Выдаёт цифру более 8500.

Совершенно не понятно, почему эти две команды выводят разные цифры?
После этого перезапустил апач, он перезапустился успешно, если команда lsof | grep apache2 | wc -l выводит правду, то ограничение 65536 работает и апач умирает и не хочет перезапускаться не из-за макс. открытых файлов, как думали раньше.

no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
failed!

Не доступны сокеты прослушивания, закрытие.
Невозможно открыть журналы.
Лог ошибок содержит больше информации.

Из-за чего не доступны сокеты?
Что может быть причиной падений апача, его не способности запуститься с выдачей ошибки на скриншоте? Так как помогает только перезапуск сервера, может есть идеи, что можно попробывать сделать после падения и до перезапуска сервера, чтобы запустить апач? Это помогло бы найти проблему.

#199195

CyberGod, если правильно, попробуй без nginx.
И да nginx version: 0.7.67 - староват однако.
Пользуюсь:
[console]# nginx -v
nginx: nginx version: nginx/1.1.4
[/console]
И доволен, apache не пользую. wink
Подобие .htaccess через конфиг nginx - легко.
htpasswd тоже. php-fpm чудесно шустрит....
Для себя решил что нужен apache только когда всякие питоны нужны.

#199198

Без nginx не вариант.
>> Для себя решил что нужен apache только когда всякие питоны нужны
Именно потому и не отказался от апача и не хочу отказываться, всякие питоны перлы и т. д. нужны.

#199199

CyberGod, конфиги apache и nginx покажи - может что придумаем, nginx обнови - dotdeb репы для stable - Nginx 1.0.6 http://www.dotdeb.org/
ы. Большие полотна в spoiler/code убирай.

#199203
CyberGod написал:
Без nginx не вариант.

Почему, и да говорю не навсегда от него отказаться, а временно посмотреть как себя будет апач вести.

CyberGod написал:
>> Для себя решил что нужен apache только когда всякие питоны нужны
Именно потому и не отказался от апача и не хочу отказываться, всякие питоны перлы и т. д. нужны.

Ну тогда, да.

Войдите или зарегистрируйтесь, чтобы ответить.