查看服务器线程池的方法取决于具体的应用和服务,以下是几种常见场景的查看方法:
1. Java应用线程池
查看Java进程ID jps -l 生成线程转储 jstack <pid> > thread_dump.txt 或者直接查看 jstack <pid> | grep -A 10 -B 10 "ThreadPool"
图形化工具查看 jconsole <pid> 或 jvisualvm
查看线程池状态 thread --state RUNNABLE thread-pool
2. Tomcat线程池
<Connector port="8080" 
           maxThreads="200"
           minSpareThreads="10"
           maxConnections="10000"
           acceptCount="100"/>启动时开启JMX -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
3. 数据库连接池
-- 查看连接线程 SHOW PROCESSLIST; SHOW STATUS LIKE 'Threads_%'; -- 查看线程池配置 SHOW VARIABLES LIKE 'thread_handling'; SHOW VARIABLES LIKE 'thread_cache_size';
4. 系统级线程查看
查看所有线程 ps -eLf 查看特定进程的线程 ps -T -p <pid> 实时查看线程 top -H -p <pid> 查看线程数量 cat /proc/<pid>/status | grep Threads 统计线程数 ps -eLf | wc -l ps -o nlwp <pid>
5. Nginx线程池
worker_processes auto;
worker_rlimit_nofile 100000;
events {
    worker_connections 4096;
    use epoll;
    multi_accept on;
}查看nginx进程 ps -ef | grep nginx 查看线程 pstree -p <nginx_master_pid>
6. 自定义监控脚本
#!/bin/bash
monitor_threadpools.sh
echo "=== 系统线程统计 ==="
echo "总线程数: $(ps -eLf | wc -l)"
echo "按进程统计:"
ps -eo pid,nlwp,comm --sort -nlwp | head -10
echo -e "\n=== Java进程线程池 ==="
for pid in $(jps -q); do
    echo "进程 $pid 线程数: $(ps -o nlwp -p $pid | tail -1)"
    jstack $pid 2>/dev/null | grep -c "java.util.concurrent.ThreadPoolExecutor" | \
    xargs echo "  线程池数量:"
done7. 使用专业监控工具
- 配置应用暴露线程池指标
- 使用JMX Exporter监控Java应用
使用htop查看线程 htop 使用atop监控 atop 使用pidstat监控线程 pidstat -t -p <pid> 1 10
注意事项
1、生产环境谨慎使用 jstack,可能引起短暂停顿
2、线程池配置通常与应用配置文件相关
3、监控时注意区分用户线程和系统线程
4、合理设置线程池参数避免资源耗尽
选择合适的方法取决于你的具体应用类型和环境配置。
文章摘自:https://idc.huochengrm.cn/fwq/19395.html
评论