Освобождение памяти httpd происходит медленно

Я использую httpd с модом jk 1.2.28 на RHEL5. За httpd у меня работает tomcat. Подключение с httpd к tomcat осуществляется через коннектор ajp с помощью modjk. Я просто нагрузочно тестирую httpd. Используя JMeter, когда я создаю 2000 пользователей за 120 секунд из двух разных JVM одновременно, использование памяти httpd становится высоким, и когда все соединения освобождаются медленно, высвобождение памяти httpd происходит очень медленно. Иногда мне нужно перезапустить процесс httpd. Когда я перезапускаю httpd, использование памяти сразу же снижается. Что мне делать, чтобы ускорить освобождение памяти httpd без перезапуска процесса httpd? Есть ли какой-либо атрибут для достижения этого в worker.properties и httpd.conf?

Пожалуйста, помогите.

Заранее спасибо :)


person user1180463    schedule 04.10.2012    source источник
comment
Почему вам нужно перезапустить процесс httpd? Что произойдет, если вы этого не сделаете?   -  person David Schwartz    schedule 04.10.2012
comment
Иногда бывает так, что запрос не перенаправляется на сервер приложений. Это требует перезапуска httpd.   -  person user1180463    schedule 04.10.2012
comment
Ааа, так вы сделали какие-либо устранение неполадок по фактической проблеме? В логах есть что-нибудь? Можете ли вы воспроизвести проблему в тестовых условиях? Если да, то какие условия вызывают его?   -  person David Schwartz    schedule 04.10.2012
comment
Когда я увеличиваю нагрузку на веб-сервер, скажем, 2000 пользователей за 120 секунд с двух машин, использование памяти httpd становится высоким (как и ожидалось), но когда соединения освобождаются (netstat показывает 0 установленных TCP-соединений на порту 8009) , память освобождается очень медленно. Также иногда наблюдается, что httpd не отвечает и приходится перезапускать httpd, который тут же освобождает память   -  person user1180463    schedule 04.10.2012
comment
Можете ли вы выбрать ту или иную проблему? Очень сложно говорить о двух разных вещах одновременно. Мы можем работать над памятью или над невосприимчивостью, но если у вас нет причин думать, что они связаны, попытка говорить об обоих сразу приведет всех в замешательство. Почему бы не сосредоточиться на том, что на самом деле вызывает у вас проблемы?   -  person David Schwartz    schedule 04.10.2012
comment
Собственно, я хочу, чтобы при освобождении соединения сразу же освобождалась и память. Это не вызовет большого увеличения памяти, что является основной причиной того, что httpd перестает отвечать на запросы.   -  person user1180463    schedule 04.10.2012
comment
Когда вы говорите память, вы имеете в виду физическую память или виртуальную память? Кроме того, как вы установили связь между невосприимчивостью и использованием памяти? Можете ли вы воспроизвести отсутствие отклика в тестовых условиях? Если да, то какие условия вызывают его?   -  person David Schwartz    schedule 04.10.2012
comment
Я имею в виду физическую память. поскольку мы создаем ряд подключений, которые потребляют много памяти, поэтому httpd не остается памяти для ответа   -  person user1180463    schedule 04.10.2012
comment
Если это ваша проблема, более быстрое освобождение физической памяти только усугубит ситуацию, поскольку у процесса будет меньше физической памяти для работы. Освобождение физической памяти означало бы, что процесс http должен либо повторно получить ее, что требует больше работы, либо обойтись меньшим объемом памяти, что сделает его менее эффективным.   -  person David Schwartz    schedule 04.10.2012


Ответы (1)


Одно интересное мое наблюдение -

При низком значении, скажем, 200 для maxThread в tomcat server.xml, httpd перестает отвечать на запросы, и мне нужно перезапустить httpd после запуска нагрузочного теста jmeter. Память не освобождается автоматически после завершения теста, соединения на 8009 CLOSE_WAIT

С высоким значением, скажем, 2000 maxThread в tomcat server.xml, нет необходимости перезапускать httpd после выполнения нагрузочного теста JMeter, поскольку память освобождается автоматически после завершения теста. Соединения на 8009 LAST_ACK

Мой httpd.conf выглядит следующим образом. Я не понимаю, какой из этих двух MPM используется. Соответственно мне нужно модифицировать значение MaxClient. Пожалуйста, помогите, я не хочу перезапускать httpd, и мне не нужно высокое значение для maxThread.

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
person user1180463    schedule 04.10.2012
comment
Установите для socket_timeout соответствующее значение в work.properties. - person user1180463; 04.10.2012
comment
Уменьшите значение MaxClient в httpd.conf - person user1180463; 08.10.2012