关于 ulimit 的两个天坑
稍微有点 Linux 经验的人一定会遇到过 “Too many open files” 错误,这个错误本质是 ulimit 设置不合理导致的。关于 ulimit 设置,有哪些需要注意的点呢?本文给大家做一个介绍,希望对大家有所帮助。
如何确认 ulimit 设置生效了?
很多人设置了 ulimit 最后发现还是报错 “Too many open files”。先不论如何操作,我们先要知道怎么确认进程的 ulimit 到底是多少。这不是通过 ulimit -n 来看的,而是找到进程的 pid,然后查看 /proc/<进程的PID>/limits 文件,这个文件里面记录了进程的真实 ulimit 信息。比如:

如何设置 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 等多种可观测性数据融会贯通,并预置行业最佳实践,既提供全局业务视角、技术视角的驾驶舱,也提供层层下钻的故障定位能力,有效缩短故障发现和定位时间。
快猫星云,让可观测性数据更有价值!
https://flashcat.cloud/
关于 ulimit 的两个天坑的更多相关文章
- 巩固复习(Hany驿站原创)_python的礼物
Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https://www ...
- 关于ulimit -a中需要修改的两个值
以root用户运行 ulimit -a 命令,其中有两个参数分别为: open files和max user processes 修改方法: vi /etc/security/limits.co ...
- ulimit
.修改ulimit vim /etc/security/limits.conf * soft nproc * hard nproc * soft nofile * hard nofile vim /e ...
- [转]正确配置Linux系统ulimit值的方法
在Linux下面部署应用的时候,有时候会遇上Socket/File: Can't open so many files的问题:这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且L ...
- 常见linux命令释义(第七天)——ulimit 与变量内容的删除替代与替换。
linux是一个多用户多任务的系统,不同于windows的单人多任务操作系统.再linux上,在同一个时间点上,可以有多个人同时执行多个任务. 那么假若有10个用户,同时打开了100个100M的文件. ...
- ulimit命令
原文链接 linux下默认是不产生core文件的,要用ulimit -c unlimited放开 概述 系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件 ...
- MySQL Innodb的两种表空间方式
要说表空间,MySQL的表空间管理远远说不上完善.换句话说,事实上MySQL根本没有真正意义上的表空间管理.MySQL的Innodb包含两种表空间文件模式,默认的共享表空间和每个表分离的独立表空间.只 ...
- linux ulimit调优
1,说明:ulimit用于shell启动进程所占用的资源.2,类别:shell内建命令3,语法格式:ulimit [-acdfHlmnpsStvw] [size]4,参数介绍:-H 设置硬件资源限制. ...
- 优化系统资源ulimit《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》
优化系统资源ulimit<高性能Linux服务器构建实战:运维监控.性能调优与集群应用> 假设有这样一种情况,一台Linux 主机上同时登录了10个用户,在没有限制系统资源的情况下,这10 ...
- 正确配置Linux系统ulimit值的方法【转】
转自:http://www.cnblogs.com/ibook360/archive/2012/05/11/2495405.html 在Linux下面部署应用的时候,有时候会遇上Socket/File ...
随机推荐
- anconda配置tensorflow环境
一.anconda的安装 1.进入Anaconda官网并按照电脑配置选择合适的安装包 Anaconda官网:https://www.anaconda.com/ 点击进入 不同的三个版本,分别是wind ...
- 开源微服务运行时 Dapr 发布 1.0 版本
简介: Dapr 是 2019 年 10 月开源的分布式运行时.早在 Dapr 开源初期,阿里云就开始参与 Dapr 社区建设和代码开发,目前已有两位 Dapr 成员,是 Dapr 项目中除微软之外代 ...
- 如何玩转 WebGL 并行计算
简介: 如今在 Web 端使用 WebGL 进行高性能计算已有不少实践,例如在端智能领域中的 tensorflow.js,再比如可视化领域中的 Stardust.js. 作者 | 沧东 来源 | ...
- [FAQ] JS 时间戳格式化为 date
拷贝使用,不用引入第三方库 function formatDate (date = 0, fmt = 'yyyy-MM-dd hh:mm:ss') { date = new Date(+date) i ...
- 一个支持Sora模型文本生成视频的Web客户端
大家好,我是 Java陈序员. 最近 Open AI 又火了一把,其新推出的文本生成视频模型 -- Sora,引起了巨大的关注. Sora 目前仅仅只是发布预告视频,还未开放出具体的 API. 今天, ...
- ABAP RSA 加密
最近出现一些SAP ABAP RSA加密的需求,这里搬运一篇文章,用于学习参考. 本文链接:https://www.cnblogs.com/hhelibeb/p/14952732.html 原文标题: ...
- HTML页面 IE 兼容性设置
网页第一行: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/html ...
- 前后端分离项目集成PageOffice——实现在线编辑Word文件的版本控制
PageOffice本身提供了SaveFilePage的js方法,但是由于该方法不支持代理且不能跨域导致在前后端分离项目中无法使用 功能:实现三个按钮分别保存不同版本的文件 1.PageOffice可 ...
- pytorch(GPU版)安装
确认有无英伟达显卡,有才能安装GPU版的pytorch,否则只能装CPU版 1.任务管理器->性能: 设备管理器->显示适配器,也可以: nvidia驱动安装地址(大部分电脑自带,不需要额 ...
- Immich让你从此告别百度网盘备份手机照片
一. Immich 是什么 Immich是一个开源的图片自托管服务,它能实现类似于百度网盘的照片自动备份.分类等功能,它同时提供了Web管理页面,和移动端APP,可以轻松备份手机中的照片至家庭服务器中 ...