页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

       项目使用过程中会遇到多次mysql假死和tomcat假死的问题(假死指的是进程存在,但是无法提供服务)。


排查方式

       1、首先运行linux基础命令,查看linux系统负载情况,重点关注load average、内存和进程资源的消耗统计

            命令:top
                      free -mh
                      df -h

            Image Modified

            如上图Linux系统负载正常 ,排除cpu和内存占用过高导致的问题。

     2、查看应用的日志(mysql的日志和tomcat的日志)

          确认mysql 日志和tomcat日志本身无异常,排除其他异常导致的应用问题

     3、针对tomcat可以查看一下线程日志
          命令:jstack pid

          用途:排除死锁和阻塞

      4、以上都正常的情况下,查看一下网络连接释放情况

          命令:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 

          如果发现有大量的CLOSE_WAIT 进程,应该是问题所在,百度一下,可以查看到类似的文章
          https://cloud.tencent.com/developer/article/1381359 
          https://blog.csdn.net/lxlmj/article/details/53005021 

          如果要看详细查看CLOSE_WAIT 进程,可以通过netstat -an|grep 端口号 进行分析,如smartbi的访问端口号是433,则 netstat -an|grep 443


解决方案

      1、修改文件句柄数【需要通知用户运维人员处理】

          参考wiki:https://history.wiki.smartbi.com.cn/pages/viewpage.action?pageId=35750019

      2、修改Linux系统的连接超时参数【需要通知用户运维人员处理】
          vim /etc/sysctl.conf 在文件末端加上以下内容:

          net.ipv4.tcp_syncookies = 1
          net.ipv4.tcp_tw_reuse = 1
          net.ipv4.tcp_tw_recycle = 1
          net.ipv4.tcp_fin_timeout = 30

...


      3、针对tomcat应用,修改Tomcat server.xml文件,增加连接超时时间(无论是http协议还是https协议都需要添加socket超时设置) connectionTimeout="30000"

         

...

其他信息补充

       1、验证网络连接情况命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  

           下图是连接状态描述供参考:

          

...