前些天接到了一个bug,关于tomcat异常关闭。 起先是接到投诉,说 tomcat晚上被强制关闭了,后来发现是一行代码导致的,File.delect(); 类似于以下代码:
File files
= new File("C:\\Users\\win7\\Desktop\\test.docx");
files
.delete();
当前代码,我没注意到时什么原因,只是排查到是因为这行代码导致的tomcat崩溃,当时360没有任何提示,界面上面也没有任何异常信息,仅仅是被关闭了。 后来有很多烟雾弹: A:代码有bug,导致的tomcat异常关闭 处理:分析代码是否有问题,在本地无异常,上到测试环境也没有问题 B:java回收机制问题 处理:还是在写法上面做处理 C:升级运行环境 处理:tomcat 7.0.68 + jdk1.7.0.80升到tomcat 8.5 + jdk 1.8.0.203,奇怪的现象出现, 升级之后居然可以正常delete,非常奇怪。但是jdk 7 跟 8 有个分水岭,很多框架不能支持。例如:Spring 2.0 只支持到1.7,那时还没有1.8jdk,为何可以成功,至今无解 D:升级失败(因为要升级的话工程量太大,要加钱的),然后放弃,重新返回研究代码是否出现什么bug,在研究的途中发现一个数量很奇怪,为什么是删除 5 个文件会失败,而删除4个文件却不会失败。 处理:分析回收机制,重写代码,依然没有修复这个bug E:重点分析“5”这个数量,偶然发现,有个360在运行,我点击查看日志: 好吧,被这个软件给kill掉了。
总结:若发现有如下异常 1、tomcat 异常关闭, 2、没有报错信息, 3、查不到任何记录, 可先看看有没有保护程序在运行着。上面就是一个文档保护机制,不允许次数过多的修改文件。复制文件,删除文件,修改文件都会被判定是病毒。可先排查是否存在这种保护程序的存在。个人觉得linux同样可用!