1. 程式人生 > >系統技術非業餘研究 » 檢視Erlang執行期內部狀態的方法(基於R13B04)

系統技術非業餘研究 » 檢視Erlang執行期內部狀態的方法(基於R13B04)

erts_debug:get_internal_state是用來獲取Erlang執行期內部資訊的主要手段. 但是這個功能是用來給開發人員或者說需要了解系統內部細節的場合, 比如說系統調優.
在R13B04可以使用的選項有:
1. reds_left
2. node_and_dist_references
3. monitoring_nodes
4. next_pid
5. next_port
6. ‘DbTable_words’
7. check_io_debug
8. process_info_args
9. processes
10. processes_bif_info
11. max_atom_out_cache_index
12. nbalance
13. available_internal_state
14. force_heap_frags
15. {process_status, Pid}
16. {link_list, Pid} 或者 {link_list, Port} 或者 {link_list, Nodename}
17. {monitor_list, Pid} 或者 {monitor_list, Nodename}
18. {channel_number, Sysname}
19. {have_pending_exit, Pid}
20. {binary_info, Binary}
21. {dist_port, Sysname}
22. {atom_out_cache_index, Atom}
23. {fake_scheduler_bindings, How} How=spread | processor_spread | thread_spread | default_bind | no_node_processor_spread | no_node_thread_spread | no_spread | unbound

使用此功能的前提是先用erts_debug:set_internal_state(available_internal_state, true). 否者呼叫get_internal_state會提示失敗.
我們演示下:

[email protected]:~/otp/test# erl -sname x
Erlang R14A (erts-5.8)  [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]

Eshell V5.8  (abort with ^G)
([email protected])1> erts_debug:get_internal_state(check_io_debug). 
** exception error: undefined function erts_debug:get_internal_state/1
(
[email protected]
)2> erts_debug:set_internal_state(available_internal_state, true). false =ERROR REPORT==== 7-Apr-2010::14:40:41 === Process <0.38.0> on node '[email protected]' enabled access to the emulator internal state. NOTE: This is an erts internal test feature and should *only* be used by OTP test-suites. (
[email protected]
)3> erts_debug:get_internal_state(check_io_debug). --- fds in pollset -------------------------------------- fd=0 type=chr driver_select ev=IN inport=#Port<0.294> inname=tty_sl -c -e indrv=tty_sl fd=3 type=fifo internal ep_ev=IN fd=4 type=fifo internal fd=7 type=sock driver_select ev=IN inport=#Port<0.62> inname=tcp_inet indrv=tcp_inet fd=8 type=sock driver_select ev=IN inport=#Port<0.65> inname=tcp_inet indrv=tcp_inet fd=9 type=fifo driver_select ev=IN inport=#Port<0.486> inname=inet_gethost 4 indrv=spawn fd=10 type=sock driver_select ev=IN inport=#Port<0.492> inname=tcp_inet indrv=tcp_inet fd=11 type=sock driver_select ev=IN inport=#Port<0.495> inname=tcp_inet indrv=tcp_inet used fds=6 internal fds=2 --------------------------------------------------------- 0 ([email protected])4> erts_debug:get_internal_state({process_status, self()}). running

Post Footer automatically generated by wp-posturl plugin for wordpress.

相關推薦

系統技術業餘研究 » 檢視Erlang執行期內部狀態方法(基於R13B04)

erts_debug:get_internal_state是用來獲取Erlang執行期內部資訊的主要手段. 但是這個功能是用來給開發人員或者說需要了解系統內部細節的場合, 比如說系統調優. 在R13B04可以使用的選項有: 1. reds_left 2. node_and_dist_referen

系統技術業餘研究 » 實驗Erlang語法對應的opcode 讓你對erlang理解更深

Erlang作為一門FP語言,和傳統的語言結構一樣, 有模組, 有函式, 有語句, 有判斷, 有迴圈, 還有特別的模式匹配。 那麼這些在底層是如何運作的。 我在底下給大家做個簡單的實驗,讓大家一窺內部的細節,讓大家寫碼的時候知道個大概。 erlang的VM作為register based的VM,

系統技術業餘研究 » 量化Erlang程序排程的代價

我們都知道erlang的基本哲學之一就是“小訊息大計算”,簡單的說就是儘可能的在訊息裡面攜帶完整的計算需要的資訊,然後計算要儘可能的多,最好遠超過訊息傳遞的代價。但是為什麼要這樣呢?erlang訊息傳送的效率是很高的, 參見這篇文章 Roughly speaking, I’m seeing 3.4

系統技術業餘研究 » The Erlang/OTP Roadmap(Erlang Factory London 2011)

剛結束不久的Erlang Factory London 2011我很關心的是The Erlang/OTP Roadmap, 每年由Kenneth Lundin宣佈的下一年的開發計劃,對我們掌握erlang團隊的開發進度和方向非常有幫助。 今年的ppt參看 這裡。 R15的開發包括: Line n

系統技術業餘研究 » 答erlang靜態資料查詢方式

