1

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

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

据我所知,该应用程序在加载时不应一次创建超过 20 个线程,但我达到了ulimit1024 个。

有什么方法可以将这些线程追踪回创建它们的代码/池?

4

1 回答 1

6

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

对于正常情况ThreadPoolExecutor,您需要实现ThreadFactory适当地命名线程的 a 。然后使用setThreadFactory()使其使用您的实现。

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

ThreadPoolExecutor myExecutor = ...;
ThreadFactory tf = new ThreadFactoryBuilder().setNameFormat("myExecutorThread-%d").build();
myExecutor.setThreadFactory(tf);
于 2011-03-14T12:25:27.370 回答