2010-02-05 3 views
7

У меня есть веб-приложение Java/Java EE, развернутое на Tomcat Server 5.5.17. Я хочу знать количество клиентов, подключенных к серверу. Как мы можем это узнать?Узнайте количество подключений к серверу tomcat

+0

Что вы подразумеваете под "connected"? Если вы не «поддерживаете» их, HTTP-соединения не являются постоянными. –

ответ

15

Наиболее надежным способом будет искать ip.addr.of.srv:port в netstat. Вот пример, основанный для Windows (к сожалению, не Linux гуру здесь;))

netstat -np tcp | find "12.34.56.78:80"

Заменить 12.34.56.78 по IP, где Tomcat прослушивает и 80 портом, где Tomcat прослушивает.

Это на самом деле не проблема программирования, поэтому я проголосовал за перенос этого вопроса на serverfault.com.

+0

Я использую Apache Geronimo и отображает на веб-консоли количество текущих занятых потоков (а не сеансов), поэтому он программируется. Для вашего решения вы должны иметь netstat -np tcp | найти "12.34.56.78:80" | найдите «ESTABLISHED», чтобы вы не включали незафиксированные состояния, такие как FIN_WAIT, SYN_SENT и т. д. – ericp

+0

count (threads)! = count (connections). Могут существовать средства threadpool и/или потоков, используемые для других целей (демоны, фоновые задачи, очистка и т. Д.). Что касается ваших предложений netstat, это имеет смысл. – BalusC

+5

Я сделал это в CentOS с '' '' netstat -an | grep: 80 | wc -l'''', как описано в этой статье [https://www.exchangecore.com/blog/find-number-active-connections-linux-using-netstat/) – AntonioOtero

2

См. Раздел под номером Tomcat Manager для примера подсчета сеансов в webapp.

Подсчет количества подключений, вероятно, немного сложнее. Tomcat запускает новый поток для каждого запроса, поступающего до максимума «maxProcessors». Помимо этого числа, запросы ставятся в очередь до максимума «acceptCount». Запросы за пределами этого числа отклоняются/удаляются (или сбой, я не уверен). Свойства можно отслеживать с помощью JConsole - steps here. Специфические свойства, упомянутые выше, являются свойствами HTTP Connector.

EDIT 1: После просмотра исходного кода CoyoteConnector и AJP Connector существует частное свойство curProcessors, которое отслеживает количество используемых в настоящее время процессоров. Однако добавление переменной curProcessors в файл mbeans для соединителей, похоже, не отображает текущее значение на дисплее JConsole.
Примечание: XML-файл mbeans, который я модифицировал, был в tomcat \ server \ lib \ catalina.jar и находится в каталоге org \ apache \ catalina \ connector в банке. Ниже приведен пример записи я добавил:
<attribute name="curProcessors" description="the number of processors currently in use" type="int"/>

+0

Можете ли вы рассказать мне разницу между количеством сеансов и количеством подключений? Я думаю, мне нужно знать количество подключений к серверу tomcat. – Thunderhashy

+1

Я цитирую из API docs- Сессия. Предоставляет способ идентифицировать пользователя через более чем один запрос страницы или посещать веб-сайт и хранить информацию об этом пользователе. Сеанс сохраняется в течение определенного периода времени, через более одного соединение или запрос страницы от пользователя. В принципе, пользователь может иметь 1 сеанс и несколько соединений для разных запросов. Или, если вы рассматриваете страницу, загружающую разные разделы с использованием запросов AJAX, загрузка каждого раздела создаст другое соединение с сервером при использовании того же сеанса (если есть). – Thimmayya

2

И если вам нужно понять, чтобы то, что делает каждое соединение, использовать это на Linux

netstat -an | grep :8080 | awk '{print $6}' 

Если есть три соединения, вы увидите

СЛУШАТЬ TIME_WAIT TIME_WAIT

И если вы хотите только подсчитать соединения, которые находятся в состоянии TIME_WAIT

netstat -an | grep :8080 | grep TIME_WAIT | wc -l 
Смежные вопросы