WindowsXP Professional SP2
JDK 1.5.0
プログラムは、自作のものが数種類。
プログラム自体は、100%バグなしとは言いませんが、それぞれかなり実績があるものです。
それぞれメッセージを頻繁に表示しますが、突然メッセージが止まります。ディスクIOも止まります。例外などJavaVMからのメッセージは一切ありません。メモリは十分にあります。CPUも余裕です。
要は、突然プログラムが停止するようなのです。
そしてたぶん複数のJavaプログラムを動かしている場合に、この現象は発生します。停止する場合は、すべてのJavaプログラムが停止します。
またこの現象は、プログラムを動かし始めてすぐには発生しません。数時間は経過した後です。発生する時間はまちまちです。
また停止しないで、最後までいくこともあります。←こちらの方が多い。
ちょっとわけが分からない現象ですが、よろしくお願いいたします。
停止、とはプロセスがなくなってしまうことではなく、フリーズのこと指しているでしょうか?
フリーズ時にはスレッドダンプの確認が有効です。
スレッドダンプをとると、その瞬間、VM 内の各スレッドが何をしているのかがわかります。
フリーズしているタイミングでスレッドダンプを数回取得して、動きのないスレッドがフリーズしている可能性が高いです。
それらのスレッドで何をしているのか(していないのか)確認してみましょう。
・Java - スレッドダンプの取り方
http://yusuke.homeip.net/diary/2006/09/21/1158846052527.html
可能性としては1.メモリリーク、2.デッドロック、との2つが考えられるのですが、JavaVMがメッセージを発しないということは1ではありませんので、2のスレッド間でのデッドロックが濃厚です。デッドロックは起こる頻度も気まぐれですから。提示されている条件が少なすぎるので、推測できるのはこの辺までです。
ahirusanもyusukeyさんもご回答ありがとうございます。
スレッドについてですが、VMで内部的に作成しているスレッドは別にして、自分でスレッドを生成しているプログラムもありますし、一つしかスレッドがないものもあります。
複数スレッドの場合、sleepを使っています。ちょっと気になるところです。yieldは使っていません。
スレッドダンプとのことですが、いつ発生するのかわからないので、困ったところです。発生したら見てみようと思います。
マシンのメモリも十分あり、またmx1024Mで起動しているので、メモリ関連の要素はないかなと思います。
また複数プログラム同時に発生するようなので、VM相互間の問題のように思います。やっぱりディスクアクセス?
ところで、スレッドはOSのスレッドをつかっているのでしょうか、それともVMで作成したスレッドを使っているのでしょうか。←これは質問ではありません..