一、 分析
2007年10月分,夏令时曾经做更改,2007年与之前发布的jdk版本均有此问题,2007年后发布的jdk版本不会出现此bug。一线版本jdk为1.5是 2004年发布
在10.78.228.102上已测试通过,时区更新工具在文档的最后。
参考资料:http://www.oracle.com/cn/technologies/java/tzupdater-readme-136440.html 时区更新下载:http://www.oracle.com/technetwork/java/javase/downloads/tzupdater-download-513681.html 二、 描述
模拟一线的情况成功,与一线的情况相同,在入夏令时和出夏令时会出现时间不能自动调整的问题。 三、 解决步骤 1、修改时区文件
使用root用户更改 /etc/sysconfig/clock TIMEZONE=\"Asia/Tehran\" UTC=\"yes\"
DEFAULT_TIMEZONE=\"Asia/Tehran\"
文件描述:TIMEZONE=\"Asia/Tehran\" 表示时区设置为Iran的时区
UTC=\"yes\" 表示启用UTC时间,这样jdk才可以从系统获取正确的时间,必须启用 DEFAULT_TIMEZONE=\"Asia/Tehran\" 默认时区
2、更新jdk时区信息 使用tzupdate.jar 更新jdk的时区信息,注意此时必须要停止所有可能使用jdk的进程,否则会导致升级失败,建议重启系统后升级,保证升级成功
1、下载tzupdate.jar到系统中 2、解压tzupdate.jar unzip tzupdater-1_3_42-2011k.zip 3、验证版本信息(注意大小写) java -jar tzupdate.jar –V 如果输出:The Java runtime doesn''t have time zone data (zi directory). 或者
tzupdater version 1.3.42-b02
JRE time zone data version: tzdata2005i
Embedded time zone data version: tzdata2011k
JRE time zone data 的版本是2007以前的,则表示时区信息没有升级到最新,可以继续升级操作 4、升级jdk时区信息 java -jar tzupdate.jar –u 没有任何输出则升级成功 5、测试升级是否成功,无任何输出则升级成功 java -jar tzupdate.jar –t
没有任何输出,则zone data文件验证通过 6、可检查升级后时区版本 java -jar tzupdate.jar –V 输出
tzupdater version 1.3.42-b02
JRE time zone data version: tzdata2011k
Embedded time zone data version: tzdata2011k 则表示升级成功。
3.保证以上步骤没有错误后,调整系统时间,重启操作系统,启动MOS5200系统。检查日志是否与操作系统时间一致。如果时间一致,升级成功。
升级碰到的一些问题
1. 升级后验证版本时输出 tzupdater version 1.3.42-b02
JRE time zone data version: tzdata2005i
There's no tzdata available for this Java runtime. 而前面操作没有报错,这是因为你的jdk还有进程在访问,导致升级失败,重启操作系统后执行之前操作就可以升级成功了。 2. 升级后系统时间跟日志时间相差3:30
因为jdk没有获取到正确的时区信息,给jboss的启动文件/opt/netwatcher/pm4h2/app/opt/jboss-report/bin/run.sh中添加启动参数 set JAVA_OPTS=%JAVA_OPTS% -Dprogram.name=%PROGNAME% -Duser.timezone=Asia/Tehran
具体位置加在62行左右,不能再if分支里,保证run.sh一定会执行这句。
重启web容器后就可以获取到正确时区,日志时间会跟随夏令时一起跳变。
3. 测试时输出
The Java runtime doesn''t have time zone data (zi directory). 表示没有升级上去。
因篇幅问题不能全部显示,请点此查看更多更全内容