Я запускаю Apache2 с mpm_prefork на сервере MediaTemple (dv). В последнее время в конфигурацию моего сервера не вносилось никаких существенных изменений. httpd.conf в настоящее время настроен на следующее:
MaxKeepAliveRequests 200
KeepAliveTimeout 15
<IfModule prefork.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 10
MaxClients 200
MaxRequestsPerChild 4000
</IfModule>
Но я получаю следующую ошибку незадолго до полного сбоя apache:
[Thu Jun 04 18:30:24 2009] [warn-phpd] mmap cache can't open /var/www/vhosts/mydomain.com/httpdocs/filename.php - Too many open files in system (pid 19873)
Меня раздражает то, что я присматриваю за этим сервером, чтобы перезапустить его при сбое Apache. Помогите?
Я предлагаю вам попробовать добавить такую строку ulimit -n 16384 в начало файла /и т.д. / по умолчанию / apache2 а затем перезапуск.
Также см. Это ссылка на сайт.
из 'man proc':
/ proc / sys / fs / файл-макс Этот файл определяет общесистемный лимит на количество открытых файлов для всех процессов. (См. Также setrlimit (2), который может использоваться процессом для установки ограничения для каждого процесса, RLIMIT_NOFILE, на количество файлов, которые он может открывать.) Если вы получаете много сообщений об ошибках о том, что закончились дескрипторы файлов, попробуйте увеличение этого значения:
echo 100000 > /proc/sys/fs/file-max The kernel constant NR_OPEN imposes an upper limit on the
значение, которое может быть помещено в файл-макс.
If you increase /proc/sys/fs/file-max, be sure to
увеличьте / proc / sys / fs / inode-max в 3-4 раза больше нового значения / proc / sys / fs / file-max, иначе у вас закончатся inodes.
**/proc/sys/fs/file-nr** This (read-only) file gives the number of files
в настоящее время открыт. Он содержит три числа: количество выделенных файловых дескрипторов; количество свободных файловых дескрипторов; и максимальное количество дескрипторов файлов. Ядро динамически выделяет дескрипторы файлов, но не освобождает их снова. Если количество выделенных файлов близко к максимальному, вам следует рассмотреть возможность увеличения максимального количества. Когда количество свободных дескрипторов файлов велико, вы столкнулись с пиком использования дескрипторов файлов, и вам, вероятно, не нужно увеличивать максимум.
На второе число стоит взглянуть, чтобы понять, нужно ли увеличивать первое число. Если это так, вы можете установить его в своем /etc/sysctl.conf с помощью:
fs.file-max=512000
Обратите внимание, что это устанавливает система предел; ограничение на количество пользователей устанавливается с помощью ulimit, с которым, как вы уже указали, знакомы.
Проверьте lsof, чтобы узнать, что на самом деле происходит. Превышение необоснованно высокого предела часто происходит из-за утечки или другой ошибки.
MediaTemple - это с помощью ПК Р-Виртуализация технология виртуализации? Virtuozzo построен на основе OpenVZ. В OpenVZ есть ограничение на количество открытых файлов. Может быть, ваш контейнер достиг предела?
Выполните эту команду (если можете):
cat / proc / user_beancounters
и посмотрите значения ресурса numfile.
Попробуйте запустить "ulimit -n 8192" перед запуском apache. Вероятно, он исчерпал максимальное количество открытых файлов.
Вероятно, это именно то, на что это похоже - на вашем сервере открыто больше файлов, чем ядро настроено для обработки.
Я полагаю, у вас есть общий сервер? Если у вас есть root на сервере, вы можете увеличить лимит для пользователя веб-сервера с помощью ulimit -n до максимального значения, настроенного в / proc / sys / fs / file-max, но для общего сервера вам, вероятно, потребуется поговорите со своим поставщиком услуг.
Также возможно, что конкретный сервер, на котором вы находитесь, переполнен, если вы поделитесь им, и в этом случае MediaTemple придется перетасовать некоторых из вас.
Кроме того, добавляли ли вы в последнее время какие-либо новые функции к своему веб-присутствию или ваш трафик значительно увеличился?
Я решил свою проблему, добавив в / usr / sbin / apachectl следующее:
ULIMIT_MAX_FILES="ulimit -n 16384"
Проблема, кажется, утихла, по крайней мере, за последние 12 часов.