系統技術非業餘研究 » 從Megaco學如何寫診斷程式碼
Megaco/H.248 is a protocol for control of elements in a physically decomposed multimedia gateway, enabling separation of call control from media conversion. A Media Gateway Controller (MGC) controls one or more Media Gateways (MG).
Megaco有非常清晰的日誌和診斷供我們參考, 精細到幾行程式碼一個診斷資訊, 非常好的風格. 有了這些資訊對系統的執行完全瞭如指掌.
有3種方式:
1. 大量的除錯日誌, 在DEBUG方式下, 會有大量的系統允許期間的軌跡和訊息
%%%---------------------------------------------------------------------- %%% Debug %%%---------------------------------------------------------------------- -ifdef(megaco_debug). -define(d(F,A), io:format("~w: " ++ F ++ "~n",[?MODULE|A])). -else. -define(d(F,A), ok). -endif.
用起來很方便, 摘抄一段如下
?d("encode(~p) -> entry with" "~n PackageItem: ~p" "~n SubItem: ~p", [Scope, PackageItem, SubItem]),
2. 異常日誌, 用於記錄程式允許中間產生的各種各樣的異常, 便於事後調查.
%%%---------------------------------------------------------------------- %%% Error/warning/info message macro(s) %%%---------------------------------------------------------------------- -define(megaco_info(F, A), (catch error_logger:info_msg("[ ~w : ~w : ~p ] ~n" ++ F ++ "~n", [?APPLICATION, ?MODULE, self()|A]))). -define(megaco_warning(F, A), (catch error_logger:warning_msg("[ ~w : ~w : ~p ] ~n" ++ F ++ "~n", [?APPLICATION, ?MODULE, self()|A]))). -define(megaco_error(F, A), (catch error_logger:error_msg("[ ~w : ~w : ~p ] ~n" ++ F ++ "~n",[?APPLICATION, ?MODULE, self()|A]))).
使用, 摘抄一段如下
warning_msg(F, A) -> ?megaco_warning("Transaction sender: " ++ F, A). error_msg(F, A) -> ?megaco_error("Transaction sender: " ++ F, A).
3. Event Trace機制
先進的trace能夠讓系統的訊息互動,執行軌跡以可視的方式體現在使用者面前.
%%%---------------------------------------------------------------------- %%% Event Trace %%%---------------------------------------------------------------------- -ifdef(megaco_trace_io). -define(report(Level, C, Label, Contents), io:format("*** [~s] ~p ~p *** " "~n ~p[~p] " ++ Label ++ "~n ~p" "~n ~p" "~n", [megaco:format_timestamp(now()), self(), Level, ?MODULE, ?LINE, C, Contents])). -else. -define(report(Level, C, Label, Contents), megaco:report_event(Level, ?APPLICATION, Label, [{line, ?MODULE, ?LINE}, C | Contents])). -endif. -define(report_important(C, Label, Contents), ?report(20, C, Label, Contents)). -define(report_verbose( C, Label, Contents), ?report(40, C, Label, Contents)). -define(report_debug( C, Label, Contents), ?report(60, C, Label, Contents)). -define(report_trace( C, Label, Contents), ?report(80, C, Label, Contents)).
使用, 摘抄一段如下
?report_trace(ReceiveHandle, "callback: syntax error", [ErrorDesc, Error]),
總結: ET很強大, 而且是專門為Megaco開發的, 目的就是能夠視覺化看到Megaco系統元件見的訊息流程互動.
Post Footer automatically generated by wp-posturl plugin for wordpress.
相關推薦
系統技術非業餘研究 » 從Megaco學如何寫診斷程式碼
Megaco/H.248 is a protocol for control of elements in a physically decomposed multimedia gateway, enabling separation of call control from media conv
系統技術非業餘研究 » 從FTP模組學習先進的診斷技術(Erlang Trace機制)
我們開發好了一個軟體的時候,通常是經過嚴格測試的,才分發給使用者使用, 但是即使這樣也不能保證使用者的環境和我們的相同, 我們的軟體還是會失敗的. 問題是如何診斷這些問題. 通常的做法是寫log,這是個很有效的方式. 但是寫log要程式碼支援,而且會帶來負面的效能影響. Erlang提供了強大的T
系統技術非業餘研究 » 看圖學TCP API以及狀態變遷
client的connect呼叫和server端之間的三根線應該對應著三次握手過程,這裡有一點問題。 client傳送的sync到達應該在server端accpet之前,所以橙色線應該指向accpet前面。 同樣,server端響應ack,sync是在accpet呼叫前的,因此粉色線也應該放在a
系統技術非業餘研究 » javaeye上我寫的erlang的帖子電子書下載
如題, 方便大家閱讀,這個電子書記錄了俺的研究過程,希望對大家有幫助。 erlang深度分析文章下載 Post Footer automatically generated by wp-posturl plugin for wordpress. No related posts.
系統技術非業餘研究
ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼
系統技術非業餘研究 » MySQL資料庫架構的演化觀察
MySQL資料庫架構的演化觀察 December 14th, 2017 Categories: 資料庫 Tags: mysql
系統技術非業餘研究 » inet_dist_connect_options
Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke
系統技術非業餘研究 » 推薦工作機會
最後更新時間:2014/11/28 請賜簡歷至:[email protected], 感謝您對加入我們公司有興趣,我們希望能早日和您共事。 以下幾個職位1年內有效,歡迎內部轉崗: 資深資料工程師 公司:阿里(核心系統資料庫組) 工作地點:杭州(西溪園區) 崗位描述: 分析雲服務產生的海
系統技術非業餘研究 » 新的工作和研究方向
和大家更新下: 做了將近8年資料庫後,我的工作和研究方向將會延伸到虛擬化和計算相關的雲服務,希望能夠和大家一起進步,Happy New Year! 預祝大家玩得開心! Post Footer automatically generated by wp-posturl plugin for w
系統技術非業餘研究 » 叢集引入inet_dist_{listen,connect}_options更精細引數微調
Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke
系統技術非業餘研究 » 2017升的最快的幾個資料庫無責任點評
ItPub寫的文章“2017 年度 DB-Engines 資料庫冠軍得主:PostgreSQL 封王!”, 點選 這裡 進一步閱讀 升的最快的幾個資料庫,我簡單的無責任點評: PG資料庫是很老的資料庫,不過這幾年冉冉升起,因為是學院派的,有很好的學術和智力的支援,一直以來在資料庫的體系結構,程式碼
系統技術非業餘研究 » 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
系統技術非業餘研究 » inet_dist_listen_options
Erlang 17.5版本引入了inet_dist_{listen,connect}_options,對於結點間的互聯socket可以有更精細的控制,RPC的時候效能可以微調: raimo/inet_tcp_dist-priority-option/OTP-12476: Document ke
系統技術非業餘研究 » 老生常談: ulimit問題及其影響
ulimit最初設計是用來限制程序對資源的使用情況的,因為早期的系統系統資源包括記憶體,CPU都是非常有限的,系統要保持公平,就要限制大家的使用,以達到一個相對公平的環境。以下是典型的機器預設的限制情況: $ ulimit -a core file size (blocks,
系統技術非業餘研究 » 求賢帖
原創文章,轉載請註明: 轉載自系統技術非業餘研究 本文連結地址: 求賢帖 作為一個優秀的工程師,你其實不缺少才華,你缺少的是神一樣的隊友、充滿挑戰的世界級技術難題,和一個可以施展自己才華的大舞臺。加入阿里核心系統資料庫開發團隊吧,你缺的這裡都有。來吧,戳這裡,給我們見識你的機會:http://b
系統技術非業餘研究 » 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:
系統技術非業餘研究 » Understanding Linux CPU Load 資料彙總
最近關注線上CPU load的人挺多,很多人覺得load太高系統就有問題,就想各種辦法來折騰。其實在我看來load只是系統CPU執行佇列的在執行程序數的近似值, 如下圖: 對於Unix發展的初期,機器的效能比較差,CPU核數也少,參考意義比較大。現在的機器都是非常強悍的,CPU,記憶體,IO各個
系統技術非業餘研究 » 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