Bug:Too many open files【ulimit限制】

news2024/11/19 22:36:47

Bug:Too many open files

今天在开发某个下载功能时,发现文件总是下载到250多个程序就挂掉,同时会打崩服务器,查看错误日志发现报:too many open files.

  • 思路:根据错误信息可以知道打开的文件数过多,立马想到系统自身有一个ulimit限制(限制打开的文件数),可能是因为自身并发数设置过高且ulimit配置的允许打开文件数数值过低。

1 排查思路

1.1 查看ulimit数值

以Mac系统为例。

# 执行命令查看ulimit限制
launchctl limit
#第一列为项的名称,第二列为软件限制,第三列为硬件限制

在这里插入图片描述

如果是ulimit配置太小,可以通过下面命令修改
注意:如果数值设置的太高会影响系统的稳定性。

sudo launchctl limit maxfiles 1024 unlimited
#修改完后,open files的限制就到1024了

我将文件描述符修改到1024后,发现文件下载到1024左右程序就会卡死,可以确定和ulimit数没有关系。

1.2 查看程序并发数

查看是否是程序的并发数设置的太多(线程数或协程数),如果自身电脑打开的程序或者应用过多且并发数设置的过多,会导致某一段时间,打开的文件数超过ulimit的限制。

  • 后来查看代码,发现协程数为5,对于该系统来说并不算高

1.3 查看文件流是否关闭

因为程序是下载功能,所以需要读取服务端的文件,这个时候就需要考虑是否是打开的文件流没有关闭导致文件句柄一直没有释放。

# 查看进程号
ps -ef | grep downloader
# 根据进程id查看进程占用的文件句柄
sudo lsof -p 30794
# 查看所有已建立或者listen状态的连接
sudo lsof -i -P | grep -i "listen\|established"

执行上面命令后发现我程序一直占用这Socket没有释放,这个时候就基本可以确定是代码某处打开的文件流没有关闭。

经过review代码,排查发现是在GetS3Object的时候没有对object的Body做close操作。添加上后,问题解决。

	object, err := client.GetObject(context.TODO(), &s3.GetObjectInput{
		Bucket: aws.String(bucketName),
		Key:    aws.String(key),
	})
	defer object.Body.Close()

2 解决

①修改系统ulimit参数值

以Mac系统为例。

# 执行命令查看ulimit限制
launchctl limit
#第一列为项的名称,第二列为软件限制,第三列为硬件限制

在这里插入图片描述

如果是ulimit配置太小,可以通过下面命令修改
注意:如果数值设置的太高会影响系统的稳定性。

sudo launchctl limit maxfiles 1024 unlimited
#修改完后,open files的限制就到1024了

②修改程序并发数

降低线程或协程数

③review代码是否有io流未关闭

我的问题是因为在获取S3对象时,忘记对object.Body做close操作

=object, err := client.GetObject(context.TODO(), &s3.GetObjectInput{
	Bucket: aws.String(bucketName),
	Key:    aws.String(key),
})
defer object.Body.Close()

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

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

相关文章

【滑动窗口】【map】LeetCode:76最小覆盖子串

作者推荐 【二叉树】【单调双向队列】LeetCode239:滑动窗口最大值 本文涉及知识点 滑动窗口 题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对…

【工具】windeployqt 在windows + vscode环境下打包

目录 0.背景简介 1.windeployqt简介 2.打包具体过程 1)用vscode编译,生成Release文件夹(也有Debug文件夹,但是发布版本一般都是用Release) 2)此时可以看下Release文件夹内,一般是.exe可执行…

PYTHON基础:最小二乘法

最小二乘法的拟合 最小二乘法是一种常用的统计学方法,用于通过在数据点中找到一条直线或曲线,使得这条直线或曲线与所有数据点的距离平方和最小化。在线性回归中,最小二乘法被广泛应用于拟合一条直线与数据点之间的关系。 对于线性回归&…

OSPF多区域配置-新版(12)

目录 整体拓扑 操作步骤 1.基本配置 1.1 配置R1的IP 1.2 配置R2的IP 1.3 配置R3的IP 1.4 配置R4的IP 1.5 配置R5的IP 1.6 配置R6的IP 1.7 配置PC-1的IP地址 1.8 配置PC-2的IP地址 1.9 配置PC-3的IP地址 1.10 配置PC-4的IP地址 1.11 检测R5与PC1连通性 1.12 检测…

C# WPF上位机开发(扩展上位机之外的技能)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 如果把c# wpf只是看成是一个做界面的框架,那确实有点狭隘了。单独的上位机软件,如果不需要上下游的支持,没有与…

vue3+ts 可视化大屏无限滚动table效果实现

