-5

私たちのプロジェクトでは、継続的な作業を行うために多数の Java スレッドを作成しています。

ほとんどの場合、これらのスレッドはスリープしているため、合計 CPU コストは低くなります。

1168スレッドのsystem overload場合、0.20 未満にする必要があります

しかし、jvm で 1000 を超えるスレッドを作成すると、

fork: retry: Resource temporarily unavailable

で接続したいときvmVMではなくjvmssh、これはシステムリソースに関する深刻な問題のようです..

そして、私は自分のプログラムで何が起こるかについて非常に心配しています..

4

2 に答える 2

4

非常に多くのスレッドは、良いデザインのようには見えません。スレッドを現在ウェイクアップしているすべてのイベントを 1 つのループで受け取り、それらをすぐにFutureまたは Runnablesに変換してExecutorServiceに投稿することを提案します。このサービスは、スレッド プールを管理できます。ServerSocket と Socket を使用した標準的なアプローチは、そのように実装されています。

于 2013-01-26T16:48:01.353 に答える
1

こちらで説明したように、Linux システム上のスレッドとプロセスの総数は、他のリソース制限によって直接的および間接的に制限されています。どうやらその制限を超えておりfork()、新しい SSH セッションを作成するために必要な呼び出しが失敗しています。

とにかく、なぜそんなに多くのスレッドを作成しているのですか?

スレッドの数が使用可能なプロセッサ コアの数を大幅に超えている場合、パフォーマンス上の利点はほとんど得られず、各スレッドには無視できない最小メモリ要件があります。

何らかの形式のC10K問題に対処している場合は、複数のスレッドを組み合わせて非同期 I/O を使用することを検討する必要があります。

于 2013-01-26T16:41:14.800 に答える