Javaプログラムが理由なく停止するという現象が発生しています。原因と対策を..


WindowsXP Professional SP2
JDK 1.5.0
プログラムは、自作のものが数種類。

プログラム自体は、100%バグなしとは言いませんが、それぞれかなり実績があるものです。
それぞれメッセージを頻繁に表示しますが、突然メッセージが止まります。ディスクIOも止まります。例外などJavaVMからのメッセージは一切ありません。メモリは十分にあります。CPUも余裕です。
要は、突然プログラムが停止するようなのです。
そしてたぶん複数のJavaプログラムを動かしている場合に、この現象は発生します。停止する場合は、すべてのJavaプログラムが停止します。
またこの現象は、プログラムを動かし始めてすぐには発生しません。数時間は経過した後です。発生する時間はまちまちです。
また停止しないで、最後までいくこともあります。←こちらの方が多い。
ちょっとわけが分からない現象ですが、よろしくお願いいたします。








回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/06/19 21:41:32
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:yusukey No.1

回答回数73ベストアンサー獲得回数2

ポイント40pt

停止、とはプロセスがなくなってしまうことではなく、フリーズのこと指しているでしょうか?

フリーズ時にはスレッドダンプの確認が有効です。

スレッドダンプをとると、その瞬間、VM 内の各スレッドが何をしているのかがわかります。

フリーズしているタイミングでスレッドダンプを数回取得して、動きのないスレッドがフリーズしている可能性が高いです。

それらのスレッドで何をしているのか(していないのか)確認してみましょう。

・Java - スレッドダンプの取り方

http://yusuke.homeip.net/diary/2006/09/21/1158846052527.html

id:gzmgzm

ahirusanもyusukeyさんもご回答ありがとうございます。

スレッドについてですが、VMで内部的に作成しているスレッドは別にして、自分でスレッドを生成しているプログラムもありますし、一つしかスレッドがないものもあります。

複数スレッドの場合、sleepを使っています。ちょっと気になるところです。yieldは使っていません。

スレッドダンプとのことですが、いつ発生するのかわからないので、困ったところです。発生したら見てみようと思います。

マシンのメモリも十分あり、またmx1024Mで起動しているので、メモリ関連の要素はないかなと思います。

また複数プログラム同時に発生するようなので、VM相互間の問題のように思います。やっぱりディスクアクセス?

ところで、スレッドはOSのスレッドをつかっているのでしょうか、それともVMで作成したスレッドを使っているのでしょうか。←これは質問ではありません..

2008/06/16 09:26:24
id:ahirusan No.2

回答回数229ベストアンサー獲得回数3

ポイント40pt

可能性としては1.メモリリーク、2.デッドロック、との2つが考えられるのですが、JavaVMがメッセージを発しないということは1ではありませんので、2のスレッド間でのデッドロックが濃厚です。デッドロックは起こる頻度も気まぐれですから。提示されている条件が少なすぎるので、推測できるのはこの辺までです。

  • id:gzmgzm
    質問者です。書き忘れたことがあります。
    同時に動作させているプログラムは相互に通信しません。
    また停止したときに、片方のプログラムをCtrl-Cで強制終了させても、もう一方は停止したままです。
    それとこれが重要かも。たぶん同じディレクトリをアクセスすることがあります。全部かどうかは未確認。勘で言ってしまえば、一種のデッドロックかなと思います。
  • id:dev_zer0
    FullGCが起こっているとか?
  • id:gzmgzm
    質問者です。質問を終了させてしまいましたが、いまもう一度発生しました。今度は状況が違います。残念ながらスレッドの情報を取得するのを忘れましたが。

    今度は他のJavaプログラムは動かしていません。しかしですね。
    標準出力をファイルにリダイレクト中で、他のDOS窓からtypeコマンドで、ログを確認した瞬間に発生しました。
    一応論理的には、両者は関係なくて、たまたまタイミングが一致しただけという可能性もあります。
    が、今まで観察したところ、どうもディスクIOがらみのようなので、詳細なメカニズムはともかく、IOが競合してデッドロックを起こしたものと判断します。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません