快速业务通道

SUSE LINUX系统文件句柄限制的修改

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-26

在SUSE Linux下部署应用的时候,有时会遇到“Socket/File: Can’t open so many files”的问题,这其实是SUSE Linux系统的文件句柄限制造成的,一般系统默认都是允许打开1024个文件,作为一台生产环境的应用服务器,是很容易就达到这个默认值的,因此我们需要把这个值改大一些.

文件句柄释义:在文件I/O中,要从一个文件读取数据,应用程序要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件.该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据.要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统.当完成任务后,在通过调用系统函数来关闭该文件.

下面我们看如何修改:

1、先查看系统默认值

注意红线标注的“open files (-n) 1024”这行显示文件句柄限制数量是1024,这个值对于实际生产环境的应用服务器来说太小了.我们需要修改文件句柄的大小.
2、修改系统默认文件句柄限制
#vi /etc/security/limits.conf
如果修改某个用户的文件句柄限制数量,可以增加如下两句:
你的用户名 soft nofile 2048
你的用户名 hard nofile 65536
如果将所有用户的文件句柄限制统一修改,可以增加如下两句:
* soft nofile 2048
* hard nofile 65536
注意wq保存退出. 我们添加的有soft, hard两种限制:硬限制是实际的限制,而软限制是warnning限制,只会做出warning.修改完保存重启shell即可(有些系统可能需要重启系统,SUSE LINUX是不用的),再用ulimit -a 查看一下设置发现已成功.


3、ulimit其实就是对用户和单一程序的限制,我们再看一下系统总限制:
查看系统总限制命令:
#cat /proc/sys/fs/file-max

查看整个系统目前使用的文件句柄数量命令:
#cat /proc/sys/fs/file-nr

如果要修改file-max和file-nr的值,需要通过vi /etc/sysctl.conf进行编辑修改,使用sysctl -p使其生效.

对于一般的应用来说(Apache、系统进程)1024完全足够使用,但是对于squid、mysql、java等单进程处理大量请求的应用来说就不够用了.那么如何知道当前进程打开了多少个文件句柄呢?我们可以通过这个来查看:
#lsof -n |awk ''{print $2}''|sort|uniq -c |sort -nr|more

左边一列是打开的文件句柄数量,第二列是进程ID号.如果系统并发特别大,文件句柄数很有可能会超过1024,这时候我们就要调整系统参数,以适应实际应用的变化.

补充:
查看某个进程开了那些句柄:
#lsof -p pid
查看某个进程开了多少个句柄:
#lsof -p pid |wc -l
看某个文件/目录被什么进程占用了,显示已打开该目录或文件的所有进程信息:
#lsof path/filename

本文出自 “滴水穿石” 博客,谢绝转载!

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多
上一篇: shell之1 100下一篇: cacti监控 On RHEL6

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号