默认情况下,Linux会使用最多40%的可用内存作为文件系统缓存。当超过这个阈值后,文件系统会把缓存中的内存全部写入磁盘,导致后续的IO请求都是同步的。将缓存写入磁盘时,有一个默认120s的超时时间,前述问题原因是IO子系统的处理速度不够快,不能在120s将缓存中的数据全部写入磁盘。IO系统响应慢,导致越来越多的请求堆积,最终系统内存全部被占用,导致系统hung死。
解决方案:
根据应用程序情况,对vm.dirty_ratio、vm.dirty_backgroud_ratio参数调优,推荐如下:
sysctl -w vm.dirty_ratio = 10
sysctl -w vm.dirty_backgroud_ratio = 5
sysctl -p
目前没有再复现同样的问题