Java web 系统变慢分析
1.排查是否是客户网络问题,如果多用户多地反馈,应该是服务器端问题。
2.系统是否多模块都变慢,可查看数据库是否有锁等待。访问一个单表的模块进行排除,db2数据库的话可以使用 db2top -d dbname 进行查看。使用数据库客户端工具验证数据库。还需要从应用主机ping数据库主机,查看是否有超时。
3.服务器性能监控,以linux为例,使用top命令,查看系统负载是否过高,swap是否在持续增加。
4.如果负载高查看最耗费cpu的进程,top界面输入:大P回车,按照内存排序:大M
5.查看磁盘IO,磁盘是否满了 ,df -h。
iostat -d -x -k 1 1 如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,%idel CPU 空闲时间百分比,小于70%,说明io高。
6.使用java 命令,查看某个进程的哪些线程使用的cpu 较高。
top -H -p <pid> 此top命令 ,输入F后 可设定排序的列。
printf '%x\n' <pid> 把pid 转换成16进制的nid
jstack <pid> | grep '<nid>' -C5 -color 查找该线程的堆栈信息
jstack <pid> > jstack.log 把整个jstack 日志重定向到log 文件中。
cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c 统计WAITING TIMED_WAITING BLOCKED 的个数. 如果waiting 类特别多,多半是有问题的。
- 点赞
- 收藏
- 关注作者
评论(0)