1

同時実行性とバースト可能容量に重点を置いたJavaアプリがあります。これは、スレッドプールを使用してイベントをキューに入れて実行することを意味します。

これらのスレッドプールはすべて固定サイズですが、アプリがLinux(CentOS 5.5)サーバーにデプロイされると、開いているファイル記述子の制限に常にぶつかります。

私の計算では、アプリは負荷がかかっているときに一度に20を超えるスレッドを作成するべきではありませんがulimit、1024に達しています。

これらのスレッドを作成したコード/プールまで追跡する方法はありますか?

4

1 に答える 1

6

正常なスレッドプールでは、(少なくともオプションで)名前を指定できるようにする必要があります。

通常の場合、スレッドに適切な名前を付けるThreadPoolExecutorを実装する必要があります。ThreadFactory次に、を使用setThreadFactory()して実装を使用させます。

Guava を使用してThreadFactoryBuilder呼び出しsetNameFormat()、その機能を事前に構築することもできます。

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