正确配置Linux系统ulimit值的方法【转】

转自:http://www.cnblogs.com/ibook360/archive/2012/05/11/2495405.html

在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题;这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用其实很容易就达到这个数量。下面说的是,如何通过正解配置来改正这个系统默认值。因为这个问题是我配置Nginx+php5时遇到了,所以我将这篇归纳进nginx+apache篇。

查看方法

我们可以用ulimit -a来查看所有限制值
[root@centos5 ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 4096
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
max rt priority                 (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited||<

其中 "open files (-n) 1024 "是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接数目)。这个值可用ulimit命令来修改,但ulimit命令修改的数值只对当前登录用户的目前使用环境有效,系统重启或者用户退出后就会失效(在布署Nginx+FastCGI我就遇到这个问题,将ulimit -SHn 65535放到/etc/rc.d/rc.local也没起什么作用)

系统总限制是在这里,/proc/sys/fs/file-max。可以通过cat查看目前的值,修改/etc/sysctl.conf 中也可以控制。

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

查找文件句柄问题的时候,还有一个很实用的程序lsof。可以很方便看到某个进程开了那些句柄,也可以看到某个文件/目录被什么进程占用了。

修改方法
若要令修改ulimits的数值永久生效,则必须修改配置文档,可以给ulimit修改命令放入/etc/profile里面,这个方法实在是不方便,还有一个方法是修改/etc/sysctl.conf。我修改了,测试过,但对用户的ulimits -a 是不会改变的,只是/proc/sys/fs/file-max的值变了。

我认为正确的做法,应该是修改/etc/security/limits.conf
里面有很详细的注释,比如
* soft   nofile   32768
* hard nofile 65536
就可以将文件句柄限制统一改成软32768,硬65536。配置文件最前面的是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制。

注意:这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning;其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变。

生效
因为我平时工作最多的是部署web环境(Nginx+FastCGI外网生产环境和内网开发环境),重新登陆即可(reboot其实也行)我分别用root和www用户登陆,用ulimit -a分别查看确认,做这之前最好是重启下ssh服务,service sshd restart。

时间: 2024-10-24 15:24:29

正确配置Linux系统ulimit值的方法【转】的相关文章

Linux系统ulimit值的正确设置方法

学习swoole的时候有一个max_conn参数, max_conn 描述:服务器允许维持的最大TCP连接数 说明:设置此参数后,当服务器已有的连接数达到该值时,新的连接会被拒绝.另外,该参数的值不能超过操作系统ulimit -n的值,同时此值也不宜设置过大,因为swoole_server会一次性申请一大块内存用于存放每一个connection的信息.这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器很容易就达到这个数量.

如何使用GUI来配置Linux系统防火墙

随着带宽的飞速扩宽,互联网上的信息交流日益增大,毫无疑问,互联网上的安全,操作系统平台的安全也逐渐成为人们所关心的问题.而许多网络服务器,工作站所采用的平台为Linux/UNIX平台.Linux平台作为一个安全性.稳定性比较高的操作系统也被应用到了商业或者民用的网络服务领域. 尽管Linux是安全系数比较高的操作系统,但是由于它作为一种动态的.还在不断发展的操作系统,它自身仍然不可避免的存在着这样那样的问题.加之 Linux的发行版本十分的多,版本的升级换代频繁,市面上仍然存在着许多存在缺陷,没

linux系统不同对象升级方法详细介绍

  当我们使用Linux一段时间以后,自然不会满足总是在没有任何变化的系统中工作,而是渴望能象在Windows系统中一样,不断对自己的Linux进行升级.另一方面,Linux本身就是一个开放的系统,每天都会有新的软件出现,Linux发行套件和内核也在不断更新.在这样的情况下,学会对Linux(包括系统本身和各种软件)进行升级就显得非常迫切了. 1.升级一般软件 一般来说,升级应用软件是比较简单的,因为你不用太在意升级后对其他软件的影响(如果是升级系统,情况就不一样了).首先,你必须找到希望升级的

Linux系统test命令使用方法介绍

Linux系统中有时需要检测某个条件是否成立,那么就要用到test命令了,Linux下test的用法有很多,下面就随小编一起来学习下Linux系统中如何使用test命令吧. 1.判断一个命令的结果使用test,其返回0,或一个整数.返回0表示true,返回整数表示错误码 2.获取上一个命令的返回结果使用$? 3.例如 我的服务器上面存在/home/www这样一个文件夹,所以ls /home/www这个命令的返回结果为0; 即echo $?的返回值为0 我的服务器上面不存在/home/kkk这样一

正确配置与维护Apache安全性设置方法_Linux

一,Apache服务器的介绍 Apache服务器它是Internet网上应用最为广泛的Web服务器软件之一.Apache服务器源自美国国家超级技术计算应用中心(NCSA)的 Web服务器项目中.目前已在互联网中占据了领导地位.Apache服务器得经过精心配置之后,才能使它适应高负荷,大吞吐量的互联网工作.快速.可靠.通过简单的API扩展,Perl/Python解释器可被编译到服务器中,且完全免费,完全源代码开放.如果你需要创建一个每天有数百万人访问的Web服务器,Apache可能是最佳选择. 二

查看Linux系统版本信息的方法小结

  如何查看Linux系统使用的版本信息呢? 下面这篇文章收集.整理了一些常见的查看Linux系统版本的方法.由于手头只有Oracle Linux.Centos Linux.Redhat Linux三个版本Linux,所以像Debian.Ubuntu之类的Linux系统,下面方法在这些版本都没测试过. 1:more /etc/issue 命令查看 1.1 Oracle Linux 代码如下: [root@DB-Server ~]# more /etc/issueOracle Linux Serv

加强企业Linux系统安全的若干方法

世界上没有绝对安全的系统,即使是普遍认为稳定的Linux系统,在管理和安全方面也存在不足之处.我们期望让系统尽量在承担低风险的情况下工作,这就要加强对系统安全的管理.为了帮助企业了解和掌握如何加强Linux系统在安全方面的管理,除了把预防工作提前做好外,还需要了解黑客常用手法. 下面,分别从黑客对Linux的入侵攻击和Linux系统的安全防护两个方面来介绍如何加强Linux系统在安全方面的管理. 防止黑客的入侵 在谈黑客入侵方面的安全管理之前,简单介绍一些黑客攻击Linux主机的主要途径和惯用手

Linux系统sleep命令使用方法说明

sleep,即睡眠的意思,在Linux系统中,sleep命令主要用来延迟shell脚本的时间,也可使用于Windows系统中,下面小编针对sleep命令在Linux系统中的用法做个详细介绍,并为大家区别下Linux sleep和Windows sleep命令的用法. linux sleep 命令用来睡眠一段时间,sleep 可以用来将目前动作延迟一段时间.时间的单位有:秒(s),分钟(m),小时(h),天(d) 用法如下: sleep Number(suffix) 默认单位是秒(s) sleep

fuser软件在Linux系统下的使用方法

在Linux中,fuser工具可用来查询文件的用户,除此之外,fuser还有很多用途,能够搭配参数使用,下面小编将针对fuser工具的使用方式给大家做个详细介绍,希望对你有所帮助. lsof也具备类似的功能,它也能够找出正在对指定文件访问的进程,两者的区别是fuser在于它可以一次杀死那些正在访问指定文件的进程. fuser常用的场合是: fuser可用于查询文件.目录.socket端口和文件系统的使用进程,并且可以使用fuser关闭进程. 当文件系统umount报device busy时,常用