docker排查OOM

发布于:2025-07-29 ⋅ 阅读:(18) ⋅ 点赞:(0)
思路:

1.先从代码程序上排查,线程池创建是否使用ThreadPoolExecutor,线程池各项设置是否合理。

任务对象是否释放,网关是否需要限流。

2.服务器内存大小,cpu使用率,存储空间大小,java程序启动类设置的参数,如MEM_XMX,MEM_XMS,MEM_XMN,-server -Xmx512m -Xms512m -Xmn256m -Xss256k等是否合理。


1.内存不足 (OOM Killer)

最常见原因:当容器内存超过限制或宿主机内存不足时,Linux 的 OOM Killer 会强制终止进程。
检查方法:

docker stats              # 查看容器资源使用情况
dmesg | grep -i kill      # 查看系统日志是否有OOM记录
journalctl -k | grep -i oom

解决方案:
优化应用内存使用(如调整 JVM 堆大小,如果是 Java 应用)
增加宿主机内存或减少其他容器资源占用


2. CPU 资源限制

如果容器 CPU 使用率持续 100%,可能被调度器终止
检查:

docker stats
top

增加 CPU 份额:docker run --cpu-shares=512 ...
限制 CPU 核心数:docker run --cpus=1.5 ...


3. 存储空间不足

磁盘写满会导致各种异常
检查:

df -h
docker system df

4. 应用自身崩溃

查看应用日志:

docker logs -f <container_name>

检查是否有未捕获的异常


5. 健康检查失败

如果配置了健康检查且失败,Docker 会重启容器
检查:

docker inspect <container_name> 

针对性建议
优先检查内存:



如果是 Java 应用:

确保设置了合理的 JVM 内存参数(如 -Xmx)
在docker-compose.yml中动态设置

6.内存不足

从 free -h 排查内存和Swap是否充足。
1. 启用 Swap 交换空间(必须做!)
# 创建 3GB Swap 文件(根据磁盘空间调整大小)

# 创建 3GB Swap 文件(根据磁盘空间调整大小)
sudo fallocate -l 3G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 永久生效(写入 /etc/fstab)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 验证
free -h  # 应显示 Swap > 0

7. 终极方案

升级服务器配置,升级到  4GB 或更高内存。

docker 相关命令

Docker 教程 | 菜鸟教程


网站公告

今日签到

点亮在社区的每一天
去签到