记录一次类似于内存泄漏,定位问题的经历

1  问题原因是一个接口返回数据大约有240w,查询时间有30s,导致cpu利用率达到了百分之百。

2  解决方案有几种,在windows7环境下面,第一种是先打开jconsole,在jdk的bin目录下,可以看堆栈和线程的信息。

   确认是堆栈信息猛涨之后,

1 粗略看一下 可以利用 jmap -histo   -pid|more 的命令打开查看当前-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量. 。

2 具体定位是看任务管理器中的进程,看看哪个进程猛涨,然后根据该进程的pid去jstack -l pid在控制台查看堆栈信息,但是看不全,此时需要jstack pid > pid.out将日志信息打印到当前目录下。去文件里面查看。然后根据Process Explore去查找该pid对应的tid线程号,将此线程号转为16进制,根据线程号去找对应的nid。

猜你喜欢

转载自blog.csdn.net/qq_27631217/article/details/82227134