记一次线上tomcat访问慢的排查过程

排查步骤

top命令

使用top命令查看cpu使用率发现cpu使用率并不高

导出jvm栈的使用情况

jvm栈内存足够使用,并且并未抛出溢出的异常

查看当前进程的线程数(ps -T -p pid |wc -l)

线程数为295(偏高),于是查看线上tomcat配置的最大线程数(在server.xml中配置),发现线上tomcat使用的默认的配置(maxThreads:150,acceptCount:100),经此判断很有可能是最大线程数的问题

解决方法

因cpu以及jvm内存现都足够使用,将tomcat的maxThreads改为300,acceptCount改为150(在server.xml中配置),修改后发现线程数稳定在320左右并且系统运行良好。

tomcat问题排查经常使用的命令

  • 导出jvm栈使用情况:
    jmap -heap pid>> jvm_memory.log
    jmap -histo pid> jvm_jmap.log
  • 查看端口下连接数(状态为ESTAB )
    netstat -na | grep ESTAB | grep 端口 | wc -l
  • 查看总连接数(状态为ESTAB )
    netstat -na | grep ESTAB | wc -l
  • 查看java线程数(如linux下有多个java进程,那么这个是这几个进程总共的线程数)
    ps -efL |grep java|wc -l
  • 查看tomcat已用线程数(默认maxThreads:150,acceptCount:100,共支持250个连接,超过报错,不超过请求在acceptCount等待)
    ps aux |grep tomcat(找到tomcat进程的pid)、ps -T -p pid |wc -l(查询进程下的线程数)
  • 查询当前整个系统已用的线程或进程数
    pstree -p | wc -l
  • 整个系统已用的线程或进程数
    cat /proc/sys/kernel/pid_max
  • 查看系统总open files的消耗情况:cat /proc/sys/fs/file-nr

cat /proc/sys/fs/file-nr
22048 0 3254456
第一列表示已打开的句柄数
第二列表示已分配但是未使用的句柄数
第三列表示系统总的句柄数,即 file-max

  • 单个进程的open files
    ulimit -n
  • 查看某一个进程的文件打开数量
    lsof -p pid | wc -l
    如当前进程文件打开数量超过系统配置的最大数量时会报错
  • 查看系统总连接数
    netstat -ant|awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}’
    这个连接数可能会比实际的连接数要大,因为linux是定时清理连接的,当一个连接因两方关闭或超时断开时要到linux清理连接时才能被回收,这个时间是可以配置的
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a_sunny_a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值