一次erlang VM内存泄漏问题复盘

一次由Erlang垃圾回收导致的内存泄漏 最近有一个erlang的服务因为oom被kernel kill掉了, 由于从监控来说这个服务确实是内存不断增长。所以这个服务应该在哪里有内存泄漏才对。于是我又一次开始定位这个问题。定位到底哪个进程占用了最多的内存由于在另一个节点有一个没有crash,但是内存仍旧很高的节点,所以这个问题处理起来很简单。erlang提供了完整的运行时系统debug环境。这里我们用etop,根据memory排序,查看具... 阅读详情

1、问题发现

在一次压测中,发现erlang VM使用内存超出预期,其中process使用内存在正常范围内,system使用内存超出预期很多,具体占到整个内存使用量的80%,其中binary一项占用了system的绝大部分使用量,很明显,系统存在binary泄漏。

2、问题追踪

问题发生后,首先想到的就是到底binary在erlang VM中是怎么创建和回收的。众所周知,binary分为两种,小于64bytes存在进程私有堆中,大于64bytes的存在共享堆中,进程私有堆gc策略为分代gc,共享堆gc策略是引用计数Refc,也就是说当一个binary没有任何一个进程引用的时候才会被gc,具体机制不再赘述,相关问题可以参考https://www.cnblogs.com/yunba/p/4816384.html?utm_source=tuicool&utm_medium=referral

什么进程在引用了binary?erlang:process_info/2有个未公开的选项可以查看一个进程引用的所有binary,利用这个我们可以查看到大量引用binary的进程,具体可以参考http://blog.yufeng.info/archives/2882

topN(N)->
    [{M, P, process_info(P, [registered_name, initial_call,current_function, dictionary]), B} ||
            {P, M, B} <- lists:sublist(lists:reverse(lists:keysort(2,processes_sorted_by_binary())),N)].
RabbitMQ生产故障根因分析:消息堆积与镜像队列配置陷阱 RabbitMQ作为主流开源消息中间件,其高可用机制如镜像队列、消费者确认(ACK)、磁盘流控(disk_free_limit)等,常被误认为‘开箱即用’。但实际原理上,镜像队列的automatic同步模式不阻塞写入却积累unsynced消息,manual ACK缺失或basic.reject默认requeue=true会引发消息循环堆积,而disk_free_limit依赖易受IO干扰的file:read_file_info调用,导致伪磁盘告警触发全局流控。这些机制在单点看似合理,组合后极易形成正反馈雪崩 阅读详情

相关推荐

Erlang 内存泄漏分析

随着项目越来越依赖Erlang,碰到的问题也随之增加。前段时间线上系统碰到内存高消耗问题,记录一下troubleshooting的分析过程。线上系统用的是Erlang R16B02版本。 问题描述 有几台线上系统,运行一段时间,内存飙升。系统模型很简单,等待网络新连接,pool中找新可用process进行处理。top命令观察,发现内存都被Erlang进程给吃完了,netstat命令查看

云巴YunBa的博客 509

erlang 内存问题

erlang 内存分析 故障排除

phyzhou的专栏 2394

【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营04

典型值:λ1​∈[−0.02,−0.01], λ2​∈[−0.01,0], η1​,η3​∈[0.1,0.3], η2​,η4​∈[0.05,0.15]参数:δ1​∈[−0.8,−0.3], δ2​∈[−0.5,−0.2], δ3​∈[−0.4,−0.1], δ4​∈[−0.6,−0.2]参数:φ1​∈[0.1,0.3], φ2​∈[−0.2,−0.05], φ3​∈[−0.1,0.1], φ4​∈[−0.3,−0.1]参数:α∈[0.3,0.6], β∈[0.2,0.4], γ∈[0.01,0.03]

weixin_49199313的博客 1207

Erlang服务器线上事故回顾:两个故障案例详解

内存泄漏是指在程序运行过程中,申请的内存空间没有被正确释放,导致内存使用量不断增加,最终耗尽了服务器的可用内存。近期,我们的Erlang服务器遭遇了两次线上事故,给我们的系统稳定性带来了一些挑战。加强监控和报警:我们增加了监控系统,定期检查内存使用情况,并设置了相应的报警机制。通过限制每个连接的资源使用量,我们能够更好地控制并发连接的数量,避免资源耗尽问题的发生。通过以上措施,我们成功解决了第二次事故,并提升了系统的可伸缩性和稳定性。通过以上措施,我们成功解决了第一次事故,并确保了服务器的稳定运行。

