【现象】:应用响应慢,被监控脚本重启;应用负载低、访问压力小。
【原因分析】:
1、使用netstat -na|wc -l查看连接数,连接数正常
2、使用kill -3 PID,查看生成的jvm_xxx.log,看java正在做什么,看是否正常
如:
化妆品库,在应用被监控脚本重启前生成的jvm LOG中有如下信息
统计发现,有230多个线程都在运行此任务;
Resin只配置了256个线程,这个请求占用的线程过多,Resin没办法去处理别的请求,引起请求超时。
3、这些请求是什么,为什么会这么多呢,从业务上查看了解到,这个请求是化妆品库这个应用去请求快搜的一个接口(使用httpclient方式),把拿回来的数据进行格式化后在前台显示。
4、Httpclient方式,每个请求都需要占用一个线程,当一个请求完成后线程才会被重用,当被调用的系统响应较慢时,会导致调用它的应用本身的线程占用过多,没资源提供其它服务。
【解决方案】:
调整应用使用httpclient方式调用其它资源的方法,改为别的方式或增加缓存减少调用次数。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/193506.html