最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
CentOS 服务器句柄数修改如何配
时间:2026-08-13 08:15:49 编辑:袖梨 来源:一聚教程网
CentOS 7+需同步配置三层句柄限制:limits.conf(仅PAM登录用户)、systemd.system.conf(全局服务默认值)、单个service文件(精准覆盖),且均不能超过内核nr_open和file-max上限。
CentOS 服务器句柄数修改不能只改一个地方,尤其在 CentOS 7 及之后版本(使用 systemd),必须同时配置三层,否则常见服务(如 nginx、MySQL、Java 应用)完全不受影响。
/etc/security/limits.conf:只对 PAM 登录用户生效
该文件仅控制通过 ssh、console 等方式登录的用户及其启动的进程(比如你手动执行 java -jar app.jar),对 systemctl 启动的服务无效。
- 添加如下内容(以 root 和所有用户为例):
* soft nofile 655350* hard nofile 655350
root soft nofile 655350
root hard nofile 655350
注意:
– soft 和 hard 必须都设,且 soft ≤ hard;
– 修改后需重新登录终端才生效;
– 若设置值超过内核限制 /proc/sys/fs/nr_open(默认 1048576),会导致 root 或特定用户无法登录(如设置 200 万但 nr_open=1048576)。
/etc/systemd/system.conf:全局 systemd 服务默认限制
这是影响所有 systemctl start xxx.service 启动服务的关键配置。systemd 完全忽略 limits.conf。
- 编辑
/etc/systemd/system.conf,取消注释并设置:
DefaultLimitNOFILE=655350DefaultLimitNPROC=65535
保存后必须运行:
sudo systemctl daemon-reload
已有服务需重启才生效(如 sudo systemctl restart nginx)。
单个 service 文件:精准覆盖某服务
若只想调高某个服务(如 Elasticsearch),不改动全局配置,推荐此方式:
- 执行:
sudo systemctl edit elasticsearch.service - 写入:
[Service]LimitNOFILE=655350
保存后同样需执行:sudo systemctl daemon-reload && sudo systemctl restart elasticsearch
验证是否生效:systemctl show elasticsearch.service | grep LimitNOFILE
内核级上限检查与调整
上面所有配置都不能突破内核硬限:
- 查看当前上限:
cat /proc/sys/fs/nr_open(单进程最大句柄数) - 查看系统总句柄池:
cat /proc/sys/fs/file-max(全系统可分配总数) - 如需提高,编辑
/etc/sysctl.conf:
fs.nr_open = 2097152fs.file-max = 2097152
然后执行:sudo sysctl -p
注意:nr_open 设置过高(如超 200 万)可能引发登录失败,务必留余量并测试。