问题现象:
已经上线的系统,现场反馈有些模块点进去界面一直转圈,有些模块点进去正常。
问题推测:
这个系统因为用户只使用部分模块的功能,一直只关注用户使用的这些模块,其他模块平时不使用,维护和升级根本没有关注。是不是这些模块在升级过程中根本就是不可用的?
问题分析:
1、远程连接到现场。
远程到现场,发现部分模块是可以正常使用的。有些模块点进去界面就弹出“网络异常”。按F12,查看浏览器请求返回的是404。这让我进一步相信自己的推测:这些模块在升级中后台去掉了,或者后台修改了,导致根本就不可用。
2、查看本地源代码。
项目刚升级不久,本地还有源代码。对比了现场的请求,请求的地址确实是存在的。现场的人不会对后台进行改动的,可以确认这个报错的模块后端是正确的,只能怀疑前端人员做了改动。因为前端是分离的,后端只写接口,前端调用。甚至想到了问前端开发人员,为什么后端接口明明是有的,为什么前端调用报404?但是觉得这样没有道理,把报404的请求地址单独拷贝到浏览器中执行,也是报错的。就是说这个问题和前端是没有关系的。而就是有几个模块的请求拷贝到浏览器中再请求不报错。问题有点扑朔迷离了。
3、查看日志。
这个问题日志应该是没有记录的,因为请求根本没有到后台。但是还是抱着试试看的心态,准备查看后端系统日志。
系统是部署在Linux服务器上。Linux服务器按tab键是可以自动补全路径。但是在服务器上按下tab键,路径没有补全,弹出错误:“No space left on device”。
开始没有注意到这个重要线索,只是想查看下日志,不关注过程中的其他问题。为了查看日志,就输入了完整的路径。系统是部署到tomcat中,使用tail -f catalina.out查看实时日志,再在界面上点击有问 题的模块,发现没有记录日志,前端还是报错。
日志确实没有记录,查看日志是不可能了。
4、回过头再分析。
问题排查到这里,好像是没有线索了。可以排除是前端问题,应该单独在浏览器中执行请求是不报错的。可以排除后端问题,后端接口是存在的,现场不可能改动。日志没有记录。回顾整个排查过程,唯一的提示信息是:“No space left on device”。磁盘空间不足,应该影响整个系统,但是有些功能又能使用,这个怎么解释?
还是先看看服务器磁盘情况吧。使用df命令,发现/目录使用率达100%。之前好像也有磁盘满了问题,是tomcat下的catalina.out占用很大空间。
进入到tomcat目录,查看空间情况,发现catalina.out大小为636G!
使用命令du -sh *|grep G|sort -n
使用rm catalina.out清理掉了日志,但是df查看磁盘,发现使用率还是100%!难道还没有清理完?系统还是报错!
网上搜索了一下,删除的文件被进程占用,空间还没有释放。catalina.out是tomcat占用的,停掉tomcat,再重新启动。再df查看磁盘,使用率降到了23%,再访问系统,一切正常!问题得到解决!
另一个问题,为什么有些功能可以使用呢?这个问题因为不能重现问题,没办法进行分析,只能推测调用接口时,可能要创建临时文件,磁盘空间不足,不能创建成功!这个说法很牵强,后续如果问题重现有待研究。
问题总结:
分析问题中,不能放过任何一个蛛丝马迹。任何小的问题,都可能是分析问题的关键所在!