注意:vue3版本需使用 vue3-seamless-scroll npm npm install vue3-seamless-scroll --save页面引入 TS import { Vue3SeamlessScroll } from "vue3-seamless-scroll";代码使用(相关参数可参考:https://www.npmjs.com/package/vu…

Unity与Android交互通信系列(3)

在上两篇文章中,我们已经能够通过直接使用Java,或者通过AndroidJavaClass、AndroidJavaObject这两个类实现在Unity端和Android原生端的通信。这已经可以解决很多问题,但这种方式不够模块化,不够优雅。 在实际使用中,将…

【宇宙猜想】AR文创入驻今日美术馆、北京天文馆等众多展馆,在AR互动中感受科技魅力!

近日,由「宇宙猜想」推出的AR系列文创产品先后入驻今日美术馆、北京天文馆、国家自然博物馆、上海天文馆、国家海洋馆、中华手工展馆等各大馆场并与其展开相关合作。 「宇宙猜想」致力于创造虚拟空间价值,用AR技术与文创产品碰撞出新的火花,为…

Qt Designer 常见需求

窗口 参考链接 【转载】Qt Designer 使用全攻略_qtdesigner使用-CSDN博客 QT屏幕自适应自动布局,拖动窗口自动变大变小(一)_qt布局随窗口大小变化-CSDN博客 pyqt5设置高分辨率以及icon显示模糊解决办法_python qt图显示不清晰-CSDN博客 窗…

RHCE9学习指南 第11章 网络配置

11.1 网络基础知识 一台主机需要配置必要的网络信息,才可以连接到互联网。需要的配置网络信息包括IP,子网掩码,网关和DNS。 11.1.1 IP地址 在计算机中对IP的标记使用的是32bit的二进制,例如, 11000000 10101000 00…

Python 爬虫之下载歌曲(二)

获取深夜emo云歌单信息 文章目录 获取深夜emo云歌单信息前言一、基本流程二、代码编写1.基本要素代码2.获取歌名和链接信息3.获取歌曲的作者信息4.将上面三个列表遍历保存 三、效果展示 前言 换个平台,爬歌深夜网抑云平台的歌单的相关信息,关于作者、歌…

Advanced IP Scanner - 网络扫描器

Advanced IP Scanner - 网络扫描器 1. Advanced IP ScannerReferences https://www.advanced-ip-scanner.com/cn/ ​ 可靠且免费的网络扫描器可以分析 LAN。该程序可扫描所有网络设备,使您能够访问共享文件夹和 FTP 服务器,(通过 RDP 和 Radmin) 远程控制…

[Angular] 笔记 9:list/detail 页面以及@Output

1. Output input 好比重力,向下传递数据,list 传给 detail,smart 组件传给 dumb 组件,父组件传给子组件。input 顾名思义,输入数据给组件。 output 与之相反,好比火箭,向上传递数据或事件。ou…

安装kafka

静态文件安装(单机) 解压到指定目录(解压到 /usr) tar -zxf kafka_2.11-2.2.0.tgz -C /usr/ 到指定的解压目录下 cd /usr/kafka_2.11-2.2.0/ 配置主机名 查看是否配置了HOSTNAME vim /etc/sysconfig/network 没有就新增 HOSTNA…

当 Redis 遇上 Serverless

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏…

【番外】在Windows安装Airsim/UE4踩坑合集

在Windows安装Airsim/UE4踩坑合集 1.安装过程中一定要确保Epic Games Launcher是英文环境,保存路径什么的也尽量是英文。2.UE4中的虚幻引擎一定要安装4.27版本以上的,不然的话最后运行vs的时候会报语法错误,网上根本查不到的那种错误。换了版…

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

目录 一、理论 1.K8S集群升级 2.环境 3.升级策略 4.master1节点迁移容器运行时(docker → containerd) 5.master2节点迁移容器运行时(docker → containerd) 6.node1节点容器运行时迁移(docker → containerd) 7.升级集群计划(v1.23.14 → v1.24.1&#…

阿里云OpenSearch-LLM智能问答故障的一天

上周五使用阿里云开放搜索问答版时,故障了一整天,可能这个服务使用的人比较少,没有什么消息爆出来,特此记录下这几天的阿里云处理过程,不免让人怀疑阿里云整体都外包出去了,反应迟钝,水平业余&a…

sheng的学习笔记-【中】【吴恩达课后测验】Course 4 -卷积神经网络 - 第三周测验

课程4_第3周_测验题 目录 第一题 1.现在你要构建一个能够识别三个对象并定位位置的算法,这些对象分别是:行人(c1),汽车(c2),摩托车(c3)。下图中的标签哪个…

Chrome插件精选 — 前端工具

Chrome实现同一功能的插件往往有多款产品,逐一去安装试用耗时又费力,在此为某一类型插件挑选出比较好用的一款或几款,尽量满足界面精致、功能齐全、设置选项丰富的使用要求,便于节省一个个去尝试的时间和精力。 1. FeHelper(前端助…