大家有没有碰到过访问web网站或者web应用时,发现一直转圈圈就是打不开,或者好久才能打开,当然这种情况平时很少碰到。
但也有特定的时候会碰上,例如在春运时,买火车票,在刚放票的时候,大家一定遇到过下面这种情况。
或者在双十一凌晨淘宝购物时,这个界面想必大家一定不陌生。
上面的问题主要在于流量太大,但中间件却来不及处理造成的,用到的中间件不一定是weblogic,但总体解决思路还是一样的。
下面我们看看某政府机关部署在weblogic上的应用,也碰到类似上面这种情况,经常不能打开网页时的解决办法。
解决思路:
首先看一下weblogic中间件的日志,检查domain下servers/服务名/logs/服务名.log,检查发现有很多stack日志,如下图所示:
根据日志,线程10分钟没处理完就触发stack情况,那么我们需要去排查下哪些线程发生了stack,登录控制台http://ip:7001/console。
weblogic的管理控制台默认是7001,这个端口在管理服务启动日志中也可以看出来,如下面:
启动完成的running上面就有显示ip和端口。在控制台的server中,发现很多warning告警。
这些告警都是由于部分线程处理超过10分钟未中断,导致告警,并导致线程堆积,后续访问数据返回异常或超时。
有队列堆积后,在访问网站时就出现转圈圈现象,除非积压队列处理完,轮到处理我们访问的请求。既然有堆积就说明来不及处理,像上面执行的线程总数才158,这说明线程数分配不够,通过“ps -ef|grep java”发现配置参数里只有内存配置“-Xms4096m -Xmx4096m -XX:-UseParallelGC -XX:PermSize=980m -XX:MaxPermSize=980m”,并没有线程数配置,所以线程数就是默认大小,达到158就上不去了。
另外stack线程太多,这些stack线程都没有释放。点击线程“粘滞”安排进行排序,如下:
把粘滞为true的排到前面来,粘滞为true说明这些进程处理了10分钟还没有处理完成,这个粘滞时间为什么是10分钟呢,我们可以看一下超载配置,在“服务器-服务名称-超载”,有个最长线程粘滞时间,这个默认配置就是600秒,刚好10分钟,如下图:
这个配置主要用来超过这个时间做告警用,所以有stack告警,就需要检查这个线程的逻辑情况。
通过上面线程情况,我们发现,全部都是下面这个线程超时卡住了。
接下来,我们最多只要把线程连接数加上去一些,剩下的就只要联系开发对该线程进行优化处理就好了,如果应用不优化,线程连接数不管增加多少也会耗尽的,上面就是weblogic中间件问题处理排查思路。
美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。
来源:freebuf.com 2020-06-02 16:06:38 by: database
请登录后发表评论
注册