2011-03-01 34 views
3

對於我的erlang應用程序,我已經使用sasl logger和log4erl,並且發送給它們的事件數量大約爲每秒1000次時,它們都表現不佳。 log4erl提供了更好的性能,但過了一段時間後,郵箱開始填滿,從而開始膨脹虛擬機。 Erlang高容量日誌記錄

將使用disk_log是一個更好的選擇(因爲它會在1000個事件每秒負載下工作嗎?)。

我試圖在shell上使用disk_log ...在這個例子中,他們首先將消息轉換爲二進制文件(list_to_binary)並使用「博客」功能寫入文件。

這樣做會幫助我使用高效率的大容量記錄儀嗎?

還有一個疑問:: 使用disk_log:博客文本的大小隻是84個字節......但disk_log:log_terms..the尺寸爲970 bytes..why這麼大的差別?

+2

Erlang的IO庫可以處理列表和二進制文件(以及兩者的混合)。您不需要轉換任何將最終轉到端口的內容。但是,無論出於何種原因,庫API都可能需要它。 – 2011-03-01 12:59:45

+0

使用disk_log:blog的文本大小僅爲84字節......但是使用disk_log:log_terms ..大小爲970字節......爲什麼有如此大的差異? – Arunmu 2011-03-01 13:12:40

+0

問題是您可能正在使用記錄器作爲示蹤劑。 SASL尤其有相當的開銷。 – 2011-03-01 17:34:16

回答

2

自己動手破解一些東西。具有內存存儲和批量轉儲到光盤的專用記錄器是最快的解決方案。如果您無法承受丟失任何數據(在發生虛擬機崩潰的情況下),請在遠程節點上執行此操作。一旦我使用了遠程'解決方案',並且每查詢一次5秒的目標虛擬機。我沒有注意到對系統的影響。

+0

@ user425720 ::現在我正在用disk_log與「內部格式」,它將以二進制格式轉儲日誌,我將它解析出來。 contd ... – Arunmu 2011-03-01 14:42:19

+0

我將在一個將繼續運行的進程中打開disk_log,並且我會將日誌的名稱傳遞給所有需要日誌記錄的進程。考慮到disk_log有一些所有者和匿名概念,它是正確的方法。 – Arunmu 2011-03-01 14:44:06

+0

@ArunMu說實話,我並沒有真正使用disc_log。你的情景聽起來不錯。有記錄器守護進程並傳遞給它是很常見的。我沒有使用disc_log,因爲光盤上的二進制格式根本不方便。 – user425720 2011-03-01 15:08:50

1

在大容量日誌中,我更喜歡經過測試的解決方案,如scribe或flume。檢查erl_scribe

+0

cool..never聽說過 – Arunmu 2011-03-01 15:39:23

+0

是真實的,但重要的照顧清單是重要的 – user425720 2011-03-01 15:48:24

+0

日誌記錄似乎是一件容易的工作。但憑藉經驗,我可以說這將成爲一個沉重的負擔,即使是在大批量生產時也是一個瓶頸。在分佈式環境中消化日誌也是一個問題(當你拋出2個erlang節點來獲得更多的併發性時)。 Scribe和Flume都針對這些問題進行了調整。 – frail 2011-03-01 16:02:56