摘要:最近线上一个应用出现了一个无法加载,卡住了的问题。因此确定问题,是开发新上线的代码线程栈用的太大,导致原先设置的不足,需要调大。最后把预发布和生产环境的调大后,问题解决。参考资料优化系列之一调整的大小
最近线上一个应用出现了一个 tomcat 无法加载,卡住了的问题。引起该问题的原因是开发同事的一个老项目新增了一些功能,需要进行上线,首先发布到预发布环境后,重起 tomcat,发现出现如下现象:
Oct 27, 2014 10:31:14 AM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["ajp-bio-9009"] Oct 27, 2014 10:31:14 AM org.apache.catalina.startup.Catalina load INFO: Initialization processed in 586 ms Oct 27, 2014 10:31:14 AM org.apache.catalina.core.StandardService startInternal INFO: Starting service Catalina Oct 27, 2014 10:31:14 AM org.apache.catalina.core.StandardEngine startInternal INFO: Starting Servlet Engine: Apache Tomcat/7.0.40 10:31:20,011[INFO]MLog:80 MLog clients using log4j logging.
即 tomcat 的日志显示,走到 MLog clients using log4j logging 这就不往下走了。
虽然我的预发布环境没有做任何变更,但是为了稳妥起见,还是把代码在生产集群中的其中一台服务器发布下,结果表现的现象是一样的,还是加载不成功。
但是开发同事又说在测试环境是能正常加载的,为了证明不是环境问题,所以让开发同事先回滚代码,回滚后,再发布,能正常加载,所以我让开发同事排查下代码,看是不是代码有问题,因为开发同事上线了两个新功能,所以我让其把功能拆开了上线发布,结果是上线其中一个功能能正常加载,上线另外一个不能正常加载,那根据这个可以判断是另外一个功能的代码问题了。但是结果一天的排查,还是不能确定到底是什么问题。同时开放同事坚决表示测试和开发都没有问题,为什么就生产有问题。所以只好继续从环境入手了。
我最后让开发把测试环境的 tomcat 配置发给我看下,看是否不一致(最后才查看 tomcat 配置,是因为我们的环境 tomcat 类似的一直都是测试,预发布,生产保持一致的,所以当时没有想到这方面)。最后一对比发现,tomcat 配置的 -Xss 这个值不一样,预发布和生产的是设置的 256k,而测试环境是设置的 512k,最后把测试环境的该值调小到与预发布环境一致。重显了该现象。因此确定问题,是开发新上线的代码线程栈用的太大,导致原先设置的不足,需要调大。最后把预发布和生产环境的 -Xss 调大后,问题解决。
注:运维问题真是不能想当然,要一步步的把所有的差异都对比,然后一一的修正测试。
参考资料:
JVM优化系列之一(-Xss调整Stack Space的大小)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64167.html
阅读 755·2021-11-09 09:47
阅读 1531·2019-08-30 15:44
阅读 1124·2019-08-26 13:46
阅读 2087·2019-08-26 13:41
阅读 1242·2019-08-26 13:32
阅读 3728·2019-08-26 10:35
阅读 3498·2019-08-23 17:16
阅读 418·2019-08-23 17:07