MySQL 服务端在 Docker 容器里启动极其缓慢的解决方案

该文章根据 CC-BY-4.0 协议发表,转载请遵循该协议。
本文地址:https://fenying.net/post/2023/03/19/mysql-starts-slowly-in-docker/

最近一段时间,发现在 Docker 容器里部署的一个测试用 MySQL 服务端启动极其缓慢,经过排查,竟然是因为文件打开数限制太大导致的……

这个现象并不是一直以来都有的,而是最近几个版本滚动升级了 Archlinux 之后才出现的,具体表现为:

  • 启动极其缓慢,要等待非常长的时间才能启动成功;
  • 容器启动后,mysqld 进程占据了大量的内存;
  • 在配置了 Docker 容器内存限制的情况下,大概率启动失败;

据此在网上查找了解决方案,偶然看到一个解决方案:docker-library/mysql#579。 居然是因为容器内的默认文件打开数限制巨大无比,通过如下命令可以确认:

1docker run --rm mysql:5.7 /bin/bash -c 'ulimit -Hn && ulimit -Sn'

在我系统里显示为

11073741816
21073741816

这个问题的根源是 Docker 配置里设置的 LimitNPROC=infinity ,这个 infinity 在部分系统里从 1048576 (2^20) 变成了 1073741816 (2^30)

问题遂解。

参考:

comments powered by Disqus