您好,欢迎来到尔游网。
搜索
您的当前位置:首页记一次部署在tomcat上的应用程序的调优

记一次部署在tomcat上的应用程序的调优

来源:尔游网

一、事件发生经过

23年6月初,被告知生产环境提供接口服务的应用程序C告警,需要立刻前往现场解决。

抵达现场,登录linux应用服务器,开始分析C症状:

        1、查看CPU和内存:TOP,使用率均不高,排除内存溢出;

        2、查看进程:ps -ef|grep tomcat,进程仍在,应用程序没挂;

        3、查验网络与端口,ping xx.xx.xx.xx,可以ping通;telnet xx.xx.xx.xx 10101,不通,初步确认应用程序处于假死状态;

        4、查验线程状态,jstack -F  tomcat进程号 >> jstack.txt,发现总线程数只有20多,90%以上是BLOCKED(阻塞)状态,线程阻塞,请求交易进不来所以引起了假死;

        5、查看日志,可能是catalina.out日志太大了,当时没找到报错日志,自我批评下:我是个坑。。。;

        由于事件紧,沟通后采取重启操作,先恢复业务后面再详细分析和解决。

二、接下来的N次重启。。。

        当天上午重启后,正常恢复了业务,下午又告警,如此反复好几次,由于笔者水平有限当时

并没有给出可行的解决方案,运维老师建议新增启动参数“-XX:+UseG1GC”,

最终catalina.sh脚本,JAVA_OPTS参数追加了以下配置: 

-Xms4096M -Xmx4096M -XX:PermSize=1024M -XX:MaxPermSize=1024M -XX:+UseG1GC。

        重启后问题似乎解决了,近十天没有再出现问题,但是大家对这种表面的平静持警惕态度,

当然这期间我也没闲着。距离上次重启12、13天后,果然再次告警了,而且又是连续2次告警。

然后我把近期努力的结果告诉了负责人,需要改代码和配置,负责人同意,要求通过性能环境压

测后走上线流程。

三、发现与解决

        1、调整应用程序线程池

        测试环境使用40并发压测,生产环境问题复现,然后查找到了报错日志!!!见下图:

然后是根据服务器配置情况(32C),经过不断调试,最终确认核心线程10,最大

线程200,另外加上了拒绝策略,见下图:

        2、调整tomcat配置文件server.xml

        排查问题过程中发现server.xml没有配置线程池,连接器配置的是HTTP1.1,修改配置,见下图:

        3、调整数据库连接池

        压测过程中,发现有时会提示无法从连接池获取空闲连接,于是增加了连接数,如下图:

        4、调整JVM参数

        在优化的过程中,发现了前辈的文章:

加以借鉴,根据服务器配置,调整了JVM参数,见下图:

        5、oracle表结构调整

        查询接口内查询sql,表数据量在数十万以上,发现没有索引,于是查询关键字段新增索引。

         最后附上一张120并发用户,120 TPS连续压测12小时的结果结束本次调优过程。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- axer.cn 版权所有 湘ICP备2023022495号-12

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务