2011-12-09 15 views
9

XSEDEリソースの1つでゲノムアセンブリプログラム* Trinity、http://trinityrnaseq.sourceforge.net/(該当する場合)を実行しています。ハードウェアはスレッドの数を2500に制限します。これはプログラムが常に超過したいスレッドの数を制限する簡単な方法ですか?私は-XX:ParallelGCThreads=16を試しましたが、これは新しいエラーを導入するようです。実行時に、どのようにしてJavaスレッドの数を制限できますか

スレッドの総数を制限するランタイムコマンドがありますか?

+4

問題は、スレッドの数を制限するようにJVMに指示することができても、トリニティアプリケーションロジックはさらにスレッドを取得しようとし、実行時に失敗する(またはブロックする)ということです。あなたが本当に別のフォーク/スレッド作成戦略を使用するようにトリニティのコードベースにパッチを当てたいと思っているようですが、ソースを取得して変更することになります。 –

+0

私はトリニティのドキュメントをスキミングし、--CPUオプションを見ました。あなたはそれを試しましたか? – user949300

+0

トリニティのドキュメントを読み飛ばし、--CPUオプションを見ました。あなたはそれを試しましたか? – user949300

答えて

0

スレッド制限の数を処理する別のプロセスとして実行されるカスタムキューを使用できます。これの利点は、スレッド数を制限するか、またはスレッド数を引き続き追加することができるということです。あなたはおそらくaddToQueue(Thread t)クラスを持ち、その後これらのスレッドをすべて消費するコンシューマです。キューは、実行中のスレッドの数を知ることができます。デーモンプロセスは、スレッドが範囲内にあれば、このキューのconsume()メソッドを実行します。そして、すべてのスレッドが終了した後、またはジョブを強制終了すると、キューに戻って報告されます。実行中のタスクに優先順位があると思われる場合は、維持しているキューを優先キューにすることができます。これは、JVMへの依存をなくすだけでなく、プログラムをよりきれいに見せることができます。

2

ExecutorまたはExecutorServiceを使用します。 bragboyは何を示唆していますか?それはJavaに組み込まれています。

関連する問題