最大文件句柄数

优质博文:IT-BLOG-CN

灵感来源在这里插入图片描述

一、什么是文件句柄

文件句柄File Handle是操作系统中用于访问文件的一种数据结构,通常是一个整数或指针。文件句柄用于标识打开的文件,每个打开的文件都有一个唯一的文件句柄。 它们是对文件、网络套接字或其他输入/输出I/O对象的直接引用。每当系统进程需要与这些对象进行交互时,内核都会为该进程分配一个唯一的文件句柄,以确保数据流的正确性和安全性。

文件句柄数,定义为单个进程能够同时打开和管理的文件句柄的最大数量。这一限制对于系统资源的合理分配与防止滥用至关重要。

Linux系统中,每个进程都有一个文件描述符表,它是一个数组,用来保存该进程打开的文件句柄。每个文件描述符都是一个非负整数,代表了对应文件句柄在文件描述符表中的索引。通常情况下,标准输入、标准输出和标准错误对应的文件描述符分别为012

文件句柄在Linux系统中的使用非常灵活,通过文件句柄,我们可以对文件进行各种操作,如读取文件内容、写入数据到文件、关闭文件等。在编程中,开发人员可以通过系统调用来获取文件句柄,并通过文件句柄来进行文件操作。

文件句柄还可以用来进行进程间通信。比如通过管道或者套接字来传输数据。在这种情况下,文件句柄可以跨进程传递,实现进程间的数据共享。

二、阿里为什么建议修改文件句柄的值

Linux系统默认值为1024,也就是说,一个进程最多可以接受1024socket连接。即使采用了最先进的模型,如果不进行合理的配置,也没有办法支撑百万级的网络连接并发。

Linux下,通过调用​ulimit命令看到单个进程能够打开的最大文件句柄数量,这个命令的具体使用方法是:

ulimit -n

用来显示和修改当前用户进程一些基础限制的命令,-n命令选项用于引用或设置当前的文件句柄数量的限制值。对于一些用户基数很大的高并发应用,面临的并发连接数往往是十万级、百万级、千万级、甚至像腾讯QQ一样的上亿级。当单个进程打开的文件句柄数量,超过了系统配置的上限值时,就会发出​​Socket/File:Can't open so many files​的错误提示。对于高并发、高负载的应用,就必须要调整这个系统参数,以适应处理并发处理大量连接的应用场景。可以通过​ulimit来设置这两个参数。

ulimit -n 1000000

n的设置值越大,可以打开的文件句柄数量就越大。建议以root用户来执行此命令。然而,使用ulimit​​命令来修改当前用户进程的一些基础限制,仅在当前用户环境有效。就是在当前的终端工具连接当前shell期间,修改是有效的;一旦断开连接,用户退出后,它的数值就又变回系统默认的1024了。也就是说,​ulimit只能作为临时修改,系统重启后,句柄数量又会恢复为默认值。如果想永久地把设置值保存下来,可以编辑​/etc/rc.local​开机启动文件,在文件中添加如下内容:

ulimit -SHn 1000000

【1】-S:表示软性极限值,软性极限是系统警告Warning的极限值,超过这个极限值,内核会发出警告。普通用户可以通过ulimit命令,将软极限更改到硬极限的最大设置值。
【2】-H:表示硬性极限值。硬性极限是实际的限制,就是最大可以是100万,不能再多了。root用户权限可以更改硬极限。

终极解除Linux系统的最大文件打开数量的限制,可以通过编辑Linux的极限配置文件​/etc/security/limits.conf​​来解决,修改此文件,加入如下内容:

soft nofile 1000000
hard nofile 1000000

三、文件描述符与文件句柄的关系

Linux系统中,文件描述符和文件句柄是两个密切相关但概念不同的实体。文件描述符是用户空间对文件句柄的引用,它是一个非负整数,用作fdtable(进程打开文件表)中的索引。而文件句柄则是内核空间中的实际对象,包含了文件的详细信息和状态。用户空间的操作通常通过文件描述符来间接引用和操作文件句柄。

四、文件句柄的限制层级

Linux系统将文件句柄的限制分为三个主要层级:系统层面、用户层面和进程层面。

