Здравствуйте! Возникла проблемка.
В связи с тем, что на сервере резко возникла проблема с нехваткой ОЗУ, решил уменьшить стек, то 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 в ручную не вариант, ибо при разъединении сессии данные обнуляются, да и без разъединения это тоже не помогает.
С нетерпением жду овтета, заранее спасибо!
Максимальное количество файлов
В файле /etc/init.d/rc
Объясни толком зачем этот (/etc/init.d/rc) файл трогал?
По-умолчанию ulimit -n = 4096.
По-умолчанию ulimit -n = 4096.
Спасибо буду знать.
Объясни толком зачем этот (/etc/init.d/rc) файл трогал?
В источниках, которые я читал, было написано, что требуется добавить ulimit -s = 1024 в /etc/init.d/rc и перезапустить машину, чтобы стек при загрузке задавался указанным.
И на сколько я помню после первой перезагрузки и запросе ulimit -s выводил заданное.
Ну теперь это надо как-то разрулить)
CyberGod, /etc/init.d/rc - в Debian системная служба запуска/остановки сервисов в соответсвии с runlevel - и трогать её нельзя!
Можешь заглянуть в /etc/inittab и посмотреть как она работает.
Имхо я в UNIX системах трогаю всё, но вот конечно то, что я это потрогал на удалённом сервере, конечно пожалел уже очень много раз.
Однако как исправить данную ситуацию не ясно. По прежнему жду помощи.
Появился и ещё вопрос.
newzenon, если по-умолчанию ulimit -n = 4096.
Как так получилось, что когда я до жанглирования вводил lsof | grep apache2 | wc -l и выводило примрено 16 тыс. Вводил lsof | wc -l, выводило ещё больше соответственно?
CyberGod, во первых если мало ресурсов зачем Апач?
/etc/init.d/rc - этот файл верни в первозданное состояние.
Что по списку еще трогали?
и как там с жонглированием - не знаю. :O
CyberGod, лог ошибок апача смотрел? На первый вопрос - ответь, апач не единственный...
ы. И да:
[console]$ nano /etc/security/limits.conf [/console]
что-то типа
* 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]
И еще настройки самого апача смотри
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
Сейчас стоит 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"
Надеюсь это поможет.
Перезагрузился, жду результатов. Если снова упадёт(или не упадёт) отпишусь)
CyberGod, я например уже забывать начинаю что такое апач, использую только nginx.
Не помогло. Продержался в этот раз апач 24 часа и упал. Та же самая ошибка, и из-за неё же не перезапускается, пришлось ребутить весь сервер.
Что ещё можно сделать?
PS: Кстате, если попытаться перезапустить апач прям после старта сервера, опять же выдаст эту же ошибку, если потом подождать 2 мин, то перезапустится, ведать потому, что при старте открывается много файлов.
Последняя строчка из лога ошибок: [Sat Oct 08 22:54:04 2011] [notice] caught SIGTERM, shutting down
Кстате чем отличается ulimite -n от sysctl fs.file-max ?
Сейчас стоит 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 пользуйся.
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!
Не доступны сокеты прослушивания, закрытие.
Невозможно открыть журналы.
Лог ошибок содержит больше информации.
Из-за чего не доступны сокеты?
Что может быть причиной падений апача, его не способности запуститься с выдачей ошибки на скриншоте? Так как помогает только перезапуск сервера, может есть идеи, что можно попробывать сделать после падения и до перезапуска сервера, чтобы запустить апач? Это помогло бы найти проблему.
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 только когда всякие питоны нужны.
Без nginx не вариант.
>> Для себя решил что нужен apache только когда всякие питоны нужны
Именно потому и не отказался от апача и не хочу отказываться, всякие питоны перлы и т. д. нужны.
CyberGod, конфиги apache и nginx покажи - может что придумаем, nginx обнови - dotdeb репы для stable - Nginx 1.0.6 http://www.dotdeb.org/
ы. Большие полотна в spoiler/code убирай.
Без nginx не вариант.
Почему, и да говорю не навсегда от него отказаться, а временно посмотреть как себя будет апач вести.
>> Для себя решил что нужен apache только когда всякие питоны нужны
Именно потому и не отказался от апача и не хочу отказываться, всякие питоны перлы и т. д. нужны.
Ну тогда, да.
