Getting a list of active sessions in Tomcat using Java

Кажется, что, оборачивая запрос (объект BoolQueryBuilder), передавая его в качестве аргумента boolQuery (). Filter (..), а затем устанавливая его в setQuery (), как вы предложили, - тогда это может быть достигнутым. Клавиша «оценка» в ответе всегда 0 (хотя документы найдены)

Будьте осторожны! Если оценка равна 0, оценка была рассчитана. Это означает, что запрос все еще находится в контексте запроса, а не в контексте фильтра. В контексте фильтра оценка устанавливается на 1,0 (без расчета) источник

Чтобы создать запрос в контексте фильтра без расчета оценки (оценка = 1,0), выполните следующие действия (возможно, имеется еще лучше?):

QueryBuilder qb = QueryBuilders.constantScoreQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", "blub)));

Это возвращает те же результаты, как:

GET /indexName/typeName/_search 
    {
      "filter": {
        "query": {
          "bool": {
            "must": [
              { "match": {
                "name": "blub"
              }}
            ]
          }
        }
      }
    }
23
задан Jasper 23 February 2012 в 08:20
поделиться

3 ответа

Если вам не нужны значения в реальном веб-приложении, может помочь скрипт groovy:

import javax.management.remote.*
import javax.management.*
import groovy.jmx.builder.*

// Setup JMX connection.
def connection = new JmxBuilder().client(port: 4934, host: '192.168.10.6')
connection.connect()

// Get the MBeanServer.
def mbeans = connection.MBeanServerConnection

def activeBean = new GroovyMBean(mbeans, 'Catalina:type=Manager,host=localhost,context=/')
println "Active sessions: " + activeBean['activeSessions']

Если вы хотите использовать реальные сессии, у вас есть методы для их получения, например:

def sessions = activeBean.listSessionIds().tokenize(' ');
2
ответ дан 29 November 2019 в 01:51
поделиться

Нет способа получить счетчик сеансов напрямую от tomcat. Но вы можете создать и зарегистрировать слушатель сеанса и увеличить счетчик при его создании. Вот пример:

http://tomcat-configure.blogspot.com/2009/01/tomcat-session-listener-example.html

public class SessionCounter implements HttpSessionListener {

  private static int activeSessions = 0;

  public void sessionCreated(HttpSessionEvent se) {
    activeSessions++;
  }

  public void sessionDestroyed(HttpSessionEvent se) {
    if(activeSessions > 0)
      activeSessions--;
    }

  public static int getActiveSessions() {
     return activeSessions;
  }
}
15
ответ дан 29 November 2019 в 01:51
поделиться

Вы можете присоединить jolokia jvm agent к запущенному tomcat и запросить атрибут activeSessions из соответствующих MBeans с помощью curl.

java -jar agent.jar start [TOMCAT-PID]
curl 'http://127.0.0.1:8778/jolokia/read/Catalina:context=*,host=*,type=Manager/activeSessions'
java -jar agent.jar stop [TOMCAT-PID]

Это даст вам что-то вроде

{  
   "request":{  
      "mbean":"Catalina:context=*,host=*,type=Manager",
      "attribute":"activeSessions",
      "type":"read"
   },
   "value":{  
      "Catalina:context=\/SampleApp,host=localhost,type=Manager":{  
         "activeSessions":1
      }
   },
   "timestamp":1553105659,
   "status":200
}
0
ответ дан 29 November 2019 в 01:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: