您的位置:首页 > 运维架构 > Linux

poi的No such file or directory异常分析

2017-02-03 22:45 295 查看
在鸡年里,我像勤劳的老公鸡早早的来到了公司。本打算这两天工作时间正好打发下假期综合征,但系统偏不遂人愿。一阵急促的电话声将我的思绪从九霄云外拉到了寒冷刺骨的凡间。业务人员在电话那头催促说"文件不能导出,赶紧看看”。

     我们的理念是 “ 一切为业务服务,为了业务的一切”,业务有难,八方支援。赶紧下机房,拉出日志检查问题。日志里面好几条“No such file or directory”异常,都是使用poi的SXXFWorkbook生成excel文件时抛出的。根据异常信息,定位到了TempFile这个类里。

                    
if (this.dir == null) {
this.dir = new File(System.getProperty("java.io.tmpdir"),
"poifiles");
this.dir.mkdir();
if (System.getProperty("poi.keep.tmp.files") == null) {
this.dir.deleteOnExit();
}
}
File newFile = File.createTempFile(prefix, suffix, this.dir);


      从异常信息来看应该是this.dir文件目录不存在导致,立马到/tmp目录下查证,果然poifiles子目录已经消失了。这可奇怪了,这个目录怎么会平白无故消失了,SXXFWorkbook在很多项目用了很多年都没有问题,怎么这次就莫名其妙的消失了。用histroy命令没有发现当前用户有删除操作和list reboot看看最近有没有重启(PS服务器是运行中心搭建的,我们只能只用一个只有很小权限的用户进行上线),搜索下代码也没有发现有主动的delete。真是奇了!!!

      只能想想/tmp目录是否有自动清理机制,但要是有自动清理机制,其他的项目早就出问题了。但也只能死马当活马医,查看了下/etc/cron.daily/tmpwatch

      
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
-X '/tmp/hsperfdata_*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d "$d" ]; then
/usr/sbin/tmpwatch "$flags" -f 30d "$d"
fi
done


      果然/tmp目录下的应用产生的文件和目录10天没有修改就会被删除,而我们的这个系统和之前系统的一个最大差别正是使用频次。出问题的系统只在每个月的前5个工作日有业务人员使用,这样自然导致poi生成的poifiles目录在下一次使用之前就会被删除掉。

      问题原因已经找到了,接下来只好拜托运行中心的兄弟们帮忙将poifiles加入到排除目录即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息