tomcate启动cpu占用达到90%
top -H或者htop命令可查看占用CPU最高的线程,结合jstack导出线程日志,确认下对应线程是做什么的。
好的,谢谢
tomcat😂多了一个e
查询你的dump 文件,发现很多mysql传了很多对象没有释放。与om.mysql.jdbc.JDBC42ResultSet有关,具体要看代码
可以看到最顶层的就是 java.lang.Object[106710] 类,经过层层引用,存在大量的com.mysql.jdbc.ByteArrayRow类,我不知道这个类是做什么用的,但看起来就是这个类的对象太多,导致内存占用过大。可以看到 internalRowData标签里面有一个数组元素属性,这个属性记录了这次查询的脚本,其实就是一个全表查询,没有任何查询条件。
也就是说这次内存溢出的原因就是因为查询了数据库某个表全部的数据,把内存撑爆了。
看你分享的内存dump分析结果显示, io.netty.util.concurrent.FastThreadLocalThread和com.mysql.jdbc.JDBC42ResultSet占了92%,会不会跟这两个地方有一些关系?
看一下消耗CPU最多的线程到底在干什么,可借助Arthas或useful-scripts来查看
top -H或者htop命令可查看占用CPU最高的线程,结合jstack导出线程日志,确认下对应线程是做什么的。