近期公司服务器中使用其他时区的一台服务器上的tomcat启动后,获取的时间和服务器的时间不一致,导致获取时间的相关程序出现时间错误。
为了这个问题,我查找了linux系统中的所有关于时区设置的地方,没有发现有任何问题,重启服务器也没有解决这个问题。
最后经过与相关人员讨论后,我们认为有可能是JVM中的时区和linux系统的时区不一致导致的,检查JVM中的时区。经过baidu后发现了这条命令:
#java -XshowSettings:all
或
#java -XshowSettings:local
可以查看JVM中的设置,服务器在这个设置中有关时区的地方为:
user.timezone=
竟然是空的。
我在网上查找了JVM设置时区的问题,找到如下解决办法:
修改tomcat/bin/catalina.sh文件
在文件的开头添加如下内容:
export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=时区"
将上面的时区修改为相应的即可,例如:Asia/shanghai
然后重启服务器后,问题解决。
现在回顾一下,我认为,这个问题应该是JVM获取时区时,应该是获取的自己设置的时区,而不是获取的系统的时区,不知道这个是否正确,只是作为一个已经解决的问题记录于此,仅供参考。