修改Linux文件句柄限制                   1. #vi /etc/profile,增加ulimit -HSn 65536

1.  添加ulimit -HSn 655350   到/etc/profile

2. 配置生效  source /etc/profile

 

分类: LINUX

2010-09-08 00:06:51

 
在Linux下,我们使用ulimit -n命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。

   对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。如下面一段小脚本可以帮你查看:lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
   但是如果系统并发特别大,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:ulimit -HSn 8092

以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后

 

1,临时生效

# ulimit -SHn 10000

其实ulimit 命令身是分软限制和硬限制,加-H就是硬限制,加-S就是软限制。默认显示的是软限制,如果运行ulimit 命令修改时没有加上-H或-S,就是两个参数一起改变。

软限制和硬限制的区别?
 

硬限制就是实际的限制,而软限制是警告限制,它只会给出警告。

2,永久生效

要想ulimits 的数值永久生效,必须修改配置文件/etc/security/limits.conf
在该配置文件中添加
* soft nofile 204800  
* hard nofile 204800

* soft nproc 204800
* hard nproc 204800 

echo "* soft nofile 204800"  >> /etc/security/limits.conf
echo "* hard nofile 204800"  >> /etc/security/limits.conf

echo "* soft nproc 204800"  >> /etc/security/limits.conf
echo "* hard nproc 204800 "  >> /etc/security/limits.conf

* 表示所用的用户

3,修改系统总限制

其实上面的修改都是对一个进程打开的文件句柄数量的限制,我们还需要设置系统的总限制才可以。

假如,我们设置进程打开的文件句柄数是1024 ,但是系统总线制才500,所以所有进程最多能打开文件句柄数量500。从这里我们可以看出只设置进程的打开文件句柄的数量是不行的。所以需要修改系统的总限制才可以。

echo  6553560 > /proc/sys/fs/file-max

上面是临时生效方法,重启机器后会失效;

永久生效方法:

修改 /etc/sysctl.conf, 加入

echo   fs.file-max = 6553560  >> /etc/sysctl.conf

重启生效

---------------------
作者:saga_gallon
来源:CSDN
原文:https://blog.csdn.net/saga_gallon/article/details/80305515
版权声明:本文为博主原创文章,转载请附上博文链接!

 

修改linux的最大文件句柄数限制
 对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:
1
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
 
修改linux的最大文件句柄数限制的方法:
      1)ulimit -n 65535  
            在当前session有效,用户退出或者系统重新后恢复默认值
      2)修改profile文件:在profile文件中添加:ulimit -n 65535 
           只对当个用户有效
      3)修改文件:/etc/security/limits.conf,在文件中添加:(立即生效-当前session中运行ulimit -a命令无法显示)
 
[html]  
* soft nofile 32768 #限制单个进程最大文件句柄数(到达此限制时系统报警)  
* hard nofile 65536 #限制单个进程最大文件句柄数(到达此限制时系统报错)  
      4)修改文件:/etc/sysctl.conf。在文件中添加:
[html]  
fs.file-max=655350 #限制整个系统最大文件句柄数  
      运行命令:/sbin/sysctl -p 使配置生效

 

 

 

 

 

 

1. #vi /etc/profile,增加ulimit -HSn 65536















修改linux的最大文件句柄数限制
 对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:
1
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
 
修改linux的最大文件句柄数限制的方法:
      1)ulimit -n 65535  
            在当前session有效,用户退出或者系统重新后恢复默认值
      2)修改profile文件:在profile文件中添加:ulimit -n 65535 
           只对当个用户有效
      3)修改文件:/etc/security/limits.conf,在文件中添加:(立即生效-当前session中运行ulimit -a命令无法显示)
 
[html]  
* soft nofile 32768 #限制单个进程最大文件句柄数(到达此限制时系统报警)  
* hard nofile 65536 #限制单个进程最大文件句柄数(到达此限制时系统报错)  
      4)修改文件:/etc/sysctl.conf。在文件中添加:
[html]  
fs.file-max=655350 #限制整个系统最大文件句柄数  
      运行命令:/sbin/sysctl -p 使配置生效