解決這個問題有2種方式: 1.  函式匹配 2.  per module constant pool 針對這個問題我做了個試驗, 構建一個atom->int的查詢。 yu-fengdemacbook-2:~ yufeng$ cat t.erl -module(t). -export(

系統技術業餘研究 » erlsnoop erlang訊息監聽器(除錯erlang網路程式利器,支援最新的R13B04)

由於R13B以後, Erlang的分佈協議修改了格式, 添加了Atom Cache, erlsnoop在新版本下無法使用, 我特地打了patch, 使得它支援最新的版本,原始碼在附件中下載. 在erlang的郵件列表上看到: Have you tried putting a snoop to se

系統技術業餘研究 » erl_nif Erlang的ffi 擴充套件erlang的另外一種方法

我們知道擴充套件erl有2種方法, driver和port. 這2個方法效率都低,因為都要經過 port機制,對於簡單的模組,這個開銷有時候是不可接受的。這時候nif來救助了。今天釋出的R13B03已經支援了,雖然是實驗性質的。 erl_nif的代表API functions for an Erl

系統技術業餘研究 » 獲取Erlang系統資訊的程式碼片段

從lib/megaco/src/tcp/megaco_tcp_connection.erl摘抄的程式碼, 挺詳細的關於系統的資訊: SchedId = erlang:system_info(scheduler_id), SchedNum = erlang:sy

系統技術業餘研究 » Inside Erlang VM(你需要知道的VM原理)

公司培訓用的文件, 對於Erlang的VM會有個大體的認識, 方便設計和使用Erlang. 點解下載pdf格式的文件 Post Footer automatically generated by wp-posturl plugin for wordpress.

系統技術業餘研究 » 為什麼Erlang是軟實時的

之前在微博上@老師木 同學發起了個關於Erlang搶佔式排程的討論,相對於其他語言Erlang是真正的搶佔式排程服務,這也是erlang能夠號稱軟實時的很重要的原因之一,另外二個原因分別是erlang的GC是針對每個程序的,每次GC通常只需要收集幾K或者幾十個物件;BIF是用trap機制來保證公平

系統技術業餘研究 » False sharing問題及其解決方法

在做多執行緒程式的時候,為了避免使用鎖,我們通常會採用這樣的資料結構:根據執行緒的數目,安排一個數組, 每個執行緒一個項,互相不衝突. 從邏輯上看這樣的設計無懈可擊,但是實踐的過程我們會發現這樣並沒有提高速度. 問題在於cpu的cache line. 我們在讀主存的時候,資料同時被讀到L1,L2中

系統技術業餘研究 » 產生crashdump的三種方法

crashdump對於erlang的系統來講如同core對於c/++程式一樣寶貴,對於系統問題的修復提供了最詳細的資料。當然erlang很貼心了提供了網頁版的crashdump_view幫助使用者解讀資料,使用方法如下:crashdump_viewer:start(). 因為crashdump文字

系統技術業餘研究 » Erlang程式碼反編譯以及檢視彙編碼

Erlang的程式碼是先翻譯成abstract_code,再到目的碼的,如果有符號資訊很容易恢復原始碼,通常我們部署系統的時候需要把符號資訊去掉,reltool就可以幹這個事情! 我們演示下: $ cat server.erl -module(server). -compile(export

系統技術業餘研究 » 如何用gdb除錯erlang執行期(高階)

前些天在erlang的原始碼裡面閒逛的時候發現了 bin目錄下的cerl,一看原來是個除錯的高階貨。 我之前寫過一篇文章http://mryufeng.javaeye.com/blog/113852 如何除錯erlang 但是這是土八路的方法, cerl才是現代化工業。 # This is a s

系統技術業餘研究 » Erlang如何檢視gen_server系列的狀態 (高階)

gen_server在erlang otp程式設計中的地位是無可撼動的,幾乎都是gen_server或者gen_fsm的模型。那麼程式執行起來的時候 我們如何檢視gen_server的內部狀態呢。有2種方法: 1. 自己寫個類似於info這樣的函式,來獲取狀態。 2. 利用系統現有的架構。sas

系統技術業餘研究 » Erlang 17.5引入+hpds命令列控制程序預設字典大小

Erlang 17.5釋出引入控制程序預設字典大小的命令列引數: Erlang/OTP 17.5 has been released Written by Henrik, 01 Apr 2015 Some highlights of the release are: ERTS: Added co

系統技術業餘研究 » Erlang R16B03釋出,R17已發力

Erlang R16B03釋出了,通常03版本是bug fix版本,進入生產版本,官方的說明如下: OTP R16B03 is a service release with mostly a number of small corrections and user contributions. B

系統技術業餘研究 » Erlang R13B04 Installation

R13B04後erlang的原始碼編譯為了考慮移植性,就改變了編譯方式,以下是官方wiki上的安裝文件: 1. Cloning Here are the basic steps to build Erlang/OTP in the Git repository. Start by cloning:

系統技術業餘研究 » Erlang R15的記憶體delayed dealloc特性對訊息密集型程式的影響

在新的NUMA體系結構下,每個CPU都有自己的本地記憶體,如果要訪問其他CPU的記憶體,那算remote了,要走CPU之間的QPI通道,通常這樣速度會有40%的下降。 那麼對於多執行緒的程式來講,這個硬體的變化對軟體也有很大的影響。在多執行緒程式裡面,通常一個執行緒會為一個物件分配記憶體,然後把這

系統技術業餘研究 » Erlang R17新特性淺評

Erlang R17RC2 原始碼已經就緒, 參見 這裡 後續版本的釋出時間,官方的時間安排參見 這裡,摘抄如下: Preliminary dates for the upcoming release: Release: erts, emu,comp |Code stop