阿里云ECS的CPU100%排查( 三 )


10)因为ECS2的调用ECS1的nfs共享文件,所以lsof也有读不到那么多句柄数的理由 。如果说是nfs的服务本身就有缓存,导致问题的话,我查看了配置文件,还是默认值允许缓存,30S过期,根本不会因为nfs的缓存造成打开文件过多 。如果我们的后端程序打开之后没好好处理的话,那倒有可能 。然后尝试排除:我改了ECS3的配置,使程序只读ECS1后端,从ECS1上面却看不到有什么异常表现,说明PHP程序已经好好处理了打开的文件 。也不是docker挂载了nfs的共享的问题,因为nginx也有挂载 。排查到这里也很大程度上解决问题,而且缓存了nfs的全部共享文件,句柄并没有增加,也算合理,所以就增加了打开文件数的限制 。
11)现在排查的结果是跟后端和nfs共享有关 。就是说,后端挂载了nfs的网络共享,被程序读取 。而程序释放之后,在正常背景的硬盘文件是没有缓存的 。但是在nfs挂载的环境下,缓存并没有得到释放 。
12)总结:很多问题的排查和我们的猜想结果一样,但是有些例外的情况 。比如这次我想到的原因都一一排除,但是问题也是在一步步排查中,逐步被发现的 。

【阿里云ECS的CPU100%排查】


推荐阅读