我们有带有多个库作为依赖项的spring boot micro服务。例如Jest(弹性搜索),Hikari,Spring-Rabbit,FasterXml等。
分析线程转储后,我们发现正在创建2个未知池。在普通的开发计算机上,这些池包含8到10个线程。但是在生产环境中,我们观察到每个池都有66个线程。线程池名称是自动生成的,例如pool-7,pool-2等。
我们想找出哪个java类/库正在创建此线程池并生成线程。尝试使用Oracle Flight Recorder,但是即使在那儿,我们也看不到这些线程的起源。
有人可以建议找出谁在创建这些线程吗?
谢谢, 史密塔
答案 0 :(得分:1)
不幸的是,Flight Recorder中的Threat Start事件没有记录来自Thread#start方法的堆栈跟踪。我将看看是否可以将其添加到将来的JDK版本中。但是,您应该能够看到启动新线程的线程。
如果找不到其他工具来帮助您,那么我想到的唯一方法就是亲自检测java.lang.Thread#start方法。使用字节码检测,或仅克隆OpenJDK,修改java.lang.Thread的源文件并构建自己的自定义JDK。最后一步听起来让人望而生畏,但是如果您使用的是JDK 8或更高版本,则并不难。
"Unknown column 'SUM(IF(table_2.inter= 1 AND table_2.admin_resp= 0, 1, 0))' in 'field list'"
克隆时,如果您遇到问题,则根目录中有一个README文件,它将指向您进一步的说明。