Linux查看句柄数 您所在的位置:网站首页 查询服务器连接数 Linux查看句柄数

Linux查看句柄数

2024-06-28 09:32| 来源: 网络整理| 查看: 265

注: 部分概念介绍来源于网络

一、问题阐述: 当你的服务器在大并发达到极限时,就会报出“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 ,则不按TID显示,结果数少很多。但仍包含了没有使用fd的文件。

9、查询系统中指定进程占用的句柄数 $ lsof -n | grep [PID|进程名]| wc -l

10、LINUX对能够打开的文件句柄的数量做了限制。限制是分为三个层面:系统层面,用户层面和进程层面。 系统层面 $ cat /proc/sys/fs/file-max 用户层面 $ ulimit -n 进程层面 $ cat /proc/PID/limits



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有