Erlang tool -- recon
遇见recon 以来, 每次定位系统瓶颈, 总是能让我眼前一亮. 比如说, 定位非尾递归导致的内存暴涨, 定位引发CPU满载的进程.得心应手,每每额手称庆.
recon 是ferd 大神 释出的一个 用于生产环境诊断Erlang 问题的一个工具, 不仅仅是对Erlang stdlib 接口的封装, 还有memory fragmentation 相关的函数.
CPU 统计相关
在ferd 大神放出的 Erlang_In_Anger 中提到了
The reduction count has a direct link to function calls in Erlang, and a high count is usually the synonym of a high amount of CPU usage.
What’s interesting with this function is to try it while a system is already rather busy, with a relatively short interval. Repeat it many times, and you should hopefully see a pattern emerge where the same processes (or the same kind of processes) tend to always come up on top.
Using the code locations and current functions being run, you should be able to identify what kind of code hogs all your schedulers.
引用中提到的"this function" 是:
> recon:proc_window(reductions, , ).
也就是说, 将某个进程在一段时间内的reductions 变化大小作为这一段时间内该进程消耗CPU的程度.
Memory Leaks
memory leaks 主要是 refc binary, 这一点主要是和binary 的内存结构有关, 之前写的一篇blog 有提到这个.
解决的方式 ferd 也有一些建议:
Once you’ve established you’ve got a binary memory leak using recon:bin_leak(Max) , it should be simple enough to look at the top processes and see what they are and what kind of work they do.
Generally, refc binaries memory leaks can be solved in a few different ways, depending on the source:• call garbage collection manually at given intervals (icky, but somewhat efficient);
• stop using binaries (often not desirable);
• use binary:copy/1-210 if keeping only a small fragment (usually less than 64 bytes) of a larger binary;
• move work that involves larger binaries to temporary one-off processes that will die when they’re done (a lesser form
of manual GC!);• or add hibernation calls when appropriate (possibly the cleanest solution for inactive processes).
The first two options are frankly not agreeable and should not be attempted before all else failed. The last three options
are usually the best ones to be used.
第一种方案rabbitmq 其实是在使用的, 第二种基本上不太可能, 第三种应该在代码中多加注意, 第四种也就是尽可能使用Erlang VM 所倡导的short-lived 进程, 第五种也就是进程hibernate 方案同样在之前写的一篇blog中有提到 .
Memory Fragmentation
内存碎片和Erlang 虚拟机内存管理方式有很大的关系, 也就是内存泄露, 最明显的现象就是erlang:memory() 显示出来的内存使用量远远小于操作系统报告出来(如 top)的使用量.
总结
recon 是个实际操作性很强的工具, 没有实际的使用案例, 很难说得清楚它的妙用.
基友们有啥问题, 可以提出来, 大家一起交流.
Erlang tool -- recon的更多相关文章
- Erlang tool -- lager overload protection
log 这个事, 说大不大说小又不小. 大点的, 可以用scribe flume 这样的系统去做, 小点的, 也就打印一个调试信息而已. 在Erlang 中, log 这事情确实比较伤, error_ ...
- Erlang库 -- 有意思的库汇总
抄自这里 首先,库存在的目的大致可分为:1.提供便利2.尽可能解决一些痛点 首先,我们先明确一下Erlang编程语言的一些痛点(伪痛点):1,单进程问题Erlang虚拟机属于抢占式调度,抢占式调度有很 ...
- [Erlang33]使用recon从网页查看Erlang运行状态
0.需求分析 Erlang最好的卖点之一就是提供了一个非常强大的shell来查看Node运行时的各种状态,可以进行各种各样的内部查看,在运行时调试和分析,热更新代码. 但是总有一些在生产环境下要慎 ...
- Erlang 虚拟机内的内存管理(Lukas Larsson演讲听写稿)
Erlang核心开发者Lukas Larsson在2014年3月份Erlang Factory上的一个演讲详细介绍了Erlang内存体系的原理以及调优案例: http://www.erlang-fac ...
- [Erlang 0122] Erlang Resources 2014年1月~6月资讯合集
虽然忙,有些事还是要抽时间做; Erlang Resources 小站 2014年1月~6月资讯合集,方便检索. 小站地址: http://site.douban.com/204209/ ...
- [Erlang 0114] Erlang Resources 小站 2013年7月~12月资讯合集
Erlang Resources 小站 2013年7月~12月资讯合集,方便检索. 附 2013上半年盘点: Erlang Resources 小站 2013年1月~6月资讯合集 小站地 ...
- erlang mac os 10.9 卸载脚本
#!/bin/bash if [ "$(id -u)" != "0" ]; then echo "Insufficient permissions. ...
- 使用recon/domains-hosts/baidu_site模块,枚举baidu网站的子域
使用recon/domains-hosts/baidu_site模块,枚举baidu网站的子域 [实例3-1]使用recon/domains-hosts/baidu_site模块,枚举baidu网站的 ...
- erlang调试技术之etop
etop是erlang进程信息查看工具,类似于UNIX的top. 一.配置参数 node The measured node. Value: atom() Mandatory setcookie Co ...
随机推荐
- Coursera SDN M1.2.1 SDN History: Programmable Networks 1
接上第二点 NOTE (2)active networks => Programmability in networks(1990s) Sturcture: What are active ne ...
- SQL Server2012创建约束图解
SQLServer中有五种约束:Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束 1 . Primary Key 约束 在 ...
- Spring Boot安装
Spring引导依赖项groupId使用org.springframework.boot. 通常Maven POM文件将继承自spring-boot-starter-parent项目,并将依赖性声明为 ...
- jxl将list导入到Excel中供下载
jxl操作excel /** * 分隔符 */ private final static String SEPARATOR = "|"; /** * 由List导出至指定的Shee ...
- Java网络编程和NIO详解6:Linux epoll实现原理详解
Java网络编程和NIO详解6:Linux epoll实现原理详解 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO h ...
- C# 格式化一些知识点
这是在看<C#本质论>偶然遇见的一个问题,看不懂,那后面的就没有法看了,于是百度搜索了“C#格式化”这一关键字,于是有了下面的内容.很多一下子记不住,又怕自己忘记,还是做一个笔记吧,方便自 ...
- idea里面Java文件显示一个x
idea里面Java文件显示一个x,编译时过滤了,setting->builder->compiler->excludes
- Mac iStat Menu 注册码
9185-4915-3252-3716-0000 1574-5977-7956-8062-0000 6015-5448-3282-4975-0000 9665-5955-6856-2071-0000 ...
- Python3 字典Dict(十三)
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 字典是另一种可变容器模型,且可存储任意类 ...
- 福大软工 · 第十一次作业 - Alpha 事后诸葛亮
拖鞋旅游队团队事后诸葛亮会议 前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10054510.html 时间:2018-12-1 20:00 地 ...