服务器默认的文件描述符是1024个(linux),查看方式是执行ulimit -n命令。

对于高负载高连接的服务器来说,1024远远不够,至于修改方式,这里就不在赘述了,随便上网一搜就大把大把的文章介绍。

蚊子这篇要说的是如何查看一个进程能打开的最大文件描述符

不知到各位SA们有没有过这种困惑,系统的文件描述符,无论是软调整过了,还是修改配置文件硬调整过了,可对于应用程序来讲,是不是真正生效了呢?

这里还是有办法知道的,方法就是

cat /proc/PID/limists | grep “Max open files”

举例来说吧。

在文件的服务器上运行着

18452 ?        Ss     0:00 nginx: master process /usr/local/nginx/sbin/nginx
28952 ?        S      0:01 nginx: worker process     
28954 ?        S      0:01 nginx: worker process     

可以看到nginx前面的进程id,下面将PID替换成实际的进程id来看看结果。

# cat /proc/28952/limits |grep "Max open files"

Max open files            65536                65536                files  

由此得知,nginx的28952这个进程可以最多打开65536个文件。

通过以上方法,就能知道实际对于文件描述符的修改是否生效了。是不是很简单。

//

默认linux系统的文件描述符是1024,对于squid等一些服务来说,在大负载的情况下这点文件描述符是远远不够的,所以对于修改文件描述符来讲就变得很有必要了,在linux中有两种修改文件描述符的办法

一,通过ulimit命令修改

//显示当前文件描述符
ulimit -n

//修改当前用户环境下的文件描述符为65536
ulimit -HSn 65536

使用ulimit命令的缺点:

1,只能修改当前登录用户环境下的文件描述符,如果此用户来另外打开一个连接,此链接环境的文件描述符依然是没改前的
2,如果系统重启,以前修改都不再生效

二,通过修改limits.conf文件

编辑/etc/security/limits.conf 文件,在最后加入如下两行

*                               soft    nofile  65536
*                               hard    nofile  65536

保存退出,都不需要重启服务器,直接重新登陆用ulimit -n就能看到效果

这样无论使用哪个用户,无论是否重启都不会失效了。