这是个有趣的问题。
我们的一个weblogic应用服务器,运行于HP-UX,启动后,发现操作系统时间与时间服务器不一致(差一分多钟),所以就把操作系统时间与时间服务器同步了一下。这时候怪事出现了,从weblogic应用中取得的时间与操作系统时间不一致了(没注意weblogic中取得的时间是否与操作系统修改之前的时间相同,待会儿验证。已经确认,目前发现HP的JDK会有这个问题,SUN的JDK没有问题)。
在网上查了一下,发现这个问题可能是由于HP-UX的JDK取时间机制造成的。
HP-UX SDK 1.3.1.08的release notes,里面有这么一段说明,原文如下:
date/time methods - new defaults
Since SDK 1.2.2.09 and SDK 1.3.1, there has been a change in the way the HotSpot JVM uses the gettimeofday() system call to obtain date and time information.
For performance reasons a new mechanism is used that uses the number of cpu ticks since the application started, to calculate the current time.
As a result, changes to the system date or time using date(1), adjtime(2) or time synchronization utilities such as ntp will not be reflected in the date and time that Java returns, until the process is restarted. If your application requires that Java immediately reflects such system time changes, you can use the -XX:+UseGetTimeOfDay option to tell the JVM to use the gettimeofday call instead of the new, lightweight mechanism. However you may notice a drop in performance.
上面说的意思大致是,HP-UX SDK 1.2.2.09 和HP-UX SDK 1.3.1之后,由于performance的原因,JVM中读取系统时间的时候,是在应用程序启动之后,读一次OS的系统时间,然后JVM中根据CPU ticks来自己计算时间,而不是实时地去OS 取系统时间。这样的话,在应用程序运行当中,如果有ntp改变了OS的系统时间,那么JVM和OS的系统时间就不一致了。只有等下一次应用程序重新启动的时候,JVM才会重新读取OS系统时间。
解决方案就是启动应用程序的时候,用-XX:+UseGetTimeOfDay参数,虽然这会导致performancex下降,但是可以保证JVM和OS的系统时间一致。
以前一直以为JVM是实时取OS的时间的,今天的问题再次教育了我:一切不能想当然
分享到:
相关推荐
JVM 的最大堆大小受到三个方面的限制:操作系统的数据模型限制、系统的可用虚拟内存限制和系统的可用物理内存限制。在 32 位系统下,一般限制在 1.5G~2G,而 64 位操作系统对内存无限制。 -Xmx 设置 JVM 的最大...
JVM 的运行机制 多线程 JVM 的内存区域 JVM 会创建操作系统的接口创建一个原生线程。JVM 线程和操作系统线程是一一对应的
nginx-upstream-jvm-route 支持nginx版本1.15 解决nginx: [emerg] invalid parameter "srun_id=tomcat1" 问题
You can download MD5 Secure Checksum at HP-UX MD5 Secure Checksum if you do not already have this utility. To verify your download with MD5 Secure Checksum, at the UNIX prompt, execute the command: ...
不用担心版本不匹配造成安装失败,再浪费积分去到处下载尝试的烦恼。 此资源有两个文件,含 nginx-upstream-jvm-route 和 nginx 对应版本,都是tar.gz文件。 安装方法网上很多就不写了,亲测可用。 不用担心版本不...
kotlinx-coroutines-io-jvm-0.1.1.jar
赠送jar包:metrics-jvm-3.1.5.jar; 赠送原API文档:metrics-jvm-3.1.5-javadoc.jar; 赠送源代码:metrics-jvm-3.1.5-sources.jar; 赠送Maven依赖信息文件:metrics-jvm-3.1.5.pom; 包含翻译后的API文档:...
JVM调优总结 -Xms -Xmx -Xmn -Xss JVM调优总结 -Xms -Xmx -Xmn -Xss
如果不声明volatile,变量装载到本地变量 中,或者cpu cache中,多线程下很容易导 致状态不⼀一致。 • 声明了volatile,每次访问的都是主存中的数 据,⼀一致性能提升,但是还是不可靠的。 • volatile字段的访问...
赠送jar包:metrics-jvm-3.1.5.jar; 赠送原API文档:metrics-jvm-3.1.5-javadoc.jar; 赠送源代码:metrics-jvm-3.1.5-sources.jar; 赠送Maven依赖信息文件:metrics-jvm-3.1.5.pom; 包含翻译后的API文档:...
java jvm 参数 -Xms -Xmx -Xmn -Xss -
JVM图解-JVM指令-JVM原型图.rar
nginx_upstream_jvm_route 是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。 安装方法(进入Nginx源码目录): #patch -p0 < /path/to/this/directory/jvm_route.patch # ./configure -...
JVM,MIB,可通过SNMP协议监控JVM运行情况
Grafana-JVM-Dashboard模板
不想写接口测试脚本了,我想做一个流量录制系统,把线上用户场景做业务回归,可能会接入很多服务系统,不想让每个系统都进行改造,有好的框架选择吗? 我想做一个业务监控系统,对线上核心接口采样之后做一些业务...
Java核心知识点整理(包括Java基础、JVM、数据库、计算机网络、算法、操作系统、设计模式、系统设计、框架原理)。 > # 目录结构 > > | :--: | :----: | :--------: | :--: | :------: | :------: | :------: | :--...
JVM规范--高手总结 Java相关 1 1.1Java定义 1 1.2Java的开发流程 1 1.3Java运行的原理 2 1.4半编译半解释 3 1.5平台无关性 4 JVM内存模型 4 2.1 JVM规范 5 2.2 Sun JVM 8 2.3 SUN JVM内存管理(优化) 10 2.4 SUN JVM...
nginx-upstream-jvm-route-0.1.tar.gz 用来实现Nginx Tomcat 集群session复制的问题!
JVM与GC调优课程视频 〖课程介绍〗: JVM与GC调优课程视频 〖课程目录〗: 1.笔记/ ├── 第1篇-字节码篇.png?x-oss-process=style/pnp8 ├── 第2篇-类的加载篇.png?x-oss-process=style/pnp8 ├── 第3篇-运行时...