У меня экземпляр Apache2.4 (mpm_worker) завершается со следующим журналом:
[Mon May 27 11:27:33.196177 2019] [core:warn] [pid 567365:tid 139765793668032] AH00045: child process 567368 still did not exit, sending a SIGTERM
[Mon May 27 11:27:35.198179 2019] [core:warn] [pid 567365:tid 139765793668032] AH00045: child process 567368 still did not exit, sending a SIGTERM
[Mon May 27 11:27:37.200177 2019] [core:error] [pid 567365:tid 139765793668032] AH00046: child process 567368 still did not exit, sending a SIGKILL
[Mon May 27 11:27:38.297736 2019] [core:warn] [pid 569972:tid 140126180117440] AH00098: pid file /var/run/apache2/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
[Mon May 27 11:27:38.300264 2019] [mpm_worker:notice] [pid 569972:tid 140126180117440] AH00292: Apache/2.4.29 (Ubuntu) OpenSSL/1.1.0g configured -- resuming normal operations
[Mon May 27 11:27:38.300296 2019] [core:notice] [pid 569972:tid 140126180117440] AH00094: Command line: '/usr/sbin/apache2'
[Mon May 27 11:27:38.303713 2019] [mpm_worker:alert] [pid 569975:tid 140126052628224] (11)Resource temporarily unavailable: AH03142: apr_thread_create: unable to create worker thread
[Mon May 27 11:27:38.359830 2019] [mpm_worker:alert] [pid 569973:tid 140126180117440] (11)Resource temporarily unavailable: AH00282: apr_thread_create: unable to create worker thread
[Mon May 27 11:27:38.371350 2019] [mpm_worker:alert] [pid 569974:tid 140126060156672] (11)Resource temporarily unavailable: AH03142: apr_thread_create: unable to create worker thread
[Mon May 27 11:27:40.302219 2019] [mpm_worker:alert] [pid 569972:tid 140126180117440] AH02325: A resource shortage or other unrecoverable failure was encountered before any child process initialized successfully... httpd is exiting!
Читая последнюю строчку в журнале, я предполагал, что apache сейчас мертв. Вместо top
дает мне использование процессора на 320% для Apache. Это работает вечно (по крайней мере, много дней). Читая первые строки в журнале, становится ясно, что после того, как apache делает вид, что завершает работу, он не может закрыть или убить какой-либо дочерний процесс по любой причине.
Гуглunable to create worker thread
привести меня к ограничениям ресурсов сервера и настройке правильных настроек apache2. Итак, Ulimit для www-данных:
root@xxx:~# sudo -u www-data bash -c 'ulimit -a'
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 1546431
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 105000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 10000
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 5
MaxSpareThreads 10
ThreadLimit 64
ThreadsPerChild 5
MaxRequestWorkers 100
MaxConnectionsPerChild 50
</IfModule>
VPS: 6core 2Ghz
RAM: 8GB
Usage: Only one domain/apache instance for Nextcloud.
Как я могу отлаживать то, что происходит с apache, после того, как он сказал, что он вышел, но это вызывает высокую загрузку процессора? (фиксация была бы еще лучше)
Как я могу настроить рабочие параметры в соответствии с вариантом использования? (я думаю, это и есть основная причина)
Любая помощь будет оценена по достоинству! Спасибо
В моем случае с Ubuntu 18.04 (и 20.04) и SystemD такая же ошибка:
Resource temporarily unavailable: AH03142: apr_thread_create: unable to create worker thread
Нет проблем с памятью, и ничего из описанного выше не решает нормально, только это работает для меня:
systemctl set-property apache2.service TasksMax=infinity
Просмотрите конфигурацию mpm_worker_module, чтобы определить, достаточно ли у вас памяти для создания настроенного количества потоков.
( ThreadLimit X ServerLimit ) X ThreadStackSize = Memory_Max (in bytes) <= System_Memory
Примечание. Значение ThreadStackSize по умолчанию зависит от других операционных систем. Вы можете проверить это с помощью ulimit -s в RHEL.
Просмотрите свой /etc/security/limits.conf и / или /etc/security/limits.d/90-nproc.conf чтобы увидеть, нужно ли увеличить лимит процесса.
Следующее покажет вам, сколько процессов запущено httpd worker.
ps -elf | grep httpd | grep -v grep | wc -l
Если он превышает параметр nproc в вашем etc / security / limits.conf, вы не можете создать достаточно процесса (недостаточно ресурсов) для продолжения. См. Примечания ulimit о том, как увеличить настройку.
Наиболее частые причины такой проблемы:
Not enough memory to create a new thread.
Not enough resources to create a new thread (files, process limits)
Алгоритм просмотра максимальной памяти Apache (для потоков) ThreadStackSize указывается в байтах.
( ThreadLimit X ServerLimit ) X ThreadStackSize = Memory_Max in bytes
Уменьшение ServerLimit и / или ThreadsPerChild уменьшит общее количество требуемых потоков, поэтому следует избегать ошибки (в зависимости от доступного ресурса)