资讯专栏INFORMATION COLUMN

tomcat 由于 -Xss 太小导致无法加载应用

TigerChain / 736人阅读

摘要:最近线上一个应用出现了一个无法加载,卡住了的问题。因此确定问题,是开发新上线的代码线程栈用的太大,导致原先设置的不足,需要调大。最后把预发布和生产环境的调大后,问题解决。参考资料优化系列之一调整的大小

最近线上一个应用出现了一个 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

相关文章

  • java类加载相关

    摘要:标准扩展类加载器,它负责加载或由系统变量指定位置中的类库加载到内存中。系统类加载器,它负责将类路径中的类库加载到内存。 类加载机制大家应该已经非常熟悉了,采取双亲委派机制,当加载一个类时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成加载任务,就成功返回;如果父类无法加载,才由自己加载。 双亲委派机制的作用:防止内存中出现多份相同的字节码。 其他规则:1.隐式加载:...

    el09xccxy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<