Java线程创建跟踪

时间:2011-03-14 12:21:57

标签: java linux multithreading threadpool centos5

我有一个Java应用程序,重点关注并发性和可突发容量。这意味着它使用线程池来排队和执行事件。

所有这些线程池都是固定大小的,但是当应用程序部署在Linux(CentOS 5.5)服务器上时,我经常发现自己遇到了打开文件描述符限制。

根据我的统计,应用程序在加载时,任何时候都不应创建超过20个线程,但我的命中率为ulimit 1024。

有没有办法可以将这些线程追溯到创建它们的代码/池中?

1 个答案:

答案 0 :(得分:5)

一个理智的线程池应该(至少可选)允许指定名称。

对于普通ThreadPoolExecutor,您需要实现一个ThreadFactory来正确命名线程。然后使用setThreadFactory()使其使用您的实现。

您还可以使用Guava ThreadFactoryBuilder并致电setNameFormat()来预先构建该功能:

ThreadPoolExecutor myExecutor = ...;
ThreadFactory tf = new ThreadFactoryBuilder().setNameFormat("myExecutorThread-%d").build();
myExecutor.setThreadFactory(tf);