ulimit -a 可查看当前 shell 会话所有资源软硬限制,如 open files、stack size、max memory size 等,单位分别为个、KB、KB,仅限本会话生效。

麒麟OS终端中需要快速确认当前会话或系统整体对进程资源(如文件描述符、堆栈、内存等)的强制约束,避免因超出限制导致服务崩溃或命令失败,必须分层调用对应命令查看各层级生效值。
查看当前用户会话的全部资源限制
这一步操作起来很简单,直接执行一条命令就能看到所有软硬限制的当前值。
在终端中输入:ulimit -a 并回车执行。
输出中每一行代表一项资源限制,例如 open files 对应文件描述符数量,stack size 对应堆栈大小(单位KB),max memory size 对应最大常驻内存(单位KB)。注意:该命令只显示当前 shell 会话的限制,不反映系统级或其它登录会话的配置。
单独查看文件描述符限制
当遇到“Too many open files”错误时,需精准区分软限制与硬限制。
方法一:查看当前软限制(进程可实际使用的上限)→ ulimit -n
方法二:查看当前硬限制(软限制不可超过此值,仅 root 可调高)→ ulimit -Hn
方法三:若需同时显示两项,运行 ulimit -Sn && ulimit -Hn,第一行是软限制,第二行是硬限制。软限制低于硬限制才合理;若两者相等且数值过低(如1024),说明已到上限临界点,必须调整。
查看系统级全局文件描述符上限
该值由内核参数 fs.file-max 控制,决定整个系统可分配的文件描述符总数,不受用户限制约束。
第一步:执行 cat /proc/sys/fs/file-max
第二步:该数值通常为内存 KB 数的约 1/10,例如 64GB 内存机器常见值为 6291456。若该值低于 1048576,高并发服务易触发全局耗尽。
第三步:也可用 sysctl fs.file-max 替代,效果相同,但 cat 方式更轻量、无额外依赖。
查看当前进程实际使用的文件描述符数量
仅看限制值不够,必须验证某进程是否已逼近上限。
先获取目标进程 PID,例如查 nginx 主进程:pgrep -f 'nginx: master'
再统计其已打开的 fd 数量:ls /proc/<strong>【PID】</strong>/fd 2>/dev/null | wc -l(将【PID】替换为上一步得到的实际数字)
若结果接近 ulimit -n 输出值,且进程日志持续报错“Too many open files”,基本可判定为该进程自身达到用户级限制,而非系统级不足。
查看堆栈大小限制
Java、Python递归或C++多线程程序崩溃前常伴随“Segmentation fault”,很可能是堆栈溢出。
执行:ulimit -s
输出单位为 KB,默认值通常为 8192(即 8MB)。若运行大型 Java 应用时报错,该值必须提升至 65536(64MB)以上。注意:【systemd 服务不继承此值,需单独配置 LimitSTACK】。

















