У меня проблема с mod_python и Apache, и я почти уверен, что знаю, в чем проблема, но мне бы хотелось немного подбодрить. У меня сейчас ситуация, когда я работаю с очень небольшая виртуальная машина с 256 МБ оперативной памяти. Теперь MySQL и Apache работают довольно хорошо, и все в порядке, пока я не начну использовать свопинг, чего я, очевидно, хочу избегать как можно чаще. С таким маленьким объемом оперативной памяти это практически невозможно. Я решил перезапускать MySQL и Apache с помощью cron несколько раз в день, однако примерно через 4-5 дней на устройстве не осталось места на диске:
[Mon May 11 06:00:14 2009] [notice] caught SIGTERM, shutting down
[Mon May 11 06:00:20 2009] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Mon May 11 06:00:20 2009] [notice] Digest: generating secret for digest authentication ...
[Mon May 11 06:00:20 2009] [notice] Digest: done
[Mon May 11 06:00:21 2009] [notice] mod_python: Creating 4 session mutexes based on 256 max processes and 0 max threads.
[Mon May 11 06:00:21 2009] [error] (28)No space left on device: mod_python: Failed to create global mutex 1 of 4 (/tmp/mpmtx265021).
Вначале мне не хватало семафоров, но, похоже, это не так. По крайней мере, уловки, которые я использовал, чтобы обойти это в прошлом, пока что не сработали. Я видел похожие проблемы у людей, использующих mod_python, но я не нашел особых исправлений. Это вызывает мой перезапуск, или это просто ошибка в mod_python? Спасибо!
удалить просочившиеся семафоры, которые больше не используются
ipcs -s | perl -ane '/^0x00000000/ && `ipcrm -s $F[1]`'
увеличить доступные семафоры
echo “kernel.sem = 512 32000 100 512″ >> /etc/sysctl.conf; sysctl -p
У меня были аналогичные проблемы при многократном перезапуске Apache на моем ноутбуке (для меня потребовалось около 40 перезапусков); единственное решение, которое я нашел, - это полностью перезагрузить компьютер. Конечно, у моего ноутбука 2 ГБ ОЗУ и намного больше дискового пространства, чем у вашего сервера, поэтому вы можете столкнуться с этой проблемой быстрее ... в принципе, я бы избегал перезапуска Apache слишком много раз без полной перезагрузки сервера.
Погуглил, я нашел это решение:
Фактически вам нужно увеличить количество семафоров SysV в вашей системе.
Я использую (в /etc/sysctl.conf):
kernel.sem = 512 32000 100 512
(установите параметры в этом файле, запустив sysctl -p).
Кстати. mod_python
немного устарел с момента появления WSGI. Большинство современных приложений можно запускать с помощью mod_wsgi
.
Я предполагаю, что это сделано в системе Linux.
Мне просто интересно, можете ли вы увидеть какую-то проблему с общей памятью, а также семафоры? Такое случилось со мной, когда apache был убит через kill -9.
Если это произойдет, проверьте состояние общей памяти с помощью команды: ipcs-a. Это покажет текущее использование семафоров, очередей сообщений и общей памяти. Это может предоставить вам дополнительную информацию о проблеме.
На самом деле вы можете это сделать, если хотите удалить старые семафоры или области общей памяти с помощью команды ipcrm (см. Страницу руководства для конкретных параметров, которые вам нужны).
На данный момент я не могу вспомнить, но я помню, что в Linux относительно легко изменить параметры семафора и разделяемой памяти.
Ну просто мысли по твоей проблеме. Надеюсь, поможет.