首页/系统/信创系统运维速查/ulimit 查看与临时调整会话限制
服务与运维65 条

ulimit 查看与临时调整会话限制

ulimit 查看/设置当前 shell 会话的资源上限(打开文件数、进程数、栈等),-n 是服务排障高频项;仅对当前会话生效,持久化要改配置。

信创系统运维速查系统更新于 2026-10-13

ulimit 管的是什么

ulimit 是 shell 的内建命令,用来查看和调整当前会话及其子进程能使用的资源上限,覆盖打开文件数、进程数、栈大小、核心转储大小等项目。它分软限制与硬限制两层:软限制是当前实际生效的阈值,硬限制是软限制能提到的高度。最关键的一点是作用范围——它只影响这个 shell 与它启动的进程,对已经在运行的服务毫无作用,那些进程的上限由它们启动时的环境决定。

基本信息

所属shell 内建命令,不依赖外部工具
作用范围当前会话及其子进程
两层限制软限制是实际阈值,硬限制是上限
查看全部加查看全部选项可一次列出所有限制项
已运行进程读进程的 limits 文件查看其真实上限
权限差异普通用户只能降低,提高上限通常需要管理权限

典型使用场景

  • 手工压测排障:在会话里临时提高打开文件数,验证是否为上限导致失败
  • 确认当前阈值:排查连接异常前先看清会话里的实际限制
  • 核对服务限制:读取运行中进程的限制信息,与服务配置比对
  • 定位核心转储:确认核心转储大小是否被限制为零
  • 验证配置生效:调整服务上限配置后确认进程实际取值
  • 区分权限影响:确认普通账号与管理账号的限制差异

常用命令

常用命令
ulimit -n                 # 查看打开文件数上限
ulimit -a                 # 查看全部限制项
ulimit -Hn                # 查看硬限制
ulimit -Sn                # 查看软限制
ulimit -n 65535           # 临时提高(不得超过硬限制)
cat /proc/12345/limits    # 查看某个已运行进程的实际限制
cat /proc/sys/fs/file-max # 查看系统级上限

常用选项读法

选项含义使用提示
-n打开文件数上限高并发服务最常调整的一项
-u可创建进程数上限防止进程数爆炸时的重要约束
-c核心转储文件大小设为零表示不产生核心转储
-s栈大小过小可能导致程序异常终止
-v虚拟内存上限一般不建议随意收紧
-H / -S硬限制与软限制提高软限制前先确认硬限制余量
调整失败多半是因为没区分两层限制:软限制不能超过硬限制,普通用户只能在其范围内降低或小幅提升。要突破硬限制需要管理权限配合,且这种修改只在这个会话里有效,重启或重新登录后回到默认值。
已经在运行的服务不会因为你在会话里改了限制而变化,它的上限取自启动它的环境。排查服务遇到的文件句柄类报错时,应直接读取该进程的限制文件确认实际值,并通过服务单元里的资源上限设置来长期生效,而不是在命令行上调参数。

易错点

  • 在交互式会话里提高限制后以为服务也受影响,实际运行中的进程毫无变化,排查方向被带偏
  • 只看软限制不看硬限制,调整命令执行失败却误判为参数写法错误
  • 把限制只改在会话里不做持久化,重启或重新登录后失效,问题在下次高峰期复现
  • 不区分系统级上限与进程级上限,进程级调高后仍受系统级约束,问题依旧存在

数据来源与参考

  • man 1 bash(ulimit 内建)
  • man 5 limits.conf
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