最大文件句柄数

优质博文: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.xdnf.cn/news/1483408.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

哪些工科专业要学C语言或C++?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「c++的资料从专业入门到高级教程」,点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!工科专业…

鸿蒙语言基础类库:【@system.configuration (应用配置)】

应用配置 说明: 从API Version 7 开始,该接口不再维护,推荐使用新接口[ohos.i18n]和[ohos.intl]。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import configurati…

网安小贴士(19)入侵检测技术原理与应用

前言 入侵检测技术(Intrusion Detection System, 简称IDS)是一种用于监测和防止计算机网络中的恶意活动的安全系统。它通过收集系统状态信息、特征提取、建立模型、入侵检测以及反馈更新等步骤,及时检测网络和系统中可能遭受攻击的迹象并发出…

python项目为什么用WSGI

小背景 Java用的时间久了,web项目启动的时候直接启动主程序就行,因为spring web项目内置了Tomcat web服务器,服务器的配置一般也是采用默认的配置,所以很少关注底层实现,关注点主要在应用程序功能。 初学python的时候…

打破运维“冷门槛“|暴雨液冷数据中心方案再升级

如果将数据比喻为驱动世界运转的新引擎,那数据中心便是为引擎提供源源不断动力的泵站。但随着泵站功率的日益增强,热浪成了不可避免的副产品。如何将数据热能转化为科技动能,是人工智能可持续发展的重要前提。 液冷技术,不仅可实现…

视频素材网站无水印的有哪些?热门视频素材网站分享

当我们走进视频创作的精彩世界时,一个难题常常摆在面前——那些高品质、无水印的视频素材究竟应该在哪里寻找?许多视频创作者感叹,寻找理想的视频素材难度甚至超过了寻找伴侣!但不用担心,今天我将为您介绍几个优质的视…

人工智能导论-确定性推理

确定性推理 概述 上一章:讨论了“知识与知识表示”,可以把知识用某种模式表示出来存储到计算机中,但为使计算机具有智能,还必须使它具有思维能力。 本章:1)推理是求解问题的一种重要方法。因此&#xff…

对消息队列进行深入学习

目录 1.什么是消息队列。1.1消息队列1.1.1同步的理解1.1.2异步的理解 1.2消息传递与消息队列 2. 消息队列应用场景2.1 异步处理2.2 流量削锋2.3 应用解耦2.4 日志处理2.5 消息通讯2.6 延时任务2.7 广播消费2.8 分布式事务 3. 主流消息队列3.1 RabbitMQ3.1.1 RabbitMQ工作原理3.…

win11家庭版怎么升级专业版

随着Windows 11的推出,许多用户享受到了全新的用户界面和功能。然而,Windows 11家庭版在某些高级功能上有所限制,例如,组策略管理、远程桌面连接等。为了满足更多的工作需求,许多用户希望将Windows 11家庭版升级到专业…

2024高考大数据出炉!考生偏爱南方高校,计算机专业热度下降!

近日,百度携手中国教育在线共同发布了名为**《百度热搜・2024高考大数据》**的报告,这份报告详细揭示了2024年广大考生最感兴趣的高校和专业等关键信息。 与去年相比,今年的高考人数和关注度均有所上升。据报告透露,百度上关于高…

小程序-模板与配置

一、WXML模板语法 1.数据绑定 2.事件绑定 什么是事件 小程序中常用的事件 事件对象的属性列表 target和currentTarget的区别 bindtap的语法格式 在事件处理函数中为data中的数据赋值 3.事件传参与数据同步 事件传参 (以下为错误示例) 以上两者的…

搭建调用链监控Zipkin和Sleuth

项目环境: win7、jdk8 1、添加依赖&#xff0c;添加了spring-cloud-starter-zipkin会自动导入Sleuth <!--Sleuth&#xff0c;zipkin--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</…

算法第十天:leetcode203.移除链表元素

一、203.移除链表元素题目描述 203.移除链表元素的链接如下所示&#xff0c;您可复制下面链接网址进入力扣学习&#xff0c;看题解之前一定要先做一遍哦&#xff01; https://leetcode.cn/problems/remove-linked-list-elements/description/https://leetcode.cn/problems/rem…

电商库存API设计与实现详解

库存管理在电商运营中非常重要&#xff0c;因为这影响到电商交易是否能够顺利进行。很多从线下零售发展到电商渠道的朋友了解到了电商库存接口能够高效管理库存&#xff0c;但不知道自己想要应用的场景是否仅通过电商库存接口就能实现&#xff0c;那不妨先了解一下电商库存接口…

Jupyter Notebook安装及基本使用

Jupyter Notebook安装及基本使用 目录 Jupyter Notebook安装及基本使用方式一&#xff1a;Anaconda直接安装方式二&#xff1a;pip命令安装Jupyter使用虚拟环境 方式一&#xff1a;Anaconda直接安装 安装Anaconda 下载地址&#xff0c;输入邮箱&#xff0c;Windows下载 开始安…

达梦数据库的系统视图v$sqltext

达梦数据库的系统视图v$sqltext 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$SQLTEXT 是一个系统视图&#xff0c;用于显示当前正在执行或最近执行的SQL语句的文本信息。这个视图对于监控和分析数据库中的SQL活动非常有用&#xff0c;尤其是在需要调试性…

Java(二十二)---队列

文章目录 前言1.队列(Queue)的概念2.Queue的使用3.队列的模拟实现4.循环队列5.双端队列6.面试题[1. 用队列实现栈](https://leetcode.cn/problems/implement-stack-using-queues/description/)[2. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/de…

《TF2.x强化学习手册》P59-P65-SARSA-Q-learning

文章目录 实现SARSA算法和对应的强化学习智能体前期准备实现步骤工作原理初始化算法流程 构建基于Q学习的智能体前期准备实现步骤工作原理SARSA 算法的收敛性&#xff1a;SARSA 适合在线学习和真实系统&#xff1a;Q 学习算法的适用性&#xff1a; 实现SARSA算法和对应的强化学…

影院选座系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;影院信息管理&#xff0c;电影类型管理&#xff0c;放映厅管理&#xff0c;电影信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;影院信息&…

完整教程 linux下安装百度网盘以及相关依赖库,安装完成之后启动没反应 或者 报错

完整教程 linux下安装百度网盘以及相关依赖库&#xff0c;安装完成之后启动没反应 或者 报错。 配置国内镜像源&#xff1a; yum -y install wget mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak wget -O /etc/yum.repos.d/CentOS-Base.repo ht…