ulimit -a详解

修改需要root权限!!!!!

ulimit的功能描述:
假设一台机器现在有10人登陆,在系统资源没有限制的情况下,一个人又打开500个文件,每个文件有10m,那这个时候系统内存的资源就收到严重的挑战
而实际应用的环境要比这种假设复杂的多,例如在一个嵌入式开发环境中,各方面的资源都是非常紧缺的,对于开启文件描述符的数量,分配堆栈的大小,CPU 时间,虚拟内存大小,等等,都有非常严格的要求。资源的合理限制和分配,不仅仅是保证系统可用性的必要条件,也与系统上软件运行的性能有着密不可分的联系。这时,ulimit 可以起到很大的作用,它是一种简单并且有效的实现资源限制的方式。

在大型公司,有时候打的集群个访问量,有时候需要跑很多程序,有时候程序会莫名奇怪的挂掉,这个时候就需要看看你的ulimit的设置了

工作中最长用的参数:
ulimit -a 列出所有的参数选项
ulimit -H 设置硬件资源限制
ulimit -S 设置软件资源限制
ulimit -n 设置应许打开文件数

修改ulimit参数,配置文件是:/etc/security/limits.conf
格式:
domain:可以是用户或者用户组 *代表所有
type:可以有两个值,soft 和 hard
item:表示要限定的资源 可以有很多候选值,如 stack(最大堆栈大小),cpu(占用cpu的时间),nofile(最大打开文件数) 等等
例:* hard nofile 100 该行配置语句限定了任意用户所能创建的最大文件数是 100。
默认都是用的是soft
使用 ulimit 限制程序所能创建的 socket 数量
考虑到现实生活中的需求,在c/s模式中,一个服务器可能有多个客户端进行访问,如果socket数量过多,这是server就需要创建大量的socket端口,系统中往往是限制一个程序创建socket端口的个数的。那如何实现呢,当然是通过ulimit限制,ulimit并没有socket的参数选项,但是在linux系统中,一切皆文件,
1.我们是通过设置nofile的个数来显示socket的个数的(ulimit -n),
2.设置linux的最大进程数来控制(ulimit -u)

linux的系统默认是1024,但是在实际情况下往往是不够用的,可以根据自己的需要进行设置,我们单位平时设置的是196605
还有一个参数就是max user processes 最大进程数 ulimit -u 设置成196605

转载自http://lingjing.blog.51cto.com/9190942/1682173

### Oracle 用户 Shell Script 中 KSH 和 Ulimit 命令功能解析 #### 1. **KornShell (ksh)** 的作用 `/bin/ksh` 是一种增强型 Unix/Linux Shell,支持更丰富的语法特性以及更好的脚本编写能力。对于 Oracle 数据库环境而言,当 `SHELL=/bin/ksh` 时,会通过特定条件判断来调整资源限制参数。这有助于确保数据库进程能够获得足够的系统资源以优化性能。 如果当前用户的 SHELL 类型为 `/bin/ksh`,则执行以下命令[^3]: ```bash ulimit -p 16384 ulimit -n 65536 ``` 上述两条指令分别设置了最大伪终端数 (`-p`) 和打开文件描述符的最大数量 (`-n`)。 #### 2. **Ulimit 命令详解** `ulimit` 是 Linux/Unix 下用于控制用户可用资源的一个重要工具。它允许管理员或用户定义软限制(soft limit)和硬限制(hard limit),从而防止某个程序占用过多系统资源而影响其他服务正常运行。 具体来说,在此场景下涉及以下几个选项及其意义: - `-u`: 设置单个用户可以创建的最大线程数目(即进程数)。这里设定为 `16384` 表示允许 Oracle 用户最多启动如此多的并发线程。 - `-n`: 控制每个进程中可同时保持开启状态的文件句柄总数上限值设为了 `65536`,这对于大型数据库操作尤其必要因为它们通常需要处理大量数据流管道连接等对象实例化需求。 这些配置被写入到全局安全策略文件 `/etc/security/limits.conf` 当中以便永久生效,并且可以通过编辑该文档实现动态修改而不必重启整个服务器即可应用新的更改规则[^2]: ```bash oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 10240 ``` #### 3. **调试方法建议** 要验证上述设置是否正确实施并且发挥作用,可以从几个方面入手进行测试与排查问题所在之处: ##### A. 查看现有极限值 登录目标主机作为 oracle 用户之后输入下面这条简单的 bash 指令查看目前所处 session 上的各种 resource limits 实际数值是多少: ```bash ulimit -a ``` 应当能看到类似于这样的输出结果其中包含了我们之前提到过的那些关键项比如 max user processes (-u), open files(-n)等等... ##### B. 修改临时性超限尝试触发错误消息观察行为表现差异情况如何变化? 可以在交互式的 shell 环境里手动调高某些限额然后再去跑一些消耗相应资源的应用看看会不会报错或者异常终止之类的状况发生. 例如试着把能打开的最大 fd 数量提升至远超过实际硬件支撑范围之外再发起一次大规模查询请求活动记录下来前后对比分析原因找出瓶颈位置进而采取针对性措施加以改进解决办法. 最后记得一定要恢复原来的合理范围内以免造成不必要的麻烦! --- ### 提供一段示范代码帮助理解整体流程逻辑关系更加清晰明了. 以下是综合考虑各种因素后的完整版本 profile 配置片段展示给大家参考学习之用: ```bash if [ "$USER" = "oracle" ]; then if [ "$SHELL" = "/bin/ksh" ]; then ulimit -p 16384 # Set maximum number of pseudo-terminals to 16,384 ulimit -n 65536 # Allow up to 65,536 file descriptors per process else ulimit -u 16384 # Limit the total number of threads/processes to 16,384 ulimit -n 65536 # Same as above but applies regardless of shell type used by 'oracle' account holder during login sessions etc.. fi fi ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值