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

Слишком много сайтов на apache

У меня есть сервер со слишком большим количеством виртуальных хостов, около 500 виртуальных хостов, половина из которых с SSL.

Все эти хосты обслуживаются с помощью mod_wsgi для приложений Django.

Я замечаю, что после определенного количества виртуальных хостов весь мой сервер перестает работать и все сайты выходят из строя, я могу справиться с этим, уменьшив количество потоков для каждого виртуального хоста с помощью этой строки:

WSGIDaemonProcess my.domain python-home=/var/www/env python-path=/var/www/my_app threads=1

Apache выдает сбой при достижении около 1300 потоков (когда я проверяю htop). Журнал ошибок apache показывает, что модуль Django не найден, но это не настоящая ошибка, потому что все в порядке, просто происходит, когда количество vhosts слишком велико. Поэтому я думаю, что достигаю какого-то предела с процессами или потоками в Linux. Я использую Ubuntu 18.04, Apache 2.4, и у меня достаточно ОЗУ и ЦП, на сервере 4 ГБ ОЗУ и используется всего 2 ГБ, средний ЦП составляет от 10 до 20%.

Я еще проверяю максимальное количество потоков с помощью:

cat /proc/sys/kernel/threads-max
30893

Что я могу сделать, чтобы увеличить емкость виртуальных хостов в моем apache без создания другого сервера.

1. Возможно, у вас открыто больше файлов, чем вы думаете. Способ сказать (приблизительно):

lsof -u www-data | wc -l

2. попробуйте увеличить размер стека. Посмотрите, сколько тока с

ulimit -s

и установите новое значение с помощью

ulimit -s значение


пс. попробуйте эти настройки для возможности 100k потоков:

ulimit -s 256

ulimit -i 120000

эхо 120000> / proc / sys / kernel / thread-max

эхо 600000> / proc / sys / vm / max_map_count

эхо 200000> / proc / sys / kernel / pid_max

/etc/systemd/logind.conf: UserTasksMax = 100000

На вашем месте, учитывая такое количество виртуальных хостов, я бы разделил эту нагрузку между как минимум парой серверов, используя балансировщик нагрузки и обратный прокси.