最近碰到一个很奇怪的问题,两台一模一样的机器,一样的时间,一样的时区,一样的tomcat,一样的代码。但是tomcat在两台机器上获取到的时间就是不一样,不仅不一样,其中一个的tomcat时间跟系统时间还不一致。
最开始试着通过修改catalina.sh把两个tomcat的时区都改为GMT,结果得到的时间还是不一样:
JAVA_OPTS="-mx1600M -Duser.timezone=GMT"
后来把tomcat的时区改为:
JAVA_OPTS="-mx1600M -Duser.timezone=Europe/London"
突然发现这个时候这台tomcat时间与系统时间一向不一致的机器,这个时候tomcat时间突然跟系统时间一致了,而另一台一直直一致的现在却不一致了(系统用的时区是BST,开始改GMT时区时没看出来)。
这个时候我才突然想到,tomcat读取的可能是硬件时间(BIOS时间),而这两台机器很有可能一台设置了使用UTC时间一台设置了不使用UTC时间。遂查看配置文件/etc/sysconfig/clock,果然如此。
修改成一致的设置,重启,果然正常了。