2016-04-13 18 views
0

私は現在、自分のJavaアプリケーションで何が起こっているのかを理解しようとしています。Javaスレッドが累積し続ける

1 - (259-260スレッドで着実)アプリケーションを起動し

2 - いくつかの時間が(時にはそれが12時間、他の2分だ、未固定長)で行く

3 - 何かが起こります、エラーはスローされず、特定のスレッドは動作を停止しません。

4 - 新しいスレッドがスタックを開始し、0.7秒ごとに新しいスレッドを作成します。イベントから起動します。 (通常は処理され、1秒未満で自動的にクリーニングされます)この時点で、スレッド番号が上がっていることを簡単に確認でき、決して停止しません。 (最後のログは手動でシャットダウンする前に1170スレッドに達しました)。

5 - スレッドがスタックアップを開始する時点から、アプリケーションの半分が動作を停止し、新しいスレッドはまだ起動されますが、まったく処理されません。

ガベージコレクタが停止/中断する原因を知りたいのですが、メインスレッドがロックされている可能性がありますか?おそらくJVMエラーですか?このプロセス全体の間、GCは決して直接触れることはありません。それが起こるまで、GCは想定されたとおりに動作し続けます。

私に尋ねると、「もの」とは何か、私は実際にはわからないが、新しいスレッドが完全に解析されないという事実を除いて、デバッグはすべてうまく流れている。 (それはデバッグコードに到達しますが、それ以外は残ります)

ありがとうございます。

+5

なぜこれはGCの問題ですか?これはなぜ "あなたはThreadPoolを使用するのではなく、たくさんのスレッドを作成しましたか"という問題ではないのですか? – Makoto

+0

私はそれがGCの問題だと言っているわけではありません、私は原因を探す場所を知るために、GC停止を引き起こす原因を尋ねています。 – Fabricio20

+0

ここで明白にしましょう。これらのスレッドを手動で作成していますか、実際にはスレッドプールを使用していますか? – Makoto

答えて

0

16時間の連続したテストの後、回答は固定のThreadPoolでした。

誠に感謝してくれてありがとう。手動でスレッドを作成すると、700msごとにJVMが何らかの形でクラッシュする可能性があります。スレッドの制限付きの固定スレッドプールで正常に戻すことができます。