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