服务运行一段时间后,接口就无法访问,,接口ping 和telnet ip port都能通,,只有重启Tomcat才能恢复

一:配置环境:centos7 + redis +docker 起的web服务

现象:服务运行一段时间后,接口就无法访问,,接口ping 和telnet ip port都能通,,只有重启Tomcat才能恢复

遇到这个情况,首先会想到可能jvm内存不足,溢出或者没有被合理gc  ;这时候莫要冲动去一意孤行的设置tomcat调整jvm大小,因为一般情况下,tps不是特别high 默认的配置足够支持并发的

二、操作流程:

1:进去wx-oas 实例容器内 docker-enter wx-oas。

序号 操纵指令 指令解释
1:进去wx-oas实例容器内 docker-enter wx-oas。 此操作是因为单个服务实例出现问题能精确定位
2:cd到实例usr/local 并进入的jdk/bin目录 下, 查看jvm的堆栈信息
3:jps 查看所有java 进程server 。 top -H -p 11是看次pid下面所有的子线程status s表示休眠    
4:jstack -l pid 查看为pid的堆栈信息快照,jstack -l pid > info.txt 输出txt文件    
从而定位到原来是代码写的bug,没有redis.close,而且更友好的是,人家把哪一行都打印出来了,不是人家tomcat默认的不够哈

服务运行一段时间后,接口就无法访问,,接口ping 和telnet ip port都能通,,只有重启Tomcat才能恢复_第1张图片

ps:把操作过的history贴一下

cd /usr/local/
   86  ls
   87  cd jdk1.8.0_121/
   88  ls
   89  cd bin/
   90  ls
   91  ./jps 
   92  top
   93  ./jps
   94  top -H -p 11
   95  ls
   96  top -H -p 12
   97  top -H -p 11
   98  ls
   99  ./jstack -l 11 >info.txt
  100  ./jstack -l 11 >info2.txt
  101  ./jstack -l 12 >info3.txt
  102  ./jstack -l 12 >info4.txt
  103  more info.txt 
  104  grep 'extracme' info.txt 

你可能感兴趣的:(java基础-技术点)