あけましておめでとうございます。
もう月末なので何ですが、年明け1回目のブログなので一応ご挨拶を。
今月は急に大寒波が来たり、気温変化の激しい月でした。
こういう時は体調を崩しがちなので気を付けたいですね。
さて、表題の件ですが、実は現在進行形で悩まされています。
javaで作成されたプログラムでどうにも不可解な挙動が出ているのです。
具体的には、プログラム自体は落ちていないのに
プログラム内の、終了するはずのないスレッドだけ終了してしまっているような
そんな動きが確認されています。
public class StatusMonitoringThread extends Thread {
private Queue<QueInfo> queue;
public StatusMonitoringThread() {
queue = new ArrayDeque<QueInfo>();
// queueをstaticなクラスに登録し、外部からadd可能にしておく
:
:
}
public void run() {
QueInfo deQue;
while(true) {
// キューチェック
if( queue.size() > 0 ) {
deQue = queue.poll();
// 取得情報を元に、各種処理を実施
:
}
try {
Thread.sleep(1);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
上記スレッドクラスは、外部からキューに情報が追加される毎に、対応した処理が実施されるものです。
キューに追加される頻度は1分に1回程度なので負荷はそれほどでもないはずなのですが、
長く動作させていると処理が実施されなくなってしまうのです。
長いといっても最短5日くらいで発生したこともあるので、なんとも困った状況です。
なお、Javaのバージョンは1.8.0_171です。
キューに情報が追加されるところまでは動作しているようなので、
スレッドが終了してしまっているとしか思えない状況ですが、
無限ループから抜けるような処理は無いし、tryで囲ってもいないので
例外が発生したらプログラム自体が落ちるはずなのですが…。
現在は、プログラム自体よりも動作環境のほうに着目し、
他の処理でメモリが食いつぶされて正しく動作しないように
なっていないかなどを調査中です。
こういった原因不明の挙動は本当に困りますね。なんとか解決出来ると良いのですが。
以上