在65服务器上查看各java应用的内存占用情况,大多数应用的CPU占用都在1%-5%之间,但是nb-hes的内存占用长期达到了13%左右,遂开始排查nb-hes占用内存过分高的原因,具体步奏如下。
一、JConsole
排查65服务器上个java应用的内存占用情况
JConsole是JDK自带的一个工具,也是 一个图形界面的工具,只要装了JDK就有这个工具;可以直接在服务器上连接本地的java进程,也可以从本机去跟踪远程服务器上的一个进程,如下图所示:

点击连接即可

确认连接

服务器上面的基本情况如下:

可以看到CPU占用比较高
二、使用任务管理器查询应用所在详情(PID、安装位置)


三、使用Jstack下载stack信息到某个位置
使用Jstack将第二步查询到的PID对应的应用的stack信息下载下来

四、 Process Explorer
用的是微软提供的 Process Explorer工具,排查上一步查询的进程当中,那个线程所占用的内存最多。

五、找到占用内存多的那段代码
由于stack导出的信息里面线程对应的tid是16进制的,所以要把前面的线程的TID转成16进制的,再在stack导出的文件当中全局搜索该PID(9726—>25FC)

六、分析
在代码当中查找该段代码,发现是由于引入的第三方的这个Jar包里面写了一个死循环,去一直监听设备的上线下

为了验证是否是死循环引起的,现在修改代码不做成死循环

打包后重新运行程序,再次测试内存占比,情况如下

由此确定,确实是由于这段代码引起的!