XtmData的博客 245

Erlang项目内存泄漏分析方法

主要介绍了Erlang项目内存泄漏分析方法,本文讲解了分析方法、分析流程并找到问题原因和解决方法,需要的朋友可以参考下

workbench拓扑优化教程_拓扑优化实例-轮毂的优化

拓扑优化实例-轮毂的优化ANSYS Workbench的新版本集成了topology optimization模块,为用户的拓扑优化提供的很好的应用。通过拓扑优化topology optimization模块的使用可以对拓扑有较好的理解,该模块拓扑优化可以简单概括为一句话:如何在合适的位置去除确定的材料使用量,而相应的刚度变化影响最小。本例以汽车轮毂为例,来确定轮毂的辐条形状。1.建立模型DM中可...

weixin_39581739的博客 3043

Homebrew 必备软件清单:我的 macOS 开发环境搭建全记录

本文详细介绍了如何使用Homebrew在macOS上搭建高效的开发环境,包括基础配置、核心开发工具链、高效编码工具集等30个必备工具。通过Homebrew这一macOS缺失的包管理器,开发者可以一键安装命令行工具和GUI应用,大幅提升工作效率。文章还提供了日常维护命令和疑难问题解决方案,适合从新手到资深开发者的所有用户。

weixin_28836507的博客 353

利用GeoTools高效切割GeoTIFF为WebP瓦片:从配置到实战

本文详细介绍了如何利用GeoTools将GeoTIFF高效切割为WebP瓦片,从环境配置到实战技巧全面覆盖。通过对比WebP与PNG格式的优势,展示其在体积压缩和传输效率上的显著提升,并提供多线程切割、内存管理等性能优化方案,帮助开发者快速实现地理空间数据的Web地图服务部署。

agile9scrum的博客 815

Python 爬虫实战:爬取豆瓣读书评论并分析

摘要:本文以豆瓣读书《活着》评论数据为例,详细讲解Python爬虫开发与文本分析全流程。首先通过requests库爬取评论数据,解决分页、反爬等问题;然后利用BeautifulSoup解析页面提取评论内容、评分等核心信息;最后结合jieba进行关键词提取、snownlp完成情感分析,并通过可视化展示结果。分析显示该书评分以5星为主(占比70%),正面评论达82%,核心关键词为"活着""余华""生命"。全文包含完整代码与详细解析,帮助读者掌握非结构化

2503_91057718的博客 1497

进阶01:Labview与OPC UA设备通信

LabVIEW通过OPC UA实现高效设备通信方案 本文介绍了使用LabVIEW与OPC UA设备通信的完整实施方案。OPC UA协议具有跨平台兼容、高安全性和高效数据交换等优势。实施步骤包括:1)安装NI OPC UA工具包;2)搭建模拟测试环境,使用OPC UA Simulation Server创建测试变量;3)编写LabVIEW程序,实现连接服务器、事件订阅、数据读写等功能。重点展示了通过用户事件实现设备主动触发的机制,当模拟变量值改变时自动触发LabVIEW事件处理。该方案验证了OPC UA在工业

weixin_38637405的博客 1401

Ubuntu22.04安装ros(一键搞定)

然后发现可以一键安装,话不多说,直接终端输入如下指令。回车之后系统会自动安装ros。

m0_47313541的博客 7413

TensorRT量化校准数据集选择

在TensorRT中进行INT8量化时,校准数据集的选择至关重要,直接影响量化后模型的精度和推理性能。这是一个典型的问题。

浩瀚之水的专栏 497

轻量化部署实战:C#上位机集成AI模型的3种方案深度对比(ML.NET/ONNX/TensorFlow.NET)

C#上位机部署AI模型,核心不是“选最强大的方案”,而是“选最适配的方案”——工控机的低配置、高稳定性需求,决定了“轻量化”和“部署简单”是选型的首要原则。回顾3种方案:ML.NET:原生、轻量化、零依赖,适合传统ML场景,低配置工控机首选;ONNX Runtime:通用、平衡、易落地,适合深度学习场景,工业落地首选;TensorFlow.NET:强大、灵活、纯C#,适合复杂模型,高配置工控机首选。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 364

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: erlang踩坑记录之os_mon
pyf725324
博客等级 码龄17年 6粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值