记一次部署在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参数

        在优化的过程中,发现了前辈的文章:(29条消息) Tomcat 调优及 JVM 参数优化_tomcat设置jvm启动参数_ldongxu的博客-CSDN博客

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

        5、oracle表结构调整

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值