【讀書筆記】"Erlang In Anger" Erlang應用的錯誤調試

封面

全書程序員

封面不明覺厲

這本書很薄,只有93頁,並且是免費的,有興趣的朋友能夠去看一看。雖然書中沒有提到Elixir,但對於學習Elixir也頗有幫助。這本書適合對Erlang和OTP有初步瞭解的人閱讀。書中附帶練習。緩存

首先講的是如何閱讀代碼

閱讀別人的代碼首先要搞清楚代碼的類型。做者將Erlang的代碼分紅幾類:數據結構

  1. 生代碼 —— 通常是初學者的練習,不能算完整的項目;
  2. OTP應用 —— 包含了說明文檔,測試,配置文件等等,能夠直接使用。
    1. 庫應用 —— 通常有兩個模塊 appname, appname_something
    2. 普通應用 —— 通常兩個模塊 appname,appname_app
    3. OTP發行包 —— 使用rebar3將項目和它的全部依賴打包在一塊兒後獲得的

第二章講的是如何編寫開源的Erlang應用

介紹了一下rebar3,它是用於生成Erlang發行包的工具。
一個OTP發行包每每包含多個OTP應用。
若是初始狀態是不可靠的,那麼Supervisor的做用就很小了。
好比,若是不能保證重啓後鏈接正常,就須要在初始代碼中發送重連消息,避免頻繁的崩潰。
因此,初始狀態的限制條件越少越好。
三種應用策略:app

  1. permanent:一旦出問題,整個系統崩潰;
  2. transient:normal問題沒事,別的問題崩潰;
  3. temporary:什麼問題都沒事,只會報告。

第三章講的是爲過載狀況設計

咱們能夠把一個項目當作是一間浴室,水流表明用戶的請求,當水流過大時,就會從浴缸裏溢出。那麼如何解決呢,一般咱們須要找到瓶頸所在,是排水管道太窄了,仍是浴缸過小了,或許須要更多的浴室來處理水流。可是,當咱們沒有能力解決這些瓶頸時,咱們就須要聰明一些,讓系統可以在過載狀況下運做。有兩種策略:back-pressure 和 load-shedding。函數

須要避免錯誤日誌爆炸。限制輸入能夠保證最基本的服務,可是用戶體驗會變得不好。也就是back-pressure會變大。記得設置好time out。工具

丟棄數據的方式

  1. 隨機取出 —— 是最簡單且魯棒性最強的節省空間的方法;
  2. 隊列緩存 —— 隊列數據結構;
  3. 堆棧緩存 —— 低延遲;列表數據結構;缺點是不會按順序處理請求;
  4. 時間敏感緩存 —— 會在舊的請求超時以前進行處理;
  5. 恆定負載 —— 例如ETS。

第四章 鏈接到遠程節點的方式

  1. JCL模式
  2. Remsh
  3. SSH守護
  4. 命名管道

第五章 運行指標

主要講如何查看運行時的各類指標。學習

  1. erlang:memory().
  2. length(processes())
  3. length(erlang:ports())

第六章 閱讀Crash Dumps

每當Erlang進程崩潰後,咱們能夠閱讀一個名爲 erl_crash.dump 的文件來尋找緣由。測試

第七章 內存泄露

這一章講如何檢測和修復內存泄露,內容比較專業,沒看懂。:p設計

第八章 CPU資源調度

介紹了一些查看CPU當前參數的函數。調試

第九章 跟蹤

能夠對任何Erlang代碼進行跟蹤,用pid和模式匹配來鎖定目標。

結束

這本書詳細地介紹了對Erlang程序進行錯誤調試的過程,還介紹了調試工具recon。本書適合有項目經驗的中高級Erlang程序員。

相關文章
相關標籤/搜索