Отслеживание создания потока Java - PullRequest
0 голосов
/ 14 марта 2011

У меня есть Java-приложение с большим акцентом на параллелизм и производительность. Это означает, что он использует пулы потоков для постановки в очередь и выполнения событий.

Все эти пулы потоков имеют фиксированный размер, но я постоянно сталкиваюсь с ограничениями открытых дескрипторов файлов при развертывании приложения на сервере Linux (CentOS 5.5).

На мой взгляд, приложение, находящееся под нагрузкой, не должно создавать более 20 потоков одновременно, но я набираю ulimit из 1024.

Можно ли как-нибудь отследить эти потоки до кода / пула, который их создал?

1 Ответ

5 голосов
/ 14 марта 2011

Пул нормальных потоков должен (по крайней мере, опционально) разрешать указание имени.

Для обычного ThreadPoolExecutor вам необходимо реализовать ThreadFactory, который соответствующим образом присваивает имена потокам. Затем используйте setThreadFactory(), чтобы использовать вашу реализацию.

Вы также можете использовать Гуава ThreadFactoryBuilder и позвонить по номеру setNameFormat(), чтобы получить предварительно встроенную функциональность:

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