注: 部分概念介绍来源于网络
一、问题阐述:
当你的服务器在大并发达到极限时,就会报出“too many open files”:打开过多文件数。
不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。
二、产生的原因:
经常在使用linux的时候出现,大多数情况是由于程序没有正常关闭一些资源引起的,所以出现这种情况,请检查io读写,socket通讯等是否正常关闭。
三、经典案例:
很多项目上线不久运行了一段时间后,服务突然宕了,经检查日志,出现了too many open files 错误。
四、基本操作:
1、单个进程默认可以打开的句柄数上限,查看进程占最大句柄数
$ ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
open files (-n) 3200
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 2036
cpu time (seconds, -t) unlimited
max user processes (-u) 256
virtual memory (kbytes, -v) unlimited
open files (-n) 3200 代表每个进程
或 ulimit -n
查看某个进程的句柄数上限,命令是:
$ ulimit -a PID
临时设置:ulimit -n 1000000。
永久设置:vi /etc/security/limits.conf 添加
* soft nofile 65536
* hard nofile 65536
修改以后保存,注销当前用户,重新登录,执行ulimit -a ,ok ,参数生效了
2、查看当前系统支持打开的最大句柄数,决定了当前内核可以打开的最大的文件句柄数
more /proc/sys/fs/file-max
临时设置:echo 1000000 > /proc/sys/fs/file-max
永久设置:修改/etc/sysctl.conf文件,增加fs.file-max = 1000000
3、查看打开句柄总数
lsof -n|awk ‘{print $2}’|wc -l
4、查看系统中进程占用的句柄数,根据打开文件句柄的数量降序排列,其中第二列为进程ID:
lsof -n|awk ‘{print $2}’|sort|uniq -c|sort -nr|more
5、根据获取的进程ID查看进程的详情
ps -ef |grep ID
6、查看当前进程的最大可以打开的文件数:cat /proc/PID/limits
Max open files 65536 65536 files
7、查看当前进程的打开文件数量:lsof -p pid | wc -l
严格说lsof -p pid | wc -l查询的数据不准确,里面含有重复的句柄文件数,已经mem占用也包含了
8、查看系统fd总数:
准确的查看fd使用总数的命令是:
cat /proc/sys/fs/file-nr
错误的查询fd使用总数的命令是:
lsof |wc -l
1.lsof 的结果包含了并非以fd形式打开的文件,比如用mmap方式访问文件(FD一栏显示为mem),实际并不占用fd。
2.CentOS 7的lsof(我这里lsof -v的版本号是4.87)是按PID/TID/file的组合对应一行,不是一行一个fd。同一个进程如果多个线程访问同一个文件通常只需要打开一次、占用一个fd,但在lsof中就显示多行。如果用lsof -p <pid>,则不按TID显示,结果数少很多。但仍包含了没有使用fd的文件。
9、查询系统中指定进程占用的句柄数
$ lsof -n | grep [PID|进程名]| wc -l
10、LINUX对能够打开的文件句柄的数量做了限制。限制是分为三个层面:系统层面,用户层面和进程层面。
系统层面
$ cat /proc/sys/fs/file-max
用户层面
$ ulimit -n
进程层面
$ cat /proc/PID/limits
今天的文章Linux查看句柄数_linux句柄数占用情况「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/78884.html