在 Debian(以及绝大多数 Linux 发行版)上,ulimit 对 MySQL 是重要且常常被忽视的一个因素,但是不是“致命重要”要看使用场景。
下面分点说清楚。
ulimit 用来限制单个进程能使用的系统资源,比如:
MySQL 是典型的高并发、多文件、多线程程序,所以和 ulimit 关系很大。
ulimit -n
MySQL 会:
后果:
Too many open files
✅ 生产环境常见值:
nofile = 65535 或更高
ulimit -u
影响:
Can't create thread
✅ 建议:
nproc = 足够大(如 32768)
如果你用了:
innodb_flush_method = O_DIRECT
或
large pages
可能需要:
memlock unlimited
否则可能启动失败或报警。
ulimit -c
不是性能问题,但:
⚠️ 非常重要的点
在 Debian 上:
ulimit -n 65535systemd 启动的systemctl edit mysql
加入:
[Service]
LimitNOFILE=65535
LimitNPROC=32768
然后:
systemctl restart mysql
验证:
SHOW VARIABLES LIKE 'open_files_limit';
以下情况 ulimit 影响较小:
但生产环境几乎一定会遇到
在 Debian 上,ulimit 对 MySQL 很重要,尤其是 open files 和 max processes;而且必须通过 systemd 配置,而不是 shell 里 ulimit。
如果你愿意,我可以:
Too many open files 问题你可以直接贴报错或 ulimit -a 输出。