服务资源加载延迟异常增加
问题描述
昨天线上遇到一个奇怪的问题,发现服务读取资源延迟突然变高,我们的服务使用的是共享文件系统。资源更新时间是08:40左右
问题分析
第一步
分析:检查cpu,内存,磁盘使用率指标
结论:未发现异常(其实8:40磁盘IO骤然下降,这个也是不合理的,当时没有发现)
第二步
分析:服务恢复关闭模型资源,怀疑模型资源导致异常,但是模型资源更新到服务产生问题期间有1小时左右的时差
结论:未发现确定证据,放弃怀疑资源
第三步
分析:怀疑是某些特殊的请求导致了延迟高,对请求进行数据分析
结论:同事分析下来没有啥统一规律,现在回想一下这个思路不正确,请求导致的延迟高不会影响加载资源耗时
第四步
分析:疑是内存太少引发问题,因为是计算密集型服务,对内存资源消耗比较大,
机器上的空闲内存都在1G左右,是不是因为空闲内存太少,导致page cache不断置换,
每次都要去共享文件系统读文件,引发延迟高?
结论:找了反例,有一台机器空闲内存还有10G+,仍然出现问题
第五步
分析:期间发现宿主机上有安装杀毒软件,怀疑杀毒软件影响资源读取
结论:卸载杀毒软件,未能解决问题
第六步
分析:维护共享文件系统同事反馈出问题的时间段,磁盘IO反常下降,这个不合理。
IO下降?读阻塞?继续观察系统文件相关信息,发现文件描述符的增长有异常,
文件描述符的增加趋势跟服务出问题的时间段完美匹配,怀疑模型资源更新导致文件描述符异常增长,
文件描述符异常增长又影响了共享文件系统.
结论: 按照上面思路,重新加载模型资源,发现文件描述符果然出现了增加,使用有问题的模型长时间压测,直到文件描述符的增加一定阈值,复现了服务延迟增加问题.
总结
这次问题分析耗时三天,定位多次陷入绝境,我的失误有以下几点
一、这次出现问题为啥没有直接怀疑模型问题,主要是模型更新后问题爆发在2h之后,一般认为模型是只读资源不会影响耗时,从目前看来这个理解有误。
二、自身知识点掌握不够全面,异常增长的文件描述符可能会影响操作系统的读写,这个确实是一个知识盲区。
三、加载资源慢,还是首先需要看磁盘读写情况,最好精确到进程级别。读取资源频繁,磁盘IO异常的高,肯定是系统资源不够,需要扩容解决,但是磁盘IO比较低也不合理,需要考虑当前系统的状态(系统负载,文件描述符,CPU,内存)