java 线程执行缓慢_Java服务程序突然变慢,如何定位?

当Java服务出现执行缓慢的情况,首先排查网络问题,如使用speedtest测试网速。若网络正常,检查程序日志寻找异常信息,特别是Tomcat日志。进一步,测试服务响应时间和HTTP请求各阶段时间。最后,通过`top`、`jstack`等工具定位耗资源的线程,找出问题根源。
摘要由CSDN通过智能技术生成

检查网络是否存在问题

最先排查的原因就应该是网络问题,即外部因素。常见的着手方法是测试网速,这里推荐工具speedtest,当然类似的有很多:

1)安装:

$ wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py

$ chmod a+rx speedtest.py

$mv speedtest.py/usr/local/bin/speedtest

$chown root:root/usr/local/bin/speedtest

2)调用命令测试

$ speedtest

转自:https://blog.csdn.net/Beyond_F4/article/details/80497118

更深层次的网络问题排查可以参见:http://www.cnblogs.com/Security-Darren/p/4700387.html

2. 检查日志

首先检查程序日志,看有哪些异常被抛出,有没有类似内部错误的不正常的异常被抛出;

如果使用tomcat部署,还需检查tomcat的日志。

3. 测试响应时间

如果以上的都没有问题,可以再次测试程序响应时间,注意:主要是为了测试服务响应时间,即服务处理请求构造数据消耗的时间。

通过curl得到http各阶段的响应时间,这可以参考:https://blog.csdn.net/hqzxsc2006/article/details/50547684

#curl -o /dev/null -s -w %{http_code}:%{http_connect}:%{content_type}:%{time_namelookup}:%{time_redirect}:%{time_pretransfer}:%{time_connect}:%{time_starttransfer}:%{time_total}:%{speed_download} www.baidu.com

4. 定位线程

查看内存使用:top、free、ps、cat /proc/meminfo

查看磁盘使用:df -h ,例如日志写完等等

尝试查看定位到具体的线程查看原因:

1) ps -ef | grep java 找出最耗CPU的JAVA进程(一般就是服务进程引起)

2) top -Hp "进程ID" 找出最耗时间的JAVA线程

3) jstack "进程ID" | grep "线程ID"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值