こんにちは、私はヘッドレスラズベリーパイで年中無休の24時間個人秘書として実行するように設計されたJavaプログラムを友達と作りました。基本的に通知として機能し、天気やニュースなどを知らせます。そのため、24時間年中無休で実行されるようにするために、以下の指示に従いました。ここjar
Piが起動すると起動します(したがってデーモンとして実行されます)。
最初の数時間から1日間はすべて大丈夫ですが、長い時間(約1日以上)が過ぎてもjar
応答はありませんが、SSHを介してPiに接続すると、Piはほとんど「目が覚める」ように見えます。すべてが再び正常に戻った。
jar
Raspberry Piにはスリープモードがないことを読んでいますが、正確な理由とは何か、24時間年中無休に応答するようにする方法が混乱しています。
デーモンスレッドがスリープモードになっているのか、スレッドが多くの作業をしていない場合は、通常スリープモードに移行するのかどうか疑問に思います。今、私たちのプログラムは、イベントが発生するのを待っている間(たとえば、特定の時間にベルを鳴らすアラーム)、アクティブになっている間、ほとんど「休止」状態になるためです。など)、したがって、ほとんどの場合、それほど多くの作業を行いません。
ベストアンサー1
私は実際にUNIXで一般的にデーモンやスレッドの長期的な動作を知りたいです。
彼らは止まるまで走った。システムはこれらをランダムにブロックしません、そしてあなたはパイが眠ることができないことをすでに知っています。 「応答なし」が「遅い」を意味し、システムが他の作業を続けている場合は、JREが置き換えられている可能性があります(しかしそれは問題ではないようです)。
時間が経つにつれて、メモリプロファイルを見たいと思うかもしれません。問題が発生してから数日が経過し、問題が大きくなるまで着実に増加すると、何かが間違っています。 Javaを使用して実際にメモリを「リーク」することはほとんど不可能だと思いますが、実際に使用されていない大量のメモリを誤って蓄積することは確かに可能です。あなたは興味があるかもしれませんこれ。
それ以外にも、プログラムでより細かいロギングを実装する必要があります。これは明らかに何らかの方法で時間を計算します。定期的に目を覚ますと、何が起こっているかに関係なく状態を報告します。これは神秘的に問題を「解決する」ことも、実際の手がかりを提供することもできます。継続的なプロセスを監視するには、強力なロギングが不可欠です。それが何でもするたびに記録してください。何もせずに一定時間が経つたびに記録してください。 十分ではないよりも録音しすぎることをお勧めします。