欢迎光临石四片叶子网
详情描述

一、通过Tomcat管理界面(Manager App)

前提:需要启用manager应用并配置用户权限

访问地址

http://<host>:<port>/manager/status

查看连接信息

  • Max threads:最大线程数
  • Current thread count:当前线程数
  • Current thread busy:繁忙线程数
  • Keepalive count:保持连接的计数

二、通过JMX监控

1. 启用JMX远程监控

catalina.shstartup.sh 中添加JVM参数:

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote
  -Dcom.sun.management.jmxremote.port=9000
  -Dcom.sun.management.jmxremote.ssl=false
  -Dcom.sun.management.jmxremote.authenticate=false"

2. 使用JConsole或VisualVM连接

  • 连接地址:service:jmx:rmi:///jndi/rmi://<host>:9000/jmxrmi
  • 查看路径:Catalina -> ThreadPool -> http-*ajp-*

3. 使用JMX命令行工具

# 使用jmxterm
echo "get -b java.lang:type=Threading ThreadCount" | java -jar jmxterm.jar -l localhost:9000

# 或使用cmdline-jmxclient
java -jar cmdline-jmxclient-0.10.3.jar localhost:9000 java.lang:type=Threading ThreadCount

三、通过命令行工具

1. 使用netstat(Linux)

# 查看Tomcat所有连接
netstat -anp | grep <tomcat_pid> | grep -E ':(8080|8009)' | wc -l

# 按状态统计
netstat -anp | grep <tomcat_pid> | grep :8080 | awk '/^tcp/ {print $6}' | sort | uniq -c

# 实时监控脚本
watch -n 1 "netstat -an | grep :8080 | wc -l"

2. 使用ss命令(Linux)

ss -s | grep -A 1 'Total:'  # 查看总连接数
ss -ant | grep :8080 | wc -l  # 查看特定端口连接数

四、通过Tomcat自带脚本

1. 使用probe或psi-probe

部署第三方管理工具,提供更详细的监控信息。

2. 自定义监控Servlet

@WebServlet("/monitor/connections")
public class ConnectionMonitorServlet extends HttpServlet {

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {

        // 获取连接器信息
        Connector[] connectors = ((StandardService) 
            StandardServer.getServer().findServices()[0]).findConnectors();

        JSONObject result = new JSONObject();
        for (Connector connector : connectors) {
            ProtocolHandler handler = connector.getProtocolHandler();
            if (handler instanceof AbstractProtocol) {
                AbstractProtocol<?> protocol = (AbstractProtocol<?>) handler;
                result.put(connector.getProtocol(), new JSONObject()
                    .put("maxConnections", protocol.getMaxConnections())
                    .put("currentConnections", 
                         protocol.getHandler().getGlobalRequestProcessor().getConnectionCount())
                    .put("maxThreads", protocol.getMaxThreads())
                    .put("currentThreadsBusy", protocol.getCurrentThreadsBusy())
                    .put("currentThreadCount", protocol.getCurrentThreadCount()));
            }
        }

        resp.setContentType("application/json");
        resp.getWriter().write(result.toString());
    }
}

五、使用监控工具

1. Prometheus + JMX Exporter

配置 jmx_exporter

lowercaseOutputName: true
rules:
  - pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)"><>(currentThreadCount|currentThreadsBusy|maxThreads):'
    name: tomcat_threads_$2
    labels:
      pool: "$1"
  - pattern: 'Catalina<type=GlobalRequestProcessor, name="(\w+-\w+)"><>(requestCount|errorCount|bytesSent|bytesReceived):'
    name: tomcat_$2_total
    labels:
      processor: "$1"

2. 使用Micrometer

@Configuration
public class MetricsConfig {

    @Bean
    public MeterBinder tomcatMetrics() {
        return new TomcatMetrics();
    }
}

六、通过日志分析

server.xml 中配置访问日志:

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="localhost_access_log"
       suffix=".txt"
       pattern="%h %l %u %t &quot;%r&quot; %s %b %D %T" />
  • %D:处理请求时间(毫秒)
  • %T:处理请求时间(秒)

七、实用脚本示例

实时监控脚本

#!/bin/bash
# monitor_tomcat_connections.sh

TOMCAT_PORT=8080
PID=$(pgrep -f "catalina")

