首页 > Linux > linux ulimit

linux ulimit

系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段。ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制。

ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。
ulimit 指令参数

选项 [options]	含义	
-H	 设置硬资源限制,一旦设置不能增加。	
-S	 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。	 
-a	 显示当前所有的 limit 信息。	 
-c	 最大的 core 文件的大小, 以 blocks 为单位。	
-d	 进程最大的数据段的大小,以 Kbytes 为单位。	
-f	 进程可以创建文件的最大值,以 blocks 为单位。
-l	 最大可加锁内存大小,以 Kbytes 为单位。	
-m	 最大内存大小,以 Kbytes 为单位。
-n	 Linux操作系统对一个进程可以打开最大文件描述符的数量。	
-p	 管道缓冲区的大小,以 Kbytes 为单位。	 
-s	 线程栈大小,以 Kbytes 为单位。	
-t	 最大的 CPU 占用时间,以秒为单位。	 
-u	 用户最大可用的进程数。	
-v	 进程最大可用的虚拟内存,以 Kbytes 为单位。


在我的centos 6.3 32位系统输入 ulimit -a 结果如下

这边重点描述下红色部分
ulimit -n

问题: Can’t open so many files 对于linux运维的同学们,相信都遇到过这个问题。
在Linux下一切资源皆文件,普通文件是文件,磁盘打印机是文件,socket 当然也是文件。系统默认设置成1024,但是这个数字对于服务器特别是大并发的远远是不够的,所以,我们需要结合实际情况修改成一个更大更合理的值。

修改方法

临时解决方案: ulimit -SHn 65535

永久解决方案,注意,切勿设置过大,造成服务器无法启动,小于 /proc/sys/fs/file-max

vim /etc/security/limits.conf

# 确认包含下面的内容:
* soft nofile 65536
* hard nofile 65536

保存,然后重启
注:65536 是我这边的设定值,读者也可以自行设置一个合适的值,* 代表针对所有用户

另外还有一个,/proc/sys/fs/file-nr,可以看到整个系统目前使用的文件句柄数量

ulimit -u
比如我们在模拟大规模http并发测试的时候,客户端会报一个无法fork new proc异常,原因是受到了最大进程1024的限制
解除 Linux 系统的最大进程数
方法如下
vim /etc/security/limits.d/90-nproc.conf

# 添加如下的行
*          soft    nproc     102400
root       soft    nproc     102400

 

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
*