【1】系统级别限制: 这一限制控制整个系统可以打开的最大文件句柄数量。
▪️ 通过查看/proc/sys/fs/file-max文件,可以获取当前的系统级别文件句柄限制。
▪️ 如果需要修改这一限制,可以使用sysctl命令或编辑/etc/sysctl.conf文件来实现。

【2】用户级别限制: 针对每个用户设置的最大文件句柄数量限制。
▪️ 使用ulimit -n命令可以查看和临时修改当前shell会话中的限制。
▪️ 为了永久修改用户级别的文件句柄限制,需要编辑/etc/security/limits.conf文件,并添加或修改相应的nofile限制。例如,* soft nofile 65535* hard nofile 65535将分别为所有用户设置软限制和硬限制为65535。软限制是当进程打开的文件数量达到该限制时,系统会向进程发送警告信号;而硬限制则是当进程尝试打开超过该限制的文件时,系统会拒绝该操作。

【3】进程级别限制: 每个进程都有其独立的文件句柄数量限制。
▪️ 这些限制通常与用户级别限制相关联,但也可以通过编程接口(如getrlimitsetrlimit)进行单独设置。
▪️ 进程的句柄数限制也可以通过/proc/[pid]/limits目录来查看

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战:功能强大齐全BBS论坛项目Echo简介

项目简介 Echo 是一套前后端不分离的开源社区系统,基于目前主流 Java Web 技术栈(SpringBoot MyBatis MySQL Redis Kafka Elasticsearch Spring Security ...),并提供详细的开发文档和配套教程。包含帖子、评论、私信、系…

查找json中指定节点的值,替换为指定的值

