Java “exec”后面的数字是什么意思;[http-bio-8080-exec-494][ERROR]”;?
在对部署在Tomcat7上的传统Java Spring Maven项目进行调查时,日志如下所述- 2018-08-29 18:16:42:471+0600[http-bio-8080-exec-494][错误] 之后要求对号码进行解密 执行官- 那么“exec”的基本含义是什么呢?Java “exec”后面的数字是什么意思;[http-bio-8080-exec-494][ERROR]”;?,java,spring,maven,tomcat7,Java,Spring,Maven,Tomcat7,在对部署在Tomcat7上的传统Java Spring Maven项目进行调查时,日志如下所述- 2018-08-29 18:16:42:471+0600[http-bio-8080-exec-494][错误] 之后要求对号码进行解密 执行官- 那么“exec”的基本含义是什么呢? 对于上述情况,它是494 这是tomcat中线程池生成的线程ID号。真正的问题是不同的,这是一个内部信息,它的价值是什么,现在你知道了吗?我假设接近零…它很可能是由自定义生成的线程id,就像: Executor ex
对于上述情况,它是494 这是tomcat中线程池生成的线程ID号。真正的问题是不同的,这是一个内部信息,它的价值是什么,现在你知道了吗?我假设接近零…它很可能是由自定义生成的线程id,就像:
Executor executor = Executors.newFixedThreadPool(4, new ThreadFactory() {
AtomicInteger threadId = new AtomicInteger(0);
@Override
public Thread newThread(Runnable r) {
return new Thread(r, "http-bio-8080-exec-" + threadId.getAndIncrement()); // custom a thread factory
}
});
IntStream.range(0, 10).forEach(value -> {
executor.execute(() -> {
System.out.println(Thread.currentThread().getName()); // print thread name
try {
Thread.sleep(100);
} catch (Exception e) {
}
});
});
输出:
http-bio-8080-exec-0
http-bio-8080-exec-1
http-bio-8080-exec-2
http-bio-8080-exec-3
http-bio-8080-exec-0
http-bio-8080-exec-3
http-bio-8080-exec-1
http-bio-8080-exec-2
http-bio-8080-exec-0
http-bio-8080-exec-3
只有在调试涉及多线程的棘手问题时,这些信息才有意义rare@spi如果你想调试这些问题,从线程id开始,这意味着您离实际调试问题还很远…@Eugene我们观察到,当我们的系统处于满载状态时,该值上升到1600,并且奇怪地停止,而日志中没有给出任何错误。因此,我们感觉可能有太多未使用的线程造成内存泄漏。@Eugene当然^^^但通过查看线程id,您可以更好地了解发生了什么:有时您可以确定调用是在特定线程中完成的,查看id可能会确认或不确认您的假设。@M.A.K.Simanto yes 1600个活动线程是非常重要的。但是,id的增长并不意味着之前的所有线程都仍然处于活动状态,只有调试器/探查器才能判断。但是如果线程池设置正确,它就永远不会杀死和重新创建任何线程,只会重用旧线程,id不会增长。如果您的问题得到了回答,您可以接受它…@Eugene进一步调查以检查#活动线程,使用jprofiler阻止的线程,然后计划对问题稍加修改,然后接受答案。谢谢你的提醒。