关于 ulimit 的两个天坑

news2024/11/25 12:29:02

稍微有点 Linux 经验的人一定会遇到过 “Too many open files” 错误,这个错误本质是 ulimit 设置不合理导致的。关于 ulimit 设置,有哪些需要注意的点呢?本文给大家做一个介绍,希望对大家有所帮助。

如何确认 ulimit 设置生效了?

很多人设置了 ulimit 最后发现还是报错 “Too many open files”。先不论如何操作,我们先要知道怎么确认进程的 ulimit 到底是多少。这不是通过 ulimit -n 来看的,而是找到进程的 pid,然后查看 /proc/<进程的PID>/limits 文件,这个文件里面记录了进程的真实 ulimit 信息。比如:

20240401155313

如何设置 ulimit?

如果 ssh 到机器上,通过 nohup 之类的方式启动进程,ulimit 将受限于 /etc/security/limits.conf 文件的配置。比如我这个机器:

[root@aliyun-2c2g40g3m ~]# cat /etc/security/limits.conf | grep -v '^#' | grep -v '^$'
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535

这是 aliyun 的一台虚机,看起来阿里云已经帮我们设置了 ulimit 为 65535,这个是 OK 的,挺大的了。但是,如果你是通过 systemd 启动的服务,ulimit 将受限于 systemd 的配置。比如某个服务的 service 文件设置为:

[Unit]
Description="Categraf"
After=network.target

[Service]
Type=simple

ExecStart=/opt/categraf/categraf
WorkingDirectory=/opt/categraf

Restart=on-failure
SuccessExitStatus=0
LimitNOFILE=65535
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=categraf


[Install]
WantedBy=multi-user.target

看到 LimitNOFILE 那行配置了么?就是它。

如果 service 文件中没有配置 LimitNOFILE,systemd 会有个默认配置,systemd 的默认配置可以通过如下方式查看:

[root@aliyun-2c2g40g3m systemd]# pwd
/etc/systemd
[root@aliyun-2c2g40g3m systemd]# grep FILE *.conf
system.conf:#DefaultLimitNOFILE=
user.conf:#DefaultLimitNOFILE=

咱也不用关心默认配置是多少,反正每个 service 都配置一下 LimitNOFILE 就好了。

其他进程管理工具对 ulimit 也有影响

如果你不是通过 systemd 托管进程的,而是使用了其他的进程管理工具,比如 supervisor,那么 ulimit 将受限于 supervisor 的配置。如果你是通过 Saltstack 之类的工具,批量通过 shell 启动进程,还要小心 salt minion 的 ulimit 设置,至于 supervisor 和 salt minion 如何调整 ulimit,这里就不展开了,说多了都是泪。

句柄限制不止是 ulimit

实际上,操作系统对句柄的限制不止是 ulimit,还有 /proc/sys/fs/file-max 这个参数,这个参数限制了整个系统的句柄数量。如果你的系统句柄数量设置过小,那么即使你设置了 ulimit,也会受限于这个参数。比如我的系统如下:

[root@aliyun-2c2g40g3m systemd]# cat /proc/sys/fs/file-max
188844

如何调整这个参数呢?操作命令如下:

[root@aliyun-2c2g40g3m systemd]# echo 100000 > /proc/sys/fs/file-max
[root@aliyun-2c2g40g3m systemd]# cat /proc/sys/fs/file-max
100000
[root@aliyun-2c2g40g3m systemd]# echo 188844 > /proc/sys/fs/file-max
[root@aliyun-2c2g40g3m systemd]# cat /proc/sys/fs/file-max
188844

如果想要机器重启也能生效,就要修改 sysctl.conf 文件,比如:

fs.file-max = 188844
如何监控句柄相关问题?

系统层面总共分配了多少句柄可以通过 /proc/sys/fs/file-nr 文件查看,比如:

[root@aliyun-2c2g40g3m systemd]# cat /proc/sys/fs/file-nr
1760	0	188844

第一个数字是已经分配的句柄数量,第三个数字是系统总共可分配的句柄数量。如果第一个数字接近第三个数字,那么就要小心了。

夜莺的内置告警规则中,有针对 categraf 的机器指标的告警规则,其中就有文件句柄使用率的告警:

linux_sysctl_fs_file_nr / linux_sysctl_fs_file_max > 0.9

另外,如果你使用了 categraf 的 procstat 进程监控插件,并且打开了 gather_more_metrics 中的 limit,还会采集到 procstat_rlimit_num_fds_soft 指标,夜莺的内置规则中还有这么一条告警规则:

procstat_rlimit_num_fds_soft < 2048

这是采集进程的软句柄限制,如果软句柄限制过小,就告警。通常,小于 2048,大概率就是运维人员忘记做操作系统的参数调优了。

