Apache2 не запускает мой веб-сервер

Итак, я запускаю эту команду:

/etc/init.d/apache2 start

И это говорит:

* Starting web server apache2 [ OK ]

Но! Мой сайт по-прежнему не работает. А также!

service --status-all
 [ - ]  apache2

Whaattt....? Что происходит?;(

[Sat May 01 14:45:18 2010] [warn] pid file /var/run/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
[Sat May 01 14:45:18 2010] [notice] Apache/2.2.11 (Ubuntu) PHP/5.3.2 configured -- resuming normal operations
[Sat May 01 14:45:18 2010] [alert] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread
[Sat May 01 14:45:18 2010] [alert] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread
[Sat May 01 14:45:20 2010] [alert] No active workers found... Apache is exiting!

3 ответа

В Linux это обычно происходит из-за высокого ThreadsPerChild + высокий или неограниченный ulimit -s.

В Linux размер стека по умолчанию для каждого потока равен значению ulimit -s или 8-10 мегабайт - для нормальной работы Apache требуется около 512 килобайт стекового пространства или меньше.

Это быстро превышает либо 32-битный размер адресного пространства с TPC около 200+, либо, если у вас есть ограничения системной памяти, вы также можете столкнуться с ними.

Установите ulimit -s 512 в вашем файле "envvars", поставляемом вместе с apachectl - обратите внимание, что ThreadStackSize здесь не помогает, потому что это устанавливает минимум.

Это новая установка или ранее она была стабильной и не запускалась?

Причиной может быть недостаток памяти, хотя в этом случае должно отображаться "(12) Невозможно выделить память: apr_thread_create: невозможно создать рабочий поток".

Скорее всего, вы превышаете настройку PTHREAD_THREADS_MAX в вашей ОС. Вы можете увеличить это или понизить ThreadsPerChild в Apache.

Скорее всего, вы используете дистрибутив "Worker" Apache, "prefork" может быть более подходящим, потому что он использует 1 поток на процесс, против "worker", который использует много потоков на процесс.

Источники:

Посмотрите логи, особенно error_log. Это должно помочь. Если это не помогает, попробуйте выполнить команду apache2:

strace -f -o output.txt /etc/init.d/apache2 start

strace будет отслеживать системные вызовы (флаг -f приказывает strace также следовать за дочерними процессами, а флаг -o записывает вывод в файл output.txt)

Другие вопросы по тегам