Java的时间获取问题

1600阅读 0评论2017-09-30 wzzushx
分类:嵌入式

最近遇到一个第三方插件工作在自己交叉编译的Java环境里面,周期性工作不对的问题,而在其他的环境下工作是好的。
最早在交叉编译部署时,就遇到了提示:
OpenJDK 64-Bit Server VM warning: No monotonic clock was available - timed services may be adversely affected
不同虚拟机,冒号前的内差异可以忽略。
看这句提示的意思是没有可用的单调时钟,基于时间的服务可能会受影响。
而我们的问题就是系统时间改变时,插件工作的周期性就错误。关联度极高。
怀疑有2个方面的原因,

一个是工具链本身不支持MONOTONIC时间(编写测试程序,确认没有问题);

一个是虚拟机本身有些问题。(顺着这个log出发,查找根源,看源代码,原来hotspot是依赖librt.so这个库)

将工具链中这个librt.so放到系统中后,java启动没有这个提示了,第三方插件也不会受时间调整而频繁上报了。

所以,遇到可疑的提示,还是尽早分析原因,以免后续的工作受影响。再就是要勇于追踪相关的源码,有时,这是解决问题的快速方法。
后来,就搜索了Java的时间使用,又一片文章不错
%2D+timed+services+may+be+adversely+affected&qid=8f37a3f500041023&p1=1

上一篇:robot framework 入门
下一篇:实时 Linux 架构剖析