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

Оптимизируйте Apache для одновременных запросов с большим количеством запросов

Я использую сервер Apache2 Ubuntu, который обслуживает запросы API от мобильных приложений.

Недавно я столкнулся с проблемой: когда запрос становится выше (больше одновременных пользователей), ответ на запрос становится медленным. Ранее ~ 1 или 2 секунд, но как только количество одновременных пользователей увеличится (в определенный час пик), это может задержать до 10 секунд или больше, даже если сервер загружен, ЦПУ и объем памяти остается очень низким.

Моя цель - повысить способность Apache2 и Ubuntu Server обслуживать как можно больше одновременных пользователей при минимальном времени отклика. В память и процессор не являются основными факторами рассмотрения поскольку спецификация VPS может быть увеличена, если она достигнет предела. Как я могу это сделать?

Что я сделал до сих пор:

  1. Настроить ulimit /etc/security/limits.conf и добавьте следующее:

    • soft nofile 40000
    • жесткий файл 40000
    • мягкий nproc 40000
  2. Добавьте следующую строку в /etc/pam.d/common-session

    требуется сеанс pam_limits.so

  3. Настроить Apache2 /etc/apache2/mods-enabled/mpm_prefork.conf

    <IfModule mpm_prefork_module>
            StartServers              20
            MinSpareServers           25
            MaxSpareServers          100
            MaxRequestWorkers         150
            MaxConnectionsPerChild   0

            MaxClients              8192
            MaxRequestsPerChild     0
            ServerLimit             8192
     </IfModule>
  1. Добавьте следующую строку в /etc/sysctl.conf

    fs.file-max = 2097152

Кажется, что время отклика улучшилось (хотя некоторые запросы все еще задерживаются), но неудовлетворительно, так как оно по-прежнему намного медленнее, чем в непиковые часы.

Прекратите использовать модуль prefork и начните использовать событие mpm в apache. Prefork - это старый метод, и в дальнейшем вы хотите установить событие mpm.

Это может быть не ваш веб-сервер, а что-то еще в цепочке.

  1. DNS. В ситуации, когда явно не база данных, велика вероятность, что это DNS. Выполните nslookup и посмотрите, сколько времени занимает команда. Затем найдите несколько доменов.
  2. Это сеть, сделайте traceroute и посмотрите, не занимают ли какие-либо переходы в вашей сети больше времени, чем обычно.
  3. Netstat -i 5 чтобы увидеть, есть ли ошибки в сетевом интерфейсе.
  4. Удостовериться KeepAlive горит. Особенно, если у вас что-то вроде сайта с тяжелым ajax, вы улучшите производительность.

Я не верю, что переключение MPM вам поможет. Ваша ситуация не ограничена ресурсами. это что-то еще.