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

Что заставляет Apache httpd (+ mod_proxy_ajp) сбрасывать соединения

У меня настроен следующий VirtualHost (Apache 2.2.22)

<VirtualHost *:80>
    ServerName ************

    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ErrorLog /var/log/apache2/dalo-lt_error_log
    LogLevel warn
    TransferLog /var/log/apache2/dalo-lt_access_log

    ProxyPass / ajp://localhost:8009/
    ProxyPassReverse / ajp://localhost:8009/

    <Location />
        Order allow,deny
        Allow from all
    </Location>

</VirtualHost>

Со следующим в моем Tomcat server.xml (7.0.39)

<Connector port="8009" protocol="AJP/1.3"
           redirectPort="8443"
           connectionTimeout="60000"
           maxConnections="36864"
           maxThreads="600" />

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           maxConnections="36864"
           maxThreads="600"
           redirectPort="8443" />

Когда я запускаю свой стресс-тест через vhost: 80 + ajp, я начинаю видеть разорванные соединения после определенного момента. Однако, если я запускаю тест напрямую через http-коннектор tomcat (: 8080), я не вижу никаких обрывов соединений.

Как лучше всего определить причину этого?

Для полноты картины вот некоторые настройки из моего apache2.conf

<IfModule mpm_prefork_module>
    StartServers          10
    MinSpareServers       10
    MaxSpareServers      20
    MaxClients          500
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          4
    MinSpareThreads      50
    MaxSpareThreads      450
    ThreadLimit          256
    ThreadsPerChild      150
    MaxClients          300
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          4
    MinSpareThreads      50
    MaxSpareThreads      450
    ThreadLimit          256
    ThreadsPerChild      150
    MaxClients          300
    MaxRequestsPerChild   0
</IfModule>

Обновить: Запрос server-status?auto дает последующий в то время как во время фазы нагрузочного теста, когда запросы отбрасываются - поэтому мне кажется, что есть достаточно рабочих и т.д., чтобы сэкономить

Веб-сервер Apache начнет сбрасывать соединения, если он получает слишком много запросов. Вы можете использовать mod_status, чтобы посмотреть на табло, если оно заполнено, вы можете увеличить количество рабочих. (следует выяснить, подходит ли увеличенное количество рабочих для вашей среды)