你有没有遇到过这样的情况:系统资源被某个进程耗尽,导致整个服务响应变慢,甚至崩溃?其实,很多类似的问题都可以通过一个简单的命令行工具——ulimit——来提前预防。它就像一个“资源管家”,专门用来控制 shell 进程及其子进程可以使用的系统资源上限。比如,你能限制某个用户能打开多少文件、能跑多少个进程,防止某个进程把整个系统的资源“吃干抹净”。

临时调整
最简单、也最直接的做法,就是临时调整。这种方法适合测试或快速解决问题,重启终端后就会失效。
先看看当前系统有哪些限制:
ulimit -a这条命令会列出所有资源的当前限制值,一目了然。
然后,针对需要调整的资源,直接用命令设置:
- 文件描述符(也就是能同时打开的文件数量):
ulimit -n - 用户能创建的进程数:
ulimit -u - CPU 时间(以秒为单位):
ulimit -t - 虚拟内存使用上限(以 KB 为单位):
ulimit -v - 进程能占用的最大常驻内存(不受swap影响):
ulimit -m
- 文件描述符(也就是能同时打开的文件数量):
永久调整
当然,如果你想让这些设置一劳永逸,临时调整就不够用了。需要把配置写进系统文件里。
针对单个用户
打开该用户的 shell 配置文件。简单说,就是编辑用户家目录下的
.bashrc或.bash_profile:nano ~/.bashrc或者
nano ~/.bash_profile在文件末尾加上你想要的
ulimit设置,比如:ulimit -nulimit -u 保存退出后,记得让配置生效:
source ~/.bashrc或者
source ~/.bash_profile
针对所有用户
需要修改全局配置文件
/etc/security/limits.conf,这需要 root 权限:sudo nano /etc/security/limits.conf在文件里添加类似这样的行(记得把
换成实际用户名,换成具体的数值):soft nofile hard nofile soft nproc hard nproc 同样,保存并退出编辑器。
注意事项
- 权限:修改
/etc/security/limits.conf这类系统级文件,必须使用 root 权限。 - 重启服务:有些服务(比如数据库、Web服务器)可能需要重启才能读取新的资源限制。
- 系统限制:
ulimit并不是万能的,有些内核级别的参数(比如进程最大PID数量、内存总量),它管不了,需要去修改/etc/sysctl.conf或其他内核参数文件。
从实践来看,ulimit 是运维和开发人员手里非常实用的一个工具。用好它,你会发现很多棘手的资源争抢问题,其实在配置阶段就能提前规避。