你好,我和朋友一起做了一个java程序,设计成在无头的Raspberry Pi上作为个人助理运行24/7。它基本上可以用作警报,并告诉我们天气或新闻等。因此,为了让它24/7无头运行,我按照这里的指示,在Pi启动时让jar启动(因此它作为守护进程运行)。
在最初的几个小时到一天的时间里,一切都很好,但是经过一段很长的时间(大约一天或更长的时间),jar就变得没有反应了,但是当我把它放入Pi中时,似乎Pi几乎“醒了”,一切又恢复了。
我读到Raspberry Pi没有睡眠模式,所以我搞不懂是什么原因,以及如何关闭它,以使jar是真正的响应24/7。
我想知道守护进程线程是否会进入睡眠状态,或者线程通常会在它们不做太多事情的情况下进入睡眠状态,因为现在我们的程序主要是在等待事件发生时“睡觉”(比如在某个特定的时间内触发警报等),所以在大多数情况下,它不会做太多事情。
发布于 2015-02-08 15:08:44
实际上,我更想知道unix中的守护进程或一般线程的长期行为。
他们一直跑到停下来。系统不会任意阻止它们,而且你已经知道圆周率无法入睡。如果你所说的“反应迟钝”指的是“慢”,而系统一直在做其他事情,那可能只是因为JRE被替换掉了(但听起来并不是问题所在)。
随着时间的推移,您可能需要查看内存配置文件。如果它稳步增加,到了问题发生几天后就会大得多,这是一条线索我认为,用java来真正“泄漏”内存几乎是不可能的,但当然也有可能意外地积累大量没有真正使用的内存。您可能对这感兴趣。
除此之外,您还需要在程序中实现更细粒度的日志记录;显然,它以某种方式计算时间。让它每隔一段很短的时间醒来,而不管是否有什么事情要做,并报告它的状态。这可能神秘地“解决”问题,或者它可能提供一个真正的线索。健壮的日志记录对于监视持久进程至关重要。每次它做什么--任何事--记录下来。每次在没有做任何事情的情况下,记录下一定的时间。太多的伐木总比不够好。
https://unix.stackexchange.com/questions/183526
复制相似问题