如何获取打开文件和文件描述符数量

文件描述符

文件描述符(FD:file descriptors)即文件句柄,当某个程序打开文件时,内核返回相应的文件描述符,程序为了处理该文件必须引用此描述符。

文件描述符是一个正整数,用以标明每一个被进程所打开的文件和socket。最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应,后面打开的文件依此类推对应3、4…… 。

linux系统对每个用户、进程、或整个系统的可打开文件描述符数量都有一个限制,一般默认为1024。当我们在系统或应用的日志中碰到“too many open files”错误记录时,这个不是说打开的文件过多,而是打开的文件描述符数量已达到了限制,这时就需要增加文件描述符的数量限制了。

1 获取系统打开的文件描述符数量

[root@localhost ~]# cat /proc/sys/fs/file-nr
1952	0	13132351
  •   第一列:为已分配的FD数量
  •   第二列:为已分配但尚未使用的FD数量
  •   第三列:为系统可用的最大FD数量

已用FD数量=已分配的FD数量 - 已分配但尚未使用的FD数量。注意,这些数值是系统层面的。

1.1 更改文件描述符限制

当碰到“too many open files”错误时,就需要增加文件描述符的限制数量,系统的默认文件描述符都比较大,一般来说,只需增加用户或进程的就可以了

[root@localhost ~]# ulimit -n

1024

[root@localhost ~]# ulimit -n 10240

[root@localhost ~]# ulimit -n

10240 

注意,使用ulimit 命令更改后只是在当前会话生效,当退出当前会话重新登录后又会回到默认值1024,要永久更改可以修改文件 /etc/security/limit.conf,如

[root@localhost ~]#vi /etc/security/limits.conf 

加入 “abc hard nofile 10240”

abc:用户名,即允许test使用ulimit命令更改FD限制,最大值不超过10240,更改后abc用户的每一个进程(以abc用户运行的进程)可打开的FD数量为10240个

hard:限制类型,有soft/hard两种,达到soft限制会在系统的日志(一般为/var/log/messages)里面记录一条告警日志,但不影响使用。hard,达到这个限制,有日志且会影响使用。

nofile:限制的内容,nofile - max number of open files

1024 :值

更改后,退出终端重新登录,用ulimit看有没有生效,如果没生效,可以在abc用户的.bash_profile文件加上 ulimit -n 10240 ,以使用户abc每次登录时都会将FD最大值更改为10240,如:

[root@localhost ~]#echo "ulimit -n 10240" >> /home/abc/ .bash_profile

10240

[root@localhost ~]# su - abc

[abc@localhost ~]$ ulimit -n

10240

limit.conf文件里面本身已有很详细的使用方法,这个下次可以说说。

//系统级别

将整个操作系统可以使用的FD数量更改为51200

[root@localhost ~]# echo "51200" > /proc/sys/fs/file-max

[root@localhost ~]# cat /proc/sys/fs/file-nr

1184    0       51200

像这样更改在系统重启后会恢复到默认值,要永久更改可以在sysctl.conf文件加上fs.file-max = 51200

如:

[root@localhost ~]# echo "fs.file-max = 51200" >> /etc/sysctl.conf

2 获取打开的文件数量

linux的一切皆为文件,那么如何知道系统/应用打开了哪些或是多少个文件呢?很简单,用lsof命令就行了,lsof,list  open files的简写,可列出程序或系统正在使用的文件。

2.1 获取整个系统打开的文件数量

     [root@localhost ~]# lsof |wc -l

       1864

2.2 获取某个用户打开的文件数量 

[root@localhost ~]# lsof -u test |wc -l

15

2.3 获取某个程序打开的文件数量 

[root@localhost ~]# pidof vim

3253

[root@localhost ~]# lsof -p 3253 |wc -l

31

上面所示只是用lsof来显示已打开的文件数量,lsof的功能远不止这些,有兴趣可以man lsof看下 

