一个进程可以打开最大文件句柄数设到多大才合适(Linux)

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

        对于通常的应用来讲(象Apache、系统进程)1024彻底足够使用。可是如何象squid、mysql、java等单进程处理大量请求的应用来讲就有点捉襟见肘了。若是单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本能够帮你查看:java

lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more

 执行上述的脚本可能出现以下的结果: mysql

131 24204  
57  24244  
57  24231  
56  24264

其中,第一行是打开的文件句柄数量,第二行是进程号。获得进程号后,咱们能够经过ps命令获得进程的详细内容。sql

ps -aef|grep 24204  

mysql    24204 24162 99 16:15 ?        00:24:25 /usr/sbin/mysqld

哦,原来是mysql进程打开最多文件句柄数量。可是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。shell

        可是若是系统并发特别大,尤为是squid服务器,颇有可能会超过1024。这时候就必需要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制之分。能够经过ulimit来设定这两个参数。方法以下,以root用户运行如下命令(某些系统不容许普通用户修改ulimit的软/硬限制):服务器

ulimit -HSn 4096

以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。我的以为最好不要超过4096,毕竟打开的文件句柄数越多响应时间确定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。若是想永久保存下来,在/etc/security/limits.conf文件中设置最大打开文件数并发

* hard nofile 2048
* soft nofile 2048

或者socket

* - nofile 2048

这行设置了每一个用户的默认打开文件数为2048。 注意"nofile"项有两个可能的限制措施, 就是hard和soft。 要使修改过的最大打开文件数生效,必须对这两种限制进行设定。 若是使用减号字符(-)设定定, 则hard和soft设定会同时被设定。重启生效。ui

        硬限制代表soft限制中所能设定的最大值。 soft限制指的是当前系统生效的设置值。 hard限制值能够被普通用户下降, 可是不能增长。 soft限制不能设置的比hard限制更高。 只有root用户才可以增长hard限制值。code

        当增长文件限制描述,能够简单的把当前值双倍。 例子以下, 若是你要提升默认值1024, 最好提升到2048, 若是还要继续增长, 就须要设置成4096。进程

相关文章
相关标签/搜索