文件打开数

文件打开数

查看当前文件打开数限制

查看系统级限制

# 查看当前系统限制
cat /proc/sys/fs/file-max
cat /proc/sys/fs/file-nr

查看用户级限制

# 查看当前用户限制
ulimit -n  # 查看软限制
ulimit -Hn  # 查看硬限制

# 查看特定进程的限制
cat /proc/<PID>/limits | grep "Max open files"

查看已使用的文件数

# 查看系统已使用的文件描述符数量
cat /proc/sys/fs/file-nr
# 输出三个数字:已分配文件句柄数 | 已使用文件句柄数 | 文件句柄最大值

# 查看所有进程打开的文件数
lsof | wc -l

# 查看特定进程打开的文件数
lsof -p <PID> | wc -l

修改文件打开数

临时修改(重启失效)

# 修改当前会话的限制
ulimit -n 65536

# 修改系统级限制(立即生效)
echo 1048576 > /proc/sys/fs/file-max

永久修改

  1. 修改系统配置文件
# 添加或修改以下参数
fs.file-max = 1048576
fs.nr_open = 1048576

# 使配置立即生效
sudo sysctl -p
  1. 修改用户限制(针对特定用户或所有用户)
# 在文件末尾添加(针对所有用户)
* soft nofile 65536
* hard nofile 131072

# 或针对特定用户
username soft nofile 65536
username hard nofile 131072
  1. 对于systemd服务(重要!CentOS 7/Rocky 9大部分服务使用systemd)
# 方法A:修改全局配置
sudo vi /etc/systemd/system.conf
# 取消注释并修改:
DefaultLimitNOFILE=65536
DefaultLimitNPROC=65536

# 方法B:针对特定服务
sudo vi /usr/lib/systemd/system/<service-name>.service
# 在[Service]部分添加:
LimitNOFILE=65536
LimitNPROC=65536

# 重新加载systemd配置
sudo systemctl daemon-reload
sudo systemctl restart <service-name>

验证修改结果

# 1. 验证系统级限制
cat /proc/sys/fs/file-max

# 2. 验证用户级限制(重新登录后生效)
ulimit -n
ulimit -Hn

# 3. 验证特定进程的限制
cat /proc/self/limits | grep "Max open files"

# 4. 验证服务进程的限制
sudo systemctl show <service-name> | grep LimitNOFILE