码迷,mamicode.com
首页 > 系统相关 > 详细

linux系统下too many files open如何定位与解决

时间:2018-10-30 21:24:06      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:post   打开   ping   永久   结束   art   etc   uri   分享   

   当应用进程打开的文件句柄数大于系统设置的句柄数,服务就会报错too many files open,那么如何解决这个问题呢?

1:查看当前系统设置的最大句柄数

命令:ulimit -a;可以看见系统设置的最大句柄数为:65535

 技术分享图片

2:统计系统中当前打开的总文件句柄数
lsof|awk ‘{print $2}’ |wc -l

3:根据打开文件句柄的数量降序排列,其中第一行是打开的文件句柄数量,第二行是进程号。可以看出来进程28811打开的进程数是:612

命令:lsof -n|awk ‘{print $2}‘|sort|uniq -c |sort -nr|more

技术分享图片

4:查看该应用进程的详细信息,可以查看是哪个应用占用的句柄数最大

命令:ps -ef|grep 28811

5:设置单个进程句柄数

如果系统并发特别大,单个进程设置的句柄数不合理,这时候就必须要调整系统参数,以适应应用变化。

 5.1:临时设置:把当前用户的最大允许打开文件数量设置为2048了,但这种设置方法在重启后会还原为默认值

命令:ulimit -n 2048

5.2:永久设置方法

命令:vim /etc/security/limits.conf  ;然后在文件最后加入:* soft nofile 65535、* hard nofile 65535即可生效

 

另:Linux /proc目录详解

Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。

linux打开文件通常都是open返回一个fd的形式,操作系统会维护当前进程打开文件的记录,但是数量是被限制的,操作系统能打开的fd总和也是有限的,如果进程一直打开文件而不关闭,那么当调用open时操作系统将会返回失败。所以特别实在服务型进程和常驻内存的进程中,打开了文件就要记得在不用时关闭,否则只打开不关闭将会泄露句柄。当然进程结束,操作系统会自己关闭回收fd的,所以如果进程执行时间短就结束了,打开fd少,理论上也可以不显式关闭,但是调用close还是一种良好的习惯。

1:查看某个进程打开的文件文件描述符

/proc/pid/fd文件夹是Linux挂载的记录当前打开文件描述符(fd)信息的,每打开一个fd就会有一个以fd为文件名的文件产生

命令:root用户下:cd /proc/28316(pid)/fd

 


参考文档:https://blog.csdn.net/oujiangping/article/details/77025953
参考文档:https://www.cnblogs.com/sparkbj/p/7161669.html(lfos常用命令)

参考文档:https://www.cnblogs.com/taosim/articles/2828002.html

linux系统下too many files open如何定位与解决

标签:post   打开   ping   永久   结束   art   etc   uri   分享   

原文地址:https://www.cnblogs.com/qiaoli0726/p/9879106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!