我们有spring boot微服务和几个库作为依赖。例如Jest (弹性搜索),Hikari,Spring-Rabbit,FasterXml等等。
在分析线程转储之后,我们发现创建了2个未知池。在普通的开发机器上,这些池包含8到10个线程。但在prod环境中,我们观察到每个池都有66个线程。线程池名称是自动生成的,如pool-7、pool-2等。
我们想要找出是哪个java类/库创建了这个线程池并产生了线程。尝试使用oracle飞行记录器,但即使在那里,我们也看不到这些线程的来源。
有没有人能建议一下找出是谁创建了这些帖子?
谢谢,斯米塔
发布于 2018-08-30 06:36:15
不幸的是,飞行记录器中的威胁启动事件没有记录来自Thread#start方法的堆栈跟踪。我将看看是否可以将其添加到未来的JDK版本中。但是,您应该能够看到启动新线程的线程。
如果您找不到其他工具来帮助您,我能想到的唯一方法就是自己插装java.lang.Thread#start方法。使用字节码插装,或者只是克隆OpenJDK,修改java.lang.Thread的源文件并构建您自己的自定义JDK。最后一步听起来可能让人望而生畏,但如果您使用的是JDK 8或更高版本,那么这并不难。
hg clone http://hg.openjdk.java.net/jdk8/jdk8
cd jdk8
bash get_source.sh
bash configure
make images当您克隆时,根目录中有一个自述文件,如果您遇到问题,它将为您提供进一步的说明。
https://stackoverflow.com/questions/52070402
复制相似问题