有时我们封装好的实体转化成的json字段的值和第三方要求的不一样,比如我们字段的值是字符串,我们需要使用int类型的值,就需要将这个键的值转化成int类型。 比如将以下 convulsionNumber字段中字符串的值“一次”替换为0 {"convulsionT…

InstaPrism能否平替BayesPrism(贝叶斯棱镜)?

上一期内容提到了BayesPrism算法用于单细胞数据的反卷积,BayesPrism算法在实际应用中非常占用计算资源以及消耗使用者的时间。那么是否有较好的替代包呢? 曾老师告诉了我一个R包—InstaPrism,他希望我将其和BayesPrism算法做个对比。 开发者…

使用Python Turtle绘制圣诞树和装饰

简介(❤ ω ❤) 在这篇文章中,我们将探索如何使用Python的Turtle模块来绘制一个充满节日气氛的圣诞树,以及一些可爱的装饰品。Turtle是一个受Logo语言启发的图形库,非常适合初学者学习编程和创建图形。 码农不是吗喽(大学生版&…

【常见开源库的二次开发】基于openssl的加密与解密——单向散列函数(四)

目录: 目录: 一、什么是单项散列函数? 1.1 如何验证文件是否被修改过 1.2 单项散列函数: 二、单向hash抗碰撞 2.1 弱抗碰撞(Weak Collision Resistance) 2.2 强抗碰撞(Strong Collision Resista…

图像边缘检测中Sobel算子的原理,并附OpenCV和Matlab的示例代码

Sobel算子是一种用于图像边缘检测的离散微分算子。它结合了图像的平滑处理和微分计算,旨在强调图像中强度变化显著的区域,即边缘。Sobel算子在图像处理中被广泛使用,特别是在计算机视觉和图像分析领域。 Sobel算子的原理 Sobel算子主要用于计…

IMemoryCache 使用

IMemoryCache 提供了一个内存中的缓存存储&#xff0c;允许你存储和检索对象&#xff0c;这些对象可以在应用程序的不同部分之间共享&#xff0c;以提高性能并减少重复计算或数据库访问的次数。 public interface ICacheService : IDisposable{/// <summary>/// 验证缓存…

大模型入门(一)—— LLaMa/Alpaca/Vicuna

LLaMa模型是Meta开源的大模型&#xff0c;模型参数从7B到65B不等&#xff0c;LLaMa-7B在大多数基准测试上超过了GPT3-173B&#xff0c;而LLaMa-65B和Chinchilla-70B、PaLM-540B相比也极具竞争力。相比于ChatGPT或者GPT4来说&#xff0c;LLaMa可能效果上还有差距&#xff0c;但相…

oracle显示列名,列注释

项目场景&#xff1a; 数据库文档中&#xff0c;需要&#xff08;列名&#xff0c;列注释&#xff09;两列 问题描述 数据库文档中&#xff0c;需要&#xff08;列名&#xff0c;列注释&#xff09;两列&#xff0c;而且不止一张表&#xff0c;是很多张&#xff0c;这个时候…

HyperBDR云容灾,让低碳未来有“迹”可循

全球气候变化时刻牵动着我们的心。生活在同一个地球下&#xff0c;万博智云始终坚持环境友好&#xff0c;携手企业和合作伙伴在保持市场竞争力、促进企业可持续发展的同时&#xff0c;共同肩负起守护地球环境的责任。 HyperBDR云容灾以“碳足迹”践行低碳容灾 云产品及数据中心…

Qt界面假死原因

创建一个播放器类&#xff0c;继承QLabel&#xff0c;在播放器类中起一个线程用ffmpeg取流解码&#xff0c;将解码后的图像保存到队列&#xff0c;在gui线程中调用update()刷新显示。 当ffmpeg打开视频流失败后调用update()将qlabel刷新为黑色&#xff0c;有一定概率会使得qla…

随机采样一致性算法RANSAC

点云分割 图自&#xff1a;https://openaccess.thecvf.com/content_cvpr_2017/papers/Qi_PointNet_Deep_Learning_CVPR_2017_paper.pdf《PointNet:用于3D分类和分割的点集深度学习》 点云分割(Point Cloud Segmentation)是计算机视觉和3D图像处理中的一个重要步骤&#xff0c;…

数据结构——位图布隆过滤器

一、位图 1.1 概念 所谓位图&#xff0c;就是用每一位来存放某种状态&#xff0c;适用于海量数据&#xff0c;数据无重复的场景。通常是用来判断某个数据存不存在的。 数据是否在给定的整形数据中&#xff0c;结果是在或者不在&#xff0c;刚好是两种状态&#xff0c;那么可以…

Android获取当前屏幕显示的是哪个activity

在 Android 中&#xff0c;要获取当前屏幕显示的 Activity&#xff0c;可以使用以下几种方法&#xff1a; 方法一&#xff1a;使用 ActivityManager 获取当前运行的任务信息 这是一个常见的方法&#xff0c;尽管从 Android 5.0 (API 21) 开始&#xff0c;有些方法变得不太可靠…

【多线程】线程安全的单例模式

文章目录 什么是单例模式饿汉实现方式饿汉实现模式的特点 懒汉实现方式懒汉实现方式的特点 什么是单例模式 单例模式是一个设计模式&#xff0c;其目的是确保一个类只有一个实例&#xff0c;并提供一个全局的访问点来访问该实例。单例模式常用于需要控制资源数量的场景&#x…

C++:类的定义和实例化

目录 一、类的定义 1、类的定义格式 2、访问限定符 3、类域 二、实例化 1、实例化的概念 2、对象大小 一、类的定义 1、类的定义格式 class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后面分号不能省略。类体中内容…

@TableName(value=““)

Spring中Service对应的实体Entity类上不写TableName(value"")的注解&#xff0c;怎样对应到数据表&#xff1f; 在使用 MyBatis-Plus 时&#xff0c;如果实体类没有使用 TableName(value"") 注解来指定数据库表名&#xff0c;MyBatis-Plus 会根据默认的命…

log4js node日志插件

最近不是特别忙在用express搭建后台项目&#xff0c;在开发过程中遇到了需要输入日志的问 本来想直接用node自带的console来实现&#xff0c;后来发现console输出的日志达不到自己希望的 日志格式&#xff0c;后来各种百度发现了log4js插件&#xff0c;本文来记录log4js插件使用…

STM32智能工业自动化监控系统教程

目录 引言环境准备智能工业自动化监控系统基础代码实现&#xff1a;实现智能工业自动化监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;工业自动化与管理问题解决方案与优化收尾与总结 1. 引言 智能…

基于zynq的视频采集与hdmi显示(未完)

文章目录 一、项目整体框架一、传感器配置与驱动二、IMX222 1080P 模式图像解析(bayer 2 rgb 模块)2.1 解析有效像素(gen_sync)2.1.1同步字详细介绍&#xff1a; 2.2 bayer 2 rgb 一、项目整体框架 一、传感器配置与驱动 camera信息&#xff1a;索尼IMX222摄像头 SPI&#xf…