昨天突然收到运维信息说线上写日志太猛,磁盘饱满了,然后应用接口超时报警.....一系列问题突然涌现出来......然后运用截来一幅日志截图过来
线上tomcat报错日志我去。。。线上报这种设置redis异常日志居然没抛异常到业务日志上预警,也没能抓到全局异常;吓尿了,立马跑回公司排查问题;立马调线上日志下来看,马丹,12G日志。。。。没任何预警信息。经细看日志异常原来是设置保存redis缓存时没有序列化对象。
没有序列化后来序列化后解决了了问题。不过后来由于在线上模拟环境测试,被线上数据误导,有改成了保存string格式到redis上,就解决了。接下来就排查为什么没有抛出日志呢,经排查,原来是前辈们写工具时抓到异常后直接打印到容器上了,而没有抛出来,坑呀……
工具方法在解决此问题做一下总结:
1、平时编码时,注意自测并遇到读写io操作时,应考虑是否需要序列化等问题
2、排查问题遇到没有明显异常时,需打印堆栈信息并逐行分析源码根源问题
3、对于服务器写日志功能应做一个剩余磁盘检查,并处理,以防业务日志突增后占占满后,影响应用正常使用
4、对于代码异常尽量让异常可控,应做全局异常控制,并在写代码工具时,应尽量将异常控制好抛出外面、或业务层
网友评论