欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

centos6.3宕机后引发的jdk1.6及文件损坏问题 jenkins字体maven宕机jdk1.7

程序员文章站 2022-07-13 08:48:31
...

       网银互联萧山机房竞然出现断电的情况,整整一个白天才慢慢恢复基本正常,而托管商连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下继续加载。因此一般只要在这个目录扩展字体就可以了。但是宕机后这个目录下的文件出现损坏才出现这个问题。因此从另外一台拷贝过来字体文件后恢复正常。