温馨提示×

debian ulimit怎么查句柄

小樊
39
2026-10-06 22:04:51
栏目: 智能运维

在 Debian(以及绝大多数 Linux 发行版)里,“句柄”一般指 文件描述符(file descriptor,fd),常用 ulimit 来查看/限制。

下面按常见场景说明。


1. 查看当前 shell 的句柄限制(ulimit)

查看“软限制”

ulimit -n

查看“软 + 硬限制”

ulimit -Sn   # 软限制
ulimit -Hn   # 硬限制

示例输出:

1024

表示当前用户最多能打开 1024 个文件句柄。


2. 查看某个进程的句柄限制

方法一:通过 /proc

cat /proc/<PID>/limits | grep "open files"

方法二:通过 ls 看实际句柄数

ls -l /proc/<PID>/fd | wc -l

3. 查看系统级最大句柄数

cat /proc/sys/fs/file-max

当前已用句柄数:

cat /proc/sys/fs/file-nr

输出示例:

1024  0  65536

含义:已分配 / 已释放 / 最大


4. 临时修改句柄限制(当前会话)

ulimit -n 65536

仅对当前 shell 及其子进程有效,重启失效。


5. 永久修改(Debian 推荐方式)

方法一:/etc/security/limits.conf

sudo vim /etc/security/limits.conf

添加:

* soft nofile 65536
* hard nofile 65536

或指定用户:

www-data soft nofile 65536
www-data hard nofile 65536

⚠ 需要 重新登录 或重启生效。


方法二:systemd 服务(重要)

如果是 systemd 启动的服务,limits.conf 可能不生效,需要在 service 文件里加:

[Service]
LimitNOFILE=65536

然后:

systemctl daemon-reload
systemctl restart xxx

6. 常见问题

Q:ulimit 改了但程序还是报错 “too many open files”

  • 程序是 systemd 启动的
  • 程序在 ulimit 修改前已启动
  • 硬限制太小

Q:Docker 容器里不生效?

需要在:

  • 宿主机 limits
  • docker run 加 --ulimit nofile=65536:65536

如果你愿意,可以告诉我:

  • 你是 普通用户 / root
  • 是 物理机 / 容器 / systemd 服务
  • 报错场景(如 Nginx、Java、MySQL)

我可以给你更精确的配置方案。

0 踩