У меня есть сервер с 2 процессорами объемом 3,5 ГБ, работающий на tomcat / apache с mod.jk. Мы видим, что у нашего сервера много доступной памяти, а tomcat не показывает ничего сумасшедшего с точки зрения GC.
Мы пробовали разные настройки для maxClients maxThreads и socket_timeout в worker.properties.
мы усредняем около 4000 одновременных пользователей, немного сложно оценить количество запросов в секунду, но я бы сказал, что это, вероятно, 400 (просто предположение).
Должны ли maxThreads в tomcat всегда быть больше, чем maxClients в httpd? и если да, то насколько.
Мы пробовали maxClients на 250 и maxThreads на 300, и мы наблюдали медлительность в сети, но сервер выглядел нормально.
Также наш средний размер httpd составляет 10 мг.
Любая помощь была бы замечательной!
Спасибо
Вы не говорите, какой MPM вы используете или какую версию Tomcat, поэтому я не могу быть настолько точным, как хотелось бы.
По умолчанию AJP использует постоянные соединения. Следовательно, по умолчанию Tomcat требуется как минимум столько же потоков в его пуле, сколько httpd имеет maxClients. Это, как правило, очень неэффективно, так как большинство этих подключений простаивают.
Есть несколько способов улучшить ситуацию:
Переключитесь на разъем NIO AJP, если он доступен (начиная с Tomcat 7). Вам необходимо настроить коннектор Tomcat AJP с maxThreads> ожидаемыми одновременными запросами.
Отключите повторное использование соединения на стороне httpd. С mod_jk это означает использование
JkOptions + DisableReuse
Не обращайте внимания на предупреждения в документации о снижении производительности - они неверны. Вам по-прежнему необходимо настроить коннектор Tomcat AJP с maxThreads> ожидаемых одновременных запросов.
Подробнее см. моя обратная прокси-презентация и Заметки Райнера в теме.