centos6.3宕机后引发的jdk1.6及文件损坏问题

       网银互联萧山机房竞然出现断电的情况,整整一个白天才慢慢恢复基本正常,而托管商连UPS及发电机都没有准备充分,另外中国的建筑施工队随时随地乱挖乱掘,这样的天灾人祸看来也得有预案才好。来电后,基本上都自动重起服务,大部分处于正常状态。但留下了两个问题。

 1、jenkins自动发布系统坏掉了。在Maven compile时撼住,无法编译下去,直接使用mvn可以看到相关的错误日志。jenkins是我们的发布集成系统,没有它我们修改bug、及发布新功能就要用手动的模式了。

2、第1个问题解决后,出现java 2d使用Font相关功能坏掉,画出的宋体中文都变乱码了。

 

第1个问题解决办法:

找不到问题的头序,也不知道宕机哪个文件损坏了,决定试试升级jdk1.7;升级后第1个问题得到解决,这个问题是jdk1.6的一个bug,而宕机后刚好引发了这个bug。这个bug确实需要某种条件的触发才会出来,一旦解发后,就再也无法完成compile了,这个后来我在测试环境得到了重现。因为测试环境的jenkins也是jdk1.6版本,使用一直没有问题,我先把jenkins升级到jdk1.7,当然能正常使用,又把他降为jdk1.6,就出现一模一样的无法完成compile的情况了。之后就再也无法使用jdk1.6,除非升级,我的jdk1.6小版本号是jdk1.6.0_17。官方大致的说法是javac 时文件数不能太长。再此过程中,也试过只编译个别或数量较少的几个文件,确实可以通过,但整个工程的java文件编译时就撼住。升级到jdk1.7.0_40,问题得到解决。

 

第2个问题解决办法:

2.1、首先想到是不是中文编译及传参过程是不是出现乱码,经查不是这个问题。

2.2、会不会tomcat相关文件坏掉了,重新安装tomcat重起服务,问题依然存在。

2.3、又把jdk1.7降到jdk1.6有作用,但是现在编译的jenkins都升级到jdk1.7了,编译出来的class只能在用jdk1.7下才能运行。还是得想办法在jdk1.7下字体的问题。继续验证真的是jdk1.7的问题吗?在另外一台相同的操作系统下使用相同的jdk1.7和相同的tomcat运行,竞然没有问题,基本上能定位到是操作系统级的问题了。继续...

2.4、把/usr/share/fonts字体拷到/path/jdk1.7/jre/lib/fonts下,问题继续存在,期间有进一步调试应用,发现隶书是好的,宋体就会乱码。

2.5、放弃直接在/jre/lib/fonts下直接操作字体,恢复到jdk1.7初始安装带的几个字体,删除/usr/share/fonts下的所有字体,拷贝另外一台/usr/share/fonts。拷完之后,执行一下

fc-cahce -fv

再次重启tomcat,问题终于得到了解决。两点结论

一、jdk确实可以把字体加到/jre/lib/fonts下,因为我的jdk1.6加之前加的几个中文字体,因此它是好的。

二、如果/jre/lib/fonts没有找到字体,jdk会到/usr/share/fonts下继续加载。因此一般只要在这个目录扩展字体就可以了。但是宕机后这个目录下的文件出现损坏才出现这个问题。因此从另外一台拷贝过来字体文件后恢复正常。

 

你可能感兴趣的:(maven,Jenkins,字体,宕机,jdk1.7)