while true; do
    TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
    TOTAL_CONNS=$(netstat -an | grep :$TOMCAT_PORT | wc -l)
    ESTABLISHED=$(netstat -an | grep :$TOMCAT_PORT | grep ESTABLISHED | wc -l)
    TIME_WAIT=$(netstat -an | grep :$TOMCAT_PORT | grep TIME_WAIT | wc -l)

    echo "$TIMESTAMP | Total: $TOTAL_CONNS | Established: $ESTABLISHED | Time-Wait: $TIME_WAIT"

    # 如果使用NIO/APR,可以获取更多信息
    if [ -n "$PID" ]; then
        THREADS=$(ps -o nlwp= $PID | tr -d ' ')
        echo "  PID: $PID | Threads: $THREADS"
    fi

    sleep 5
done

八、关键指标说明

指标 说明 健康标准
maxThreads 最大工作线程数 根据服务器配置调整
currentThreadCount 当前线程数 < 90% maxThreads
currentThreadsBusy 繁忙线程数 < 70% maxThreads
connectionCount 当前连接数 < maxConnections
keepAliveCount 保持活动连接数 根据业务调整

建议方案

开发环境:使用Tomcat Manager或简单脚本 测试环境:配置JMX + JConsole 生产环境
  • 使用Prometheus + Grafana持续监控
  • 配置告警规则
  • 定期分析访问日志

选择哪种方式取决于你的具体需求、环境配置和安全要求。

相关帖子
除了基本工资,还有哪些容易被忽略的津贴和奖金项目值得关注?
除了基本工资,还有哪些容易被忽略的津贴和奖金项目值得关注?
领取失业保险期间,如果计划跨城市寻找工作机会,相关手续该如何办理?
领取失业保险期间,如果计划跨城市寻找工作机会,相关手续该如何办理?
宣城市附近银行信贷&抵押车子借款,房产红本银行抵押贷款
宣城市附近银行信贷&抵押车子借款,房产红本银行抵押贷款
宣城市专业网站开发建设&营销网站建设,服务可靠
宣城市专业网站开发建设&营销网站建设,服务可靠
古代灭火工具演变史:从水桶到现代灭火器的进步
古代灭火工具演变史:从水桶到现代灭火器的进步
未来社区将如何构建更完善的长期照护体系来支持居家养老?
未来社区将如何构建更完善的长期照护体系来支持居家养老?
琼海市贷款公司电话&正规借款公司,住房一押二押银行贷款
琼海市贷款公司电话&正规借款公司,住房一押二押银行贷款
社区居民对于无人机在头顶频繁飞行配送,是否拥有知情权与选择权?
社区居民对于无人机在头顶频繁飞行配送,是否拥有知情权与选择权?
未来元宇宙中,虚拟身份识别系统将如何构建以确保安全与可信?
未来元宇宙中,虚拟身份识别系统将如何构建以确保安全与可信?
面对物价波动,2026年个人该如何调整消费习惯以优化现金流?
面对物价波动,2026年个人该如何调整消费习惯以优化现金流?
聊城市押车大本贷款@房子抵押贷款,公司信用贷款
聊城市押车大本贷款@房子抵押贷款,公司信用贷款
晋江市房产商业银行抵押贷款&房子抵押贷款利息多少,附近信用贷款办理
晋江市房产商业银行抵押贷款&房子抵押贷款利息多少,附近信用贷款办理
配料表中常见的植物油、起酥油,它们对食品的营养价值有何影响?
配料表中常见的植物油、起酥油,它们对食品的营养价值有何影响?
石家庄市个人应急信用贷款&正规借款公司,房产商业银行抵押贷款
石家庄市个人应急信用贷款&正规借款公司,房产商业银行抵押贷款
台州品牌网站制作设计%app开发,小程序开发
台州品牌网站制作设计%app开发,小程序开发
公共场所如商场或影院发生火灾,正确的疏散路线选择应遵循什么原则?
公共场所如商场或影院发生火灾,正确的疏散路线选择应遵循什么原则?
回顾过去十年,我国最低工资标准的增长趋势呈现出哪些阶段性特点?
回顾过去十年,我国最低工资标准的增长趋势呈现出哪些阶段性特点?
漯河市汽车抵押借款@房屋抵押贷款公司,办理抵押贷款
漯河市汽车抵押借款@房屋抵押贷款公司,办理抵押贷款
智能家居设备在2026年能否帮助我们更好地隔离或适应夜间施工噪音?
智能家居设备在2026年能否帮助我们更好地隔离或适应夜间施工噪音?