A-A+

“Too many open files” 的解决方法

2013年05月27日 Linux 暂无评论 阅读 1,319 次
如果您有代购或者代维服务器、PHP网站建设、程序代码修改、系统开发等需求,可以联系我购买付费服务。QQ 379880222

– 合理配置Linux同时可打开文件句柄数限制及lsof命令使用
今天一上班就看到一来自性能测试组的一个系统错误报告,Linux系统下的应用在压力下会出现”Too many open files”的错误并导致服务停止。
其中这是老问题,就是需要合理配置Linux同时可打开文件句柄数限制。
当然,如果应用程序有bug,滥用资源是另一个问题了。

Linux把大部分资源都会虚拟成文件,象打开网络连接也都会占用文件句柄,Linux的默认限制一般是1024,这个限制对一般个人使用是没有问题的,但对一个特殊应用或都在大并发访问下是不够的。

用户级:
Linux限制每个登录用户的可连接文件数。可通过 ulimit -n来查看当前有效设置。如果想修改这个值就使用 ulimit -n 命令。
对于文件描述符增加的比例,资料推荐是以2的幂次为参考。如当前文件描述符数量是1024,可增加到2048,如果不够,可设置到4096,依此类推。
系统级:
系统级设置对所有用户有效。可通过两种方式查看系统最大文件限制
1 cat /proc/sys/fs/file-max
2 sysctl -a 查看结果中fs.file-max这项的配置数量
如果需要增加配置数量就修改/etc/sysctl.conf文件,配置fs.file-max属性,如果属性不存在就添加。
配置完成后使用sysctl -p来通知系统启用这项配置

如果想查看文件句柄的具体使用情况,可以使用lsof命令,给几个例子:

1. 查看某进程(pid)在使用的文件
lsof -p pid
2. 查找谁在使用某个文件
lsof /var/run/sendmail.pid
3. 查找监听端口25的进程
lsof -i :25

呵呵,功能还是很强大的。

给我留言