本站首页    管理页面    写新日志    退出                                          --==~欢迎光临FoxWolf的Blog~==--   



 日志搜索


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告


我的分类

日志更新

最新评论

留言板

链接

 


Blog信息
blog名称:FoxWolf
日志总数:127
评论数量:246
留言数量:0
访问次数:854132
建立时间:2006年5月31日




[Linux学习]一个进程能够打开最大文件句柄数的设置
文章收藏,  软件技术,  科学研究

FoxWolf 发表于 2008/7/15 15:48:55

  在Linux下,我们使用ulimit -n命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。 对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象 squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到 “too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:lsof -n |awk '{print }'|sort|uniq -c |sort -nr|more   在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:# lsof -n|awk '{print }'|sort|uniq -c |sort -nr|more    131 24204   57 24244   57 24231   56 24264 其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps 命令得到进程的详细内容。ps -aef|grep 24204 mysql  24204 24162 99 16:15 ?    00:24:25 /usr/sbin/mysqld 哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。 但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:ulimit -HSn 4096 以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后。(findsun提出的办法比较合理)   Ulimit命令设置限制     可以把命令加到profile文件里,也可以在/etc/security/limits.conf文件中定义限制。命令参数-a      显示所有限制-c      core文件大小的上限-d      进程数据段大小的上限-f      shell所能创建的文件大小的上限-m     驻留内存大小的上限-s      堆栈大小的上限-t      每秒可占用的CPU时间上限-p     管道大小-n     打开文件数的上限-u     进程数的上限-v     虚拟内存的上限


阅读全文(7928) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.219 second(s), page refreshed 144760773 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号