你好,我和朋友一起制作了一个java程序,该程序被设计为在无头Raspberry Pi上作为个人助理24/7运行。它基本上可以用作警报并告诉我们天气或新闻等。因此,为了让它 24/7 无头运行,我按照以下指示进行操作这里jar
当 Pi 启动时启动(因此它作为守护进程运行)。
前几个小时到一天一切都很好,但经过很长一段时间(大约一天或更长时间)后,jar
变得没有响应,但是当我通过 SSH 连接到 Pi 时,Pi 似乎几乎“醒来”了一切又恢复正常了。
我读到 Raspberry Pi 没有睡眠模式,所以我很困惑到底是什么原因,以及如何将其关闭,以便jar
真正做到 24/7 响应。
我想知道守护线程是否会进入睡眠状态,或者如果线程不做太多事情,它们通常会进入睡眠状态,因为现在我们的程序在等待事件发生时大多会“睡眠”(比如在某个时间敲响警报)激活等),所以大多数时候它并没有做太多事情。
答案1
我实际上更想知道 UNIX 中守护进程或一般线程的长期行为
他们跑到停下为止。系统不会任意阻止它们,并且您已经知道 pi 无法进入睡眠状态。如果“无响应”指的是“缓慢”并且系统一直在做其他事情,则可能只是因为 JRE 被换出(但听起来这不是问题所在)。
您可能想查看一段时间内的内存配置文件。如果它稳步增加,直到问题发生几天后变得更大,则表明出现了问题。我认为用java真正“泄漏”内存几乎是不可能的,但肯定有可能意外地积累大量未被真正使用的内存。您可能感兴趣这。
除此之外,您还需要在程序中实现更细粒度的日志记录;显然它以某种方式计算时间。无论是否有任何事情要做,都让它定期醒来并报告其状态。这可能会神秘地“解决”问题,或者可能提供真正的线索。强大的日志记录对于监视持久进程至关重要。每当它做某事——任何事情——记录下来。每当经过一定时间而它没有做任何事情时,记录下来。 记录太多总比记录不够好。