进程打开的文件描述符与文件

如前面说的,为什么说“too many open files”错误不是说打开的文件过多,而是打开的文件描述符数量已达到了限制,这个简单的可以用man ulimit就可得知

[abc@localhost ~]$   man ulimit 

//找到ulimit,可以看到下列一行

n   The maximum number of open file descriptors (most systems do not allow this value to be set)

这行就说明了用ulimit -n xxx 更改的是文件描述符而不是文件的最大值。

另用lsof可知道进程都打开了哪些文件和文件描述符:

[abc@localhost ~]$ lsof -p 3330

可看到运行vim时,打开了很多个文件,但文件描述符只有后面四个。

转载于:https://www.cnblogs.com/mfryf/p/5329770.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/25082.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

情绪管理ABC法

情绪管理ABC法 是由著名心理学家艾利斯(Albert Ellis)提出的一种情绪管理方法。 模型介绍 情绪,不取决于发生的事实,取决于我们如何看待这件事ABC理论认为,我们的情绪©,其实与发生的事件(A)无关&…

类的成员之:构造器(构造方法)

1.构造器的特征: 它具有与类相同的名称它不声明返回值类型。(与声明为void不同)不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值 2.构造器的作用: 1.创建对象2.初始化对象的…

PID算法在流量控制中的应用

目录 增量式或位置式 目录 增量式或位置式 PID控制周期 T1 时间 T2 约4ms PID C代码 最近有小伙伴向我提问关于PID的问题:通过比例阀控制水流速度(流量), 使用增量式还是位置式 PID?他的比例法驱动频率是500Hz…

linux环境搭建

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍学习如何使用云服务器搭建Linux的环境. 前言 linux介绍…

【计算机网络中ip概念总结】【平时我们说的ip 到底是什么】【计算机网络中 ip地址是什么】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

Linux系统之编译安装python3

Linux系统之编译安装python3 一、python3介绍1. python3简介2. python3特点 二、检查本地环境1. 检查本地操作系统版本2. 检查内核版本3. 检查当前python版本 三、安装前准备工作四、下载python最新版本源码包1. 访问python官网2. 创建下载目录3. 下载python源码包4. 解压pytho…

Redis 常见面试题

1. 认识Redis Redis是一个开源的内存数据结构存储,Redis是一个基于内存的数据库,对数据的读写都在内存中完成,因此数据读写速度非常快,常用于缓存,分布式锁等,MySQL的表数据都存储在 t_order.ibd&#xff…

国内可以免费使用的GPT

一、wetab新标签页 教程:https://diwlwltzssn.feishu.cn/docx/MnHhdvxATomBnMxfas2cm8wWnVd 装GPT界面:https://microsoftedge.microsoft.com/addons/detail/wetab%E5%85%8D%E8%B4%B9chatgpt%E6%96%B0%E6%A0%87%E7%AD%BE%E9%A1%B5/bpelnogcookhocnaokfp…

华为OD机试真题(Java),跳跃游戏 II(100%通过+复盘思路)

一、题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处: 0 <= j <= nums[i]0i + j <返回到达 nums[n - 1] 的最小跳跃…

C++学习笔记(四): 类、头文件、对象

一个类定义了一个类型&#xff0c;以及与其关联的一组操作。所谓类&#xff0c;是用户自定义的数据类型。 类机制是C最重要的特性之一。实际上&#xff0c;C最初的一个设计焦点就是能定义使用上像内置类型一样自然的类类型&#xff08;class type&#xff09;。 类的定义一般分…

Java之旅(三)

Java 输出&#xff1a;println()、print() 使用 println() 方法在 Java 中输出值或打印文本。 System.out.println("Hello World!"); println() 可以根据需要添加任意数量的方法。请注意&#xff0c;它将为每个方法添加一个新行&#xff1a; System.out.println(&…

Unity2D骨骼动画制作之单张图片编辑

