服务器默认的文件描述符是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就能看到效果
这样无论使用哪个用户,无论是否重启都不会失效了。