最大文件句柄数

优质博文: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 ...),并提供详细的开发文档和配套教程。包含帖子、评论、私信、系…

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算子主要用于计…

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

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

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

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

Qt界面假死原因

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

随机采样一致性算法RANSAC

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

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

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

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

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

log4js node日志插件

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

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

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

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

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

Android10.0 锁屏分析-KeyguardPatternView图案锁分析

首先一起看看下面这张图: 通过前面锁屏加载流程可以知道在KeyguardSecurityContainer中使用getSecurityView()根据不同的securityMode inflate出来,并添加到界面上的。 我们知道,Pattern锁所使用的layout是 R.layout.keyguard_pattern_view&a…

【内网穿透】如何本地搭建Whisper语音识别模型并配置公网地址

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

【机器学习】Grid Search: 一种系统性的超参数优化方法

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Grid Search: 一种系统性的超参数优化方法引言什么是Grid Search?Gr…

Spring Boot(概要 入门 Spring Boot 核心配置 YAML JSR303数据校验 )

目录 一、Spring Boot概要 1. SpringBoot优点 2. SpringBoot缺点 二、Spring Boot入门开发 1. 第一个SpringBoot项目 项目创建方式一:使用 IDEA 直接创建项目 项目创建方式二:使用Spring Initializr 的 Web页面创建项目 (了解&#x…

Java学习高级四

JDK8开始,接口新增了三种形式的方法 接口的多继承 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 import javax.swing.*; import java.awt.event.ActionEvent;public class Test {public static void main(String[] args) {// 扩展 内部类在开发中的真实使用…

深度学习LSTM之预测光伏发电

代码一:训练LSTM模型 代码逐段分析 import numpy as np import pandas as pd import tensorflow.keras as tk from tensorflow.keras import layers首先,导入了必要的库:numpy用于数值计算,pandas用于数据处理,tenso…