Назад | Перейти на главную страницу

Полная загрузка ЦП Apache2 после выхода с ошибкой (`` невозможно создать рабочий поток '')

У меня экземпляр 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-данных:

Ulimit для Apache

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

mpm_worker.conf

<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.

# 1

Как я могу отлаживать то, что происходит с apache, после того, как он сказал, что он вышел, но это вызывает высокую загрузку процессора? (фиксация была бы еще лучше)

# 2

Как я могу настроить рабочие параметры в соответствии с вариантом использования? (я думаю, это и есть основная причина)

Любая помощь будет оценена по достоинству! Спасибо

В моем случае с 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 уменьшит общее количество требуемых потоков, поэтому следует избегать ошибки (в зависимости от доступного ресурса)