[Erlang33]使用recon从网页查看Erlang运行状态
0.需求分析
1.在进程数达到10w级以上的Node调用erlang:processes()来得到所有的进程Pid.然后算长度blabla...;
2. 当某个进程的信箱被堵塞了上万个消息队列时调用erlang:process_info(Pid,messages)来查看所有的消息。
| recon_web | observer |
| web页面查看,不需求wx GUI | 需要Erlang安装wx GUI application |
| 保证可以在生产环境中被安全调用 | 如果对于ets非常多或进程达到一定数量时会崩溃掉,不适合大多数在Node已出状况时使用 |
1. 项目介绍
| cowboy 1.0.1 | websocket 用于server通信 |
| recon | 用于查看Node状态 |
| jsx | 用于json转换 |
| lager | 日志记录 |
| socket.io.client | web端的websocket维护 |
| highcharts | web端绘制图表 |
2.recon_web 实现


3. recon_web中各种图表说明
1> recon_web_status:get_recon_info(node_stats_list).
[{process_summary,[{process_count,86},
{run_queue,0},
{error_logger_queue_len,0},
{memory_total,20032952},
{memory_procs,6067544},
{memory_atoms,330312},
{memory_bin,467040},
{memory_ets,465936}]},
{mem_summary,[{bytes_in,0},
{bytes_out,0},
{gc_count,2},
{gc_words_reclaimed,256},
{reductions,130454},
{scheduler_usage,[{1,0.9252873563218391},
{2,0.147239263803681},
{3,0.13218390804597702},
{4,0.14285714285714285}]}]}]
3.1. 根据 error_logger_queue_len process_count run_queue绘制以下表:

3.2. 根据上面的memory_total,memory_procs,memory_atoms,memory_bin,memory_ets绘制:

3. 3.根据scheduler_usage绘制:

3.4 根据bytes_in,bytes_out绘制:

2> recon_web_status:get_recon_info(proc_count).
[{proc_count,[{memory,[{<<"application_controller">>,602096},
{<<"0.26.0">>,372368},
{<<"recon_server">>,372328},
{<<"code_server">>,284656},
{<<"kernel_sup">>,197384},
{<<"0.159.0">>,88632},
{<<"erl_prim_loader">>,88552},
{<<"error_logger">>,75904},
{<<"init">>,67896},
{<<"0.45.0">>,55064}]},
{bin_memory,[{<<"kernel_sup">>,396661},
{<<"erl_prim_loader">>,27958},
{<<"0.26.0">>,7408},
{<<"0.159.0">>,5527},
{<<"0.45.0">>,1264},
{<<"application_controller">>,947},
{<<"user">>,852},
{<<"recon_server">>,454},
{<<"lager_event">>,278},
{<<"cowboy_clock">>,203}]},
{reductions,[{<<"recon_server">>,43125661},
{<<"erl_prim_loader">>,1328265},
{<<"0.159.0">>,243664},
{<<"code_server">>,196114},
{<<"application_controller">>,56899},
{<<"timer_server">>,53145},
{<<"kernel_sup">>,48774},
{<<"cowboy_clock">>,30740},
{<<"file_server_2">>,24547},
{<<"init">>,17949}]},
{total_heap_size,[{<<"application_controller">>,75112},
{<<"recon_server">>,46421},
{<<"0.26.0">>,46421},
{<<"code_server">>,35462},
{<<"kernel_sup">>,24503},
{<<"0.159.0">>,10958},
{<<"erl_prim_loader">>,10957},
{<<"error_logger">>,9358},
{<<"init">>,8370},
{<<"0.45.0">>,6771}]}]}]
3.5根据上面的memory, bin_memory,reductions, total_heap_size绘制:

3> recon_web_status:get_recon_info(port).
[{port_summary,[{<<"efile">>,5},
{<<"tcp_inet">>,2},
{<<"2/2">>,1},
{<<"tty_sl -c -e">>,1}]}]
3.6.根据 port_summary绘制:

4> recon_web_status:get_recon_info(inet_count).
[{inet_count,[{sent_oct,[]},
{recv_oct,[{<<"Port0.4012">>,1205},{<<"Port0.3695">>,0}]},
{sent_cnt,[]},
{recv_cnt,[{<<"Port0.4012">>,72},{<<"Port0.3695">>,0}]}]}]
3. 7.根据sent_oct, recv_oct, sent_cnt, recv_cnt绘制:

5>recon_web_status:get_recon_info(alloc_memory).
[{used,20804344},
{allocated,32247216},
{unused,11269856},
{allocated_types,[{binary_alloc,2786160},
{driver_alloc,164720},
{eheap_alloc,6763376},
{ets_alloc,1475440},
{fix_alloc,426864},
{ll_alloc,19923784},
{sl_alloc,164720},
{std_alloc,934768},
{temp_alloc,655960}]},
{allocated_instances,[{0,9094640},
{1,6305264},
{2,1246704},
{3,15664624},
{4,984560}]}]
3.8根据alloc_memory绘制:

