Tomcat假死的原因分析及解决方案

2024-03-01 0 777
目录
  • Tomcat假死的原因分析及解决
  • 在网上查看资料,问题得到解决
    • 解决方案1
    • 解决方案2
    • 解决方案3
  • 总结

    Tomcat假死的原因分析及解决

    在参与搜人项目时,遇到tomcat假死的问题。

    当时情况:

    1、ps tomcat正在运行

    2、用netstat 查看8080连接情况,有大量的close-wait,还有一些等待连接的状态

    3、查看服务器的使用情况,没有过多的消耗内存和CPU

    4、重新加载界面,没有报错,只是显示加载失败

    5、加载时看到tomcat 日志报错 out of memary

    在网上查看资料,问题得到解决

    服务器配置:linux+tomcat

    现象:Linux服务器没有崩,有浏览器中访问页面,出现无法访问的情况,没有报4xx或5xx错误(假死),并且重启tomcat后,恢复正常。

    原因:tomcat默认最大连接数(线程数)200个,默认每一个连接的生命周期2小时(7200秒),tomcat使用http 1.1协议,而http1.1默认是长连接。

    tomcat接受处理完请求后,socket没有主动关闭,因此如果在2小时内,请求数超过200个,服务器就会出现上述假死现象。

    解决方案1

    及时断开socket

    解决方案2

    修改tomcat配置文件,修改最大连接数(增大)

    修改server.xml配置文件,Connector节点中增加acceptCount和maxThreads这两个属性的值,并且使acceptCount大于等于maxThreads:

    protocol=\”org.apache.coyote.http11.Http11NioProtocol\”
    <Connector port=\”8080\” protocol=\”HTTP/1.1\”
    connectionTimeout=\”20000\”
    redirectPort=\”8443\” acceptCount=\”500\” maxThreads=\”400\” />

    解决方案3

    修改linux的TCP超时时间(socket生命周期)限制

    vi /etc/sysctl.conf
    # Decrease the time default value for tcp_fin_timeout connection
    net.ipv4.tcp_fin_timeout = 30
    # Decrease the time default value for tcp_keepalive_time connection
    net.ipv4.tcp_keepalive_time = 1800
    # 探测次数
    net.ipv4.tcp_keepalive_probes=2
    # 探测间隔秒数
    net.ipv4.tcp_keepalive_intvl=2

    编辑完 /etc/sysctl.conf,要重启network 才会生效
    [root@temp /]# /etc/rc.d/init.d/network restart

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持悠久资源。

    收藏 (0) 打赏

    感谢您的支持,我会继续努力的!

    打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
    点赞 (0)

    悠久资源 Tomcat Tomcat假死的原因分析及解决方案 https://www.u-9.cn/server/tomcat/175422.html

    常见问题

    相关文章

    发表评论
    暂无评论
    官方客服团队

    为您解决烦忧 - 24小时在线 专业服务