本文介绍了Alibaba Cloud Linux 3 系统上当容器内存用满后可能会出现网络丢包的原因及解决方案。
现象描述
在Alibaba Cloud Linux 3上,当业务容器内存占满后,可能会导致和容器相关的网络出现丢包现象,例如:

问题原因
网络数据包进行内存分配时,所处为软中断上下文,在Linux kernel中需要通过非阻塞式申请内存,当容器内存满的时候不会对其可回收cache进行内存回收,因而会出现由于内存申请失败导致丢包现象。
影响范围
ALibaba Cloud Linux3 所有内核版本。
解决方案
当前问题并非内核问题,无修复补丁,但可以通过以下方式可以在一定程度上优化或解决业务问题。
方式1:
开启Memcg后台异步回收功能,动态对cache进行回收。
方式2:
升级到Alibaba Cloud Linux 4,更高版本的Linux内核中,网络数据包内存申请仍然是非阻塞式申请,但允许申请系统的保留内存,在系统预留内存足够的情况下可以成功分配。
该文章对您有帮助吗?