如上知识,希望对你有帮助。文末请允许我插播一个小广告。本人创业两年了,我们公司的业务如下,如果你有这方面的需求,欢迎联系我们做产品技术交流哈。

🎯 关于快猫星云

快猫星云是一家云原生智能运维科技公司,由知名开源项目“夜莺(Nightingale)”的核心开发团队组成,创始团队均来⾃阿⾥、百度、滴滴等互联⽹公司。夜莺是一款开源云原生监控工具,是中国计算机学会接受捐赠并托管的第一个开源项目,在GitHub上有超过8000颗星,迭代发布了超过100多个版本,上百位社区贡献者,是国内领先的开源可观测性解决方案。

快猫星云以开源夜莺为内核打造的“Flashcat平台”,是国内顶级互联⽹公司可观测性实践的产品化落地,致力于让可观测性技术更好的服务企业,保障服务稳定性。Flashcat 平台具有以下特点:

  • 统一采集:采用插件化思路,内置集成上百种采集插件,服务器、网络设备、中间件、数据库、应用、业务,均可监控,开箱即用。
  • 统一告警:支持几十种数据源对接,收集各类监控系统的告警事件,进行统一的告警收敛、降噪、排班、认领、升级、协同,大幅提升告警处理效率。
  • 统一观测:将 Metrics、Logs、Traces、Events、Profiling 等多种可观测性数据融会贯通,并预置行业最佳实践,既提供全局业务视角、技术视角的驾驶舱,也提供层层下钻的故障定位能力,有效缩短故障发现和定位时间。

快猫星云,让可观测性数据更有价值!
快猫星云 Flashcat | 让监控分析变简单 | 开源监控 | 夜莺监控 | 可观测平台 | 运维监控 | IT监控

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

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

相关文章

Redis热点Key问题分析与解决

目录 一、问题现象描述 二、什么是热点Key 三、热点Key的危害 3.1 Redis节点负载过高 3.2 Redis集群负载不均 3.3 Redis集群性能下降 3.4 数据不一致 3.5 缓存击穿 四、热点Key产生的原因分析 4.1 热点数据 4.2 业务高峰期 4.3 代码逻辑问题 五、如何检测热点Key …

redis 缓存穿透 击穿 雪崩 的原因及解决方法

一 总结 1&#xff0c;原因及解决办法 ① 缓存穿透&#xff1a;大量请求根本不存在的key&#xff08;下文详解&#xff09; ② 缓存雪崩&#xff1a;redis中大量key集体过期&#xff08;下文详解&#xff09; ③ 缓存击穿&#xff1a;redis中一个热点key过期&#xff08;大量…

基于java+springboot+vue实现的仓库管理系统(文末源码+Lw)23-115

摘 要 使用旧方法对仓库管理系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在仓库管理系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的仓库管理…

ELK报错,索引变成只读状态。

问题描述 今天发现当天的索引在ES中并没有创建&#xff0c;logstash中不停的报错&#xff1a; [2021-05-24T05:47:51,904][INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({“type”>“cluster_block_exception”, “reason”&g…

java学习之路-类和对象

前言 本文内容&#xff1a; 类的定义及其使用 this的引用 对象的构造及初始化 封装 static成员 代码块讲解 内部类 文章目录 1.类定义和使用 1.1了解什么是面向对象 1.2简单认识类 1.3定义类 1.4栗子 2.类的使用-类的实例化 2.1什么是实例化 2.2类和对象的说明 3.this引…

备忘录误删怎么恢复?误删备忘录快速回复攻略

在日常生活和工作中&#xff0c;备忘录是我们不可或缺的好帮手&#xff0c;能帮助我们记录生活及工作中的重要内容。然而&#xff0c;一不小心误删了重要内容&#xff0c;往往会给我们带来不小的麻烦。那么&#xff0c;当这种情况发生时&#xff0c;我们该如何迅速找回误删的备…

C++算法——二分法查找

一、二分查找算法思想和模版 1.算法思想 2.细节处理 3.模板 二、二分查找 1.链接 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 2.描述 3.思路 先从最经典的题目去切入&#xff0c;思路就是二分查找&#xff0c;这里我们认为&#xff0c;目标值既可以看作为左部…

Oracle基础【7-Oracle中RMAN恢复管理器】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;Oracle从基础到进阶 本文对应Oracle实验报告源文件下载&#xff1a;公众号程序员刘同学回复oracle实验获取下载链接 实验七 RMAN恢复管理器一、实验目的二、实验环境三、实验内容1 为备份…

第12章 集合框架