6> recon_web_status:get_recon_info(cache_hit_rates).
[{cache_hit_rates,[{<<"instance1">>,[602,1113]},
{<<"instance3">>,[148,213]},
{<<"instance0">>,"OV"},
{<<"instance2">>,[7,13]},
{<<"instance4">>,[0,0]}]}]
3.9 根据cache_hit_rates绘制:

4. 参考文档
cowboy 建立websocket:http://ninenines.eu/docs/en/cowboy/HEAD/guide/ws_handlers/
highcharts: http://www.highcharts.com/
---------------------------------------------------------------------------------------------------------------------

inside the beam scheduler
[Erlang33]使用recon从网页查看Erlang运行状态的更多相关文章
- 查看cics 运行状态
查看cics 运行状态cicscp -v status all
- 利用 SQL Monitor 查看语句运行状态步骤
利用 SQL Monitor 查看语句运行状态步骤 1.确定语句被 SQL Monitor 监控 SQL> SELECT * FROM GV$SQL_MONITOR WHERE sql_id=' ...
- linux下查看Memcached运行状态
查看Memcached运行状态的命令是:echo stats | nc 127.0.0.1 11211 查看memcached状态的基本命令,通过这个命令可以看到如下信息: STAT pid 2245 ...
- 查看crontab运行状态
cron服务是linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start/sbin/service crond stop/sbin/ ...
- 在dos下查看memcache运行状态
在dos命令行下查看memcache运行状态,操作很简单,只需cmd下输入:telnet IP 端口号->stats ,如果本机器不支持telnet还需安装,可以百度telnet的安装方法. ...
- mongostat查看mongodb运行状态使用命令介绍
mongostat是mongodb自带的一个用来查看mongodb运行状态的工具 使用说明 mongostat -h 字段说明 启用后的状况是这样的 insert query update del ...
- docker基础——自定义镜像、创建私有仓库、查看 docker 运行状态
一.自定义镜像 1,案例1 要求:请自定义一个 docker 镜像,基于 hub.c.163.com/library/centos,要求创建出来的镜像在生成容器的时候,可以直接使用 ifconfig ...
- LINUX命令行如何查看memcache运行状态
(附加)如何查看memcache服务器端版本: ./memcached -h memcache的运行状态可以方便的用 stats 命令显示. 首先用telnet 127.0.0.1 11211这样 ...
- 用web查看hadoop运行状态
转载--http://www.weixuehao.com/archives/621 我们安装完hadoop,下面我们从视觉上看看hadoop怎么玩的. 我们可以在win7系统上,通过web界面,在浏览 ...
随机推荐
- [Java.web]EL表达式
<%@page import="cn.itcast.domain.Address"%> <%@page import="cn.itcast.domain ...
- Vue 安装环境创建项目
vue 是一个单页面框架,基于模块化组件化的开发模式. 搭建开发环境之前必须要安装node.js,然后安装vue的脚手架工具(命令行工具)win + R 输入npm install --global ...
- 第2章 Linux操作系统简介
1. Linux操作系统的构成 (1)内核(kernel) ①操作系统的核心,负责管理系统的进程.内存.设备驱动程序.文件和网络系统. ②控制系统和硬件之间的相互通信. ③决定着系统的性能和稳定性. ...
- 源文件封装为IP的步骤
因为模块的交接,最好将写好的源文件和生成的IP封装一个IP,然后再转交给其他的同事使用,这是一种好的习惯.但是对于,封装的过程还是需要注意一下.实际的看看步骤吧.1)将源文件和使用到的IP生成工程. ...
- Selenium Webdriver——Table类封装
WebTable.java import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebEl ...
- ScheduledThreadPoolExecutor 线程池调度 使用
package other; import java.util.concurrent.Callable; import java.util.concurrent.Executors; import j ...
- pdb调试
[pdb调试] 前置技能: os.getcwd():获取当前工作目录. os.chdir():切换工作目录. 运行 python -m pdb myscript.py (Pdb) 会自动停在第一行,等 ...
- go_Map
go语言中map使用哈希表,必须可以比较相等 除了slice,map,function的内建类型都可以作为key Struct类型不包括上述字段,也可作为key map中的key是无序的 packag ...
- 49. Group Anagrams (string, HashTable)
Given an array of strings, group anagrams together. For example, given: ["eat", "tea& ...
- js 倒计时功能,获取当前时间的年月日,时分秒
一.实现当前时间到指定截止时间的倒计时功能 <html> <head> <title>TEST</title> </head> <bo ...