1、打开骨骼制作面板 在Sprite Editor左侧选项&#xff0c;选择Skinning Editor 2、 &#xff08;1&#xff09;骨骼制作 Preview Pose 预览模式&#xff0c;可以预览动作并不会真正的改变设置 Reset Pose 将角色骨骼和关节恢复到原始位置 Edit Bone 编辑骨骼&#xff0c;…

SUSE系统上安装HANA

一:安装SUSE操作系统 1.1 准备安装镜像 SLE-15-SP1-安装程序-DVD-x86_64-GM-DVD1 SLE-15-SP1-软件包-x86_64-GM-DVD1 SAP HANA安装文件 IMDB_SERVER20_032_0-80002031.SAR 1.2 引导系统 1.3 选择要安装的产品 SUSE Linux Enterprise Server for SAP Applications 15 SP…

【MySQL】MySQL间隙锁--幻读解决原理

文章目录 一、间隙锁概念二、测试间隙锁范围加锁三、测试等值间隙锁 一、间隙锁概念 当我们用范围条件而不是相等条件检索数据&#xff0c; 并请求共享或排他锁时&#xff0c;InnoDB 会给符合条件的已有数据记录的索引项加锁&#xff1b;对于键值在条件范围内但并不存在的记录…

chatgpt赋能python:用Python做股票分析

用Python做股票分析 在当今的股市中&#xff0c;数据分析和预测已经变得十分重要。Python作为最流行的编程语言之一&#xff0c;不仅易于学习&#xff0c;还有非常强大的数据处理和分析能力。在本文中&#xff0c;我们将探讨如何用Python进行股票分析。 数据收集 要进行股票…

如何利用宝塔面板快速搭建Wordpress网站?

本章教程&#xff0c;主要介绍一下&#xff0c;如何利用宝塔面板快速搭建Wordpress网站。 目录 一、 前置条件 二、 打开宝塔面板 三、解析域名 四、安装界面 五、主题安装 六、网站预览 一、 前置条件 需要准备一台Linux服务器&#xff0c;系统版本使用centos 7.X。 使用…

【项目】ROS下使用乐视深度相机LeTMC-520

本文主要记录如何在ros下使用乐视深度相机。乐视三合一体感摄像头LeTMC-520其实就是奥比中光摄像头&#xff08;Orbbec Astra Pro&#xff09; 系统&#xff1a;Ubuntu20.04 这款相机使用uvc输入彩色信息&#xff0c;需要使用libuvc、libuvc_ros才能在ROS上正常使用彩色功能。…

Vue.js 中的父子组件通信方式

Vue.js 中的父子组件通信方式 在 Vue.js 中&#xff0c;组件是构建应用程序的基本单元。当我们在应用程序中使用组件时&#xff0c;组件之间的通信是非常重要的。在 Vue.js 中&#xff0c;父子组件通信是最常见的组件通信方式之一。在本文中&#xff0c;我们将讨论 Vue.js 中的…

spring boot使用elasticsearch分词,排序,分页,高亮简单示例

目录 1. 创建ES实体2. 创建查询实体3. 查询方法实现3.1 核心代码3.2 构建查询条件3.2.1 关键词分词 3.3 高亮处理 4.完整查询代码展示 记&#xff0c;写一个简单的es分词demo,es版本6.8.12 如果使用es7有些方法可能会有所改变&#xff0c;请参考7的文档 es安装教程&#xff1a;…

隔离驱动芯片SLMi332兼容光耦隔离驱动器时的注意事项

数明深力科SLMi33x系列SLMi332是一款兼容光耦带DESAT保护功能的IGBT/SiC隔离驱动器。内置快速去饱和(DESAT) 故障检测功能、米勒钳位功能、漏极开路故障反馈、软关断功能以及可选择的自恢复模式&#xff0c;兼容光耦隔离驱动器。 SLMi33x系列SLMi332的DESAT阈值为6.5V&#xf…
最新文章