一 集合框架概述 1.1 生活中的容器 1.2 数组的特点与弊端 一方面&#xff0c;面向对象语言对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象的操作&#xff0c;就要对对象进行存储。另一方面&#xff0c;使用数组存储对象方面具有一些弊端&#xff0c;而Java 集合…

WebGIS 地铁交通线网 | 图扑数字孪生

数字孪生技术在地铁线网的管理和运维中的应用是一个前沿且迅速发展的领域。随着物联网、大数据、云计算以及人工智能技术的发展&#xff0c;地铁线网数字孪生在智能交通和智慧城市建设中的作用日益凸显。 图扑软件基于 HTML5 的 2D、3D 图形渲染引擎&#xff0c;结合 GIS 地图…

OmniGraffle Pro for mac 出色的图形设计软件

OmniGraffle Pro是一款非常出色的图形设计软件&#xff0c;它主要适用于Mac和iPad平台&#xff0c;可以用来轻松绘制各种精美的图表、示意图和界面设计。 软件下载&#xff1a;OmniGraffle Pro for mac中文注册激活版 以下是OmniGraffle Pro的一些主要特点和功能&#xff1a; 界…

JavaScript常用知识面试题day01

大家好我是没钱的君子下流坯&#xff0c;用自己的话解释自己的知识 前端行业下坡路&#xff0c;甚至可说前端已死&#xff0c;我还想在前段行业在干下去&#xff0c;所以从新开始储备自己的知识。 从CSS——>Javascript——>VUE2——>Vuex、VueRouter、webpack——>…

【学习笔记】java项目—苍穹外卖day09

文章目录 用户端历史订单模块1. 查询历史订单1.1 需求分析和设计1.2 代码实现1.2.1 user/OrderController1.2.2 OrderService1.2.3 OrderServiceImpl1.2.4 OrderMapper1.2.5 OrderMapper.xml1.2.6 OrderDetailMapper 1.3 功能测试 2. 查询订单详情2.1 需求分析和设计2.2 代码实…

HTML代码加固:保障网站安全

引言 HTML是网站开发的基础语言&#xff0c;它的安全性直接关系到网站的安全性。为了保障网站的安全性&#xff0c;我们需要加固HTML代码。本文将介绍一些具体方法&#xff0c;帮助你加固HTML代码&#xff0c;提高网站的安全性。 摘要 本文将介绍以下几种方法来加固HTML代码…

新能源汽车充电桩主板产业链解析

新能源汽车充电桩主控制板&#xff0c;简称汽车充电桩主板&#xff0c;是充电桩设施的核心部件&#xff0c;主要负责控制充电桩的整体运行和管理充电过程。了解汽车充电桩主板的整体产业链是非常重要的&#xff0c;这可以帮助您更好地了解供应链、采购渠道以及行业发展趋势。 产…

【C++】二分查找算法(模板)

重点 只需要记住两点&#xff1a; 1.left right 时&#xff0c;一定就是最终结果&#xff08;包括找不到目标值&#xff09;&#xff0c;无需再次判断&#xff0c;如果判断就会死循环 2.求中点如果是求左端点 mid left (right - left)/2 如果是求右端点 mid left (right -…

HTTP/UDP/TCP/IP网络协议

文章目录 计算机网络基础HTTPUDPTCP连接管理(三次握手/四次挥手)TCP可靠传输(确认答应)超时重传滑动窗口流量控制拥塞控制延时应答捎带应答粘包问题其他 IP数据链路层MUT 相关问题TCP会粘包、UDP永远不会粘包 学习博客 计算机网络基础 OSI模型定义了网络互连的七层框架&#x…

深度学习平台

深度学习平台(只能有线连接校园网) 账户 yeguifeng密码 yguifengenv3 : pytorch1.9cudajupytermatplotlib pycuda: pycuda Timesformer –data_dir ./trainingVideo --category my_fire --output_dir ./output --image_size 100 --num_chain 10 --batch_size 14 --lr 0.001…

Android Monkey自动化测试

monkey一般用于压力测试&#xff0c;用户模拟用户事件 monkey 基本用法 adb shell monkey [参数] [随机事件数]monkey常用命令 -v&#xff1a;用于指定反馈信息级别&#xff0c;总共分三个等级-v -v -vadb shell mokey -v -v -v 100-s&#xff1a;用于指定伪随机数生成器的种…

vue3源码解析——watch和watchEffect区别

watch和watchEffect是Vue 3.0中新增的两个响应式API&#xff0c;用于监听数据的变化。watch适用于需要获取新值和旧值&#xff0c;或者需要懒执行的场景&#xff0c;而watchEffect适用于需要监听多个数据源&#xff0c;并且需要立即执行的场景。它们之间的区别如下&#xff1a;…