檢視原始碼 觀察器

簡介

觀察器(Observer)是一個圖形化工具,用於觀察 Erlang 系統的特性。觀察器會顯示系統資訊、應用程式監管樹、程序資訊、ETS 表格、Mnesia 表格,並包含 Erlang 追蹤的前端介面。

開始使用

從獨立節點執行觀察器,以盡量減少對被觀察系統的影響。

範例

% erl -sname observer -hidden -setcookie MyCookie -run observer

使用「節點」(Nodes)選單選擇要觀察的節點。選單「檢視」(View)>「更新間隔」(Refresh interval)控制視圖的更新頻率。更新間隔是針對每個檢視器設定的,因此您可以針對每個檢視器設定不同的間隔。為了盡量減少對系統的影響,只有作用中的檢視器才會更新。其他視圖會在啟用時更新。

滑鼠按鈕的行為與預期相同。使用滑鼠左鍵選擇物件,使用滑鼠右鍵開啟包含最常用選項的選單,以及雙擊滑鼠來顯示所選物件的資訊。在大多數具有多個欄位的檢視器中,您可以透過左鍵點擊欄位標頭來變更排序順序。

系統標籤頁

「系統」(System)標籤頁會顯示關於作用中 Erlang 節點及其執行時系統的一般資訊,例如建置配置、系統功能和整體使用統計資料。

負載圖表標籤頁

「負載圖表」(Load Charts)標籤頁會顯示作用中 Erlang 節點上目前資源使用情況的圖表。

「排程器利用率」(Scheduler Utilization)圖表顯示每個排程器的使用情況,其中每個排程器的使用情況都有獨特的顏色。

「記憶體使用量」(Memory Usage)圖表顯示總記憶體使用量和每個記憶體類別的使用量,其中每個類別都有獨特的顏色。類別如下所示

  • 總計 - 所有記憶體類別的總和。

  • 程序 - 所有程序使用的記憶體總和。

  • Atom - Atom 表格使用的空間大小。

  • 二元 - 所有已配置的堆外二進位的總和。

  • 程式碼 - 配置用於程式碼儲存的記憶體。

  • Ets - 所有 ETS 表格的已用記憶體。

「IO 使用量」(IO Usage)圖表顯示系統上目前的 I/O 負載。

記憶體配置器標籤頁

「記憶體配置器」(Memory Allocators)標籤頁顯示載體大小和目前記憶體載體的詳細資訊。有關記憶體載體的詳細資訊,請參閱 ERTS 應用程式中的模組 erts_alloc

「最大載體大小」(Max Carrier size)欄位顯示自上次節點變更或應用程式啟動以來,觀察器所看到的最大值,亦即切換節點將會重置最大值欄位。值是取樣的,因此可能存在比顯示的更高的值。

應用程式標籤頁

「應用程式」(Applications)標籤頁會呈現應用程式資訊。在左側清單中選擇一個應用程式以顯示其監管樹。樹狀結構中的右鍵選單選項如下:

  • 程序資訊 - 開啟所選程序的詳細資訊視窗,包括下列內容:

    • 程序資訊 - 顯示程序資訊。

    • 訊息 - 顯示程序訊息。

    • 字典 - 顯示程序字典。

    • 堆疊追蹤 - 顯示程序目前的堆疊追蹤。

    • 狀態 - 顯示程序狀態。

    • 日誌 - 如果已啟用且可用,則顯示程序的 SASL 日誌項目。

  • 追蹤程序 - 將所選程序的識別碼新增至「追蹤概觀」(Trace Overview)標籤頁,以及程序所在的節點。

  • 追蹤具名程序 - 新增程序的已註冊名稱。當在許多節點上進行追蹤時,這非常有用,因為具有該名稱的程序會在所有追蹤的節點上被追蹤。

  • 追蹤程序樹 - 將所選程序及其下方右側的所有程序新增至「追蹤概觀」(Trace Overview)標籤頁。

  • 追蹤具名程序樹 - 將所選程序及其下方右側的所有程序新增至「追蹤概觀」(Trace Overview)標籤頁。

程序標籤頁

「程序」(Processes)標籤頁以欄位列出程序資訊。對於每個程序,會顯示下列資訊:

  • Pid - 程序識別碼。

  • 描述 - 已註冊名稱、程序標籤或初始函式。

  • Reds - 在程序上執行的縮減次數。這可以呈現為累積值或自上次更新以來的值。

  • 記憶體 - 透過呼叫 process_info(Pid,memory) 取得的程序大小(以位元組為單位)。

  • MsgQ - 程序的訊息佇列長度。

「程序資訊」(Process info)選項會開啟滑鼠指標下程序的詳細資訊視窗,包括下列內容:

  • 程序資訊 - 顯示程序資訊。

  • 訊息 - 顯示程序訊息。

  • 字典 - 顯示程序字典。

  • 堆疊追蹤 - 顯示程序目前的堆疊追蹤。

  • 狀態 - 顯示程序狀態。

  • 日誌 - 如果已啟用且可用,則顯示程序的 SASL 日誌項目。

注意

「日誌」(Log)要求在觀察到的節點上啟動應用程式 SASL,並將 log_mf_h 作為日誌處理常式。觀察到的節點必須是 Erlang/OTP R16B02 或更高版本。點擊選單「日誌」(Log)>「切換日誌檢視」(Toggle log view)時,不能在觀察到的節點上啟動 rb 伺服器。退出或變更觀察到的節點時,rb 伺服器會在觀察到的節點上停止。

「追蹤所選程序」(Trace selected processes)選項會將所選程序的識別碼新增至「追蹤概觀」(Trace Overview)標籤頁,以及程序所在的節點。

「依名稱追蹤所選程序」(Trace selected processes by name)選項會新增程序的已註冊名稱。當在許多節點上完成追蹤時,這會非常有用,因為具有該名稱的程序會在所有追蹤的節點上被追蹤。

「終止程序」(Kill process)選項會透過傳送具有原因 kill 的結束訊號,粗暴地終止滑鼠指標下的程序。

埠標籤頁

「埠」(Ports)標籤頁會以欄位列出埠資訊。對於每個埠,會顯示下列資訊:

  • Id - 埠識別碼。

  • 已連線 - 擁有埠的程序的程序識別碼。

  • 名稱 - 埠的已註冊名稱(如果有的話)。

  • 控制項 - 由 erlang:open_port/2 設定的命令集名稱。

  • 插槽 - 埠的內部索引。

「埠資訊」(Port info)選項會開啟滑鼠指標下埠的詳細資訊視窗。除了上述資訊之外,它還會顯示連結和監視器。

「追蹤所選埠」(Trace selected ports)選項會將所選埠的識別碼,以及埠所在的節點,新增至「追蹤概觀」(Trace Overview)標籤頁。

「依名稱追蹤所選埠」(Trace selected ports by name)選項會將埠的已註冊名稱新增至「追蹤概觀」(Trace Overview)標籤頁。當在許多節點上完成追蹤時,這會非常有用,因為具有該名稱的埠會在所有追蹤的節點上被追蹤。

「關閉」(Close)選項會在滑鼠指標下的埠上執行 erlang:port_close/1

通訊端標籤頁

「通訊端」(Sockets)標籤頁分為兩個部分。第一部分包含一般 socket 資訊,第二部分以欄位列出通訊端資訊。

對於每個通訊端,會顯示下列資訊:

  • Id - 通訊端識別碼。

  • 擁有者 - 擁有通訊端的程序的程序識別碼。

  • Fd - 通訊端的底層檔案描述符。

  • 網域 - 此通訊端的通訊網域(例如 inet 或 inet6)。

  • 類型 - 此通訊端的類型(例如串流或數據包)。

  • 協定 - 此通訊端的協定(例如 tcp 或 udp)。

  • 讀取狀態 - 通訊端的讀取狀態。

  • 寫入狀態 - 通訊端的寫入狀態。

「通訊端資訊」(Socket info)選項會開啟滑鼠指標下通訊端的詳細資訊視窗。除了上述資訊之外,它還會顯示監視器。

「關閉」(Close)選項會在滑鼠指標下的通訊端上執行 socket:close/1

表格檢視器標籤頁

「表格檢視器」(Table Viewer)標籤頁會列出表格。預設情況下,會顯示 ETS 表格,而不顯示無法讀取的私人 ETS 表格和由 OTP 應用程式建立的表格。使用選單「檢視」(View)來檢視「系統」ETS 表格、無法讀取的 ETS 表格或 Mnesia 表格。

雙擊以檢視表格內容,或按一下右鍵並選擇「顯示表格內容」(Show Table Content)選項。若要檢視表格資訊,請選擇表格並啟用選單「檢視」(View)>「表格資訊」(Table information),或按一下右鍵並選擇「表格資訊」(Table info)選項。

您可以使用正規表示式,並搜尋物件,以及編輯或刪除它們。

追蹤概觀標籤頁

追蹤概觀 頁籤用於處理追蹤。透過選擇要追蹤的程序或埠,以及如何追蹤它們來進行追蹤。對於程序,您可以追蹤訊息、函式呼叫、排程、垃圾回收,以及與程序相關的事件,例如 spawnexit 和許多其他事件。對於埠,您可以追蹤訊息、排程和與埠相關的事件。

要追蹤函式呼叫,您還需要設定追蹤模式。追蹤模式會選擇要追蹤的函式呼叫。可以使用比對規範進一步減少追蹤的函式呼叫數量。比對規範還可以用來觸發追蹤訊息中的更多資訊。

您也可以對訊息設定比對規範。預設情況下,如果追蹤訊息,則會追蹤程序或埠傳送和/或接收的所有訊息。可以使用比對規範來減少追蹤的訊息數量,和/或觸發追蹤訊息中的更多資訊。

注意

追蹤模式僅適用於追蹤的程序和埠。

程序從應用程式程序頁籤添加。埠從頁籤添加。一個特殊的new識別符號,表示追蹤開始後啟動的所有程序或埠,可以分別使用按鈕新增 'new' 程序新增 'new' 埠來新增。

當新增程序或埠時,會顯示一個包含追蹤選項的視窗。所選的選項會設定給選取的程序/埠。要更改選項,請右鍵點擊程序或埠,然後選擇編輯程序選項。要從列表中移除程序或埠,請右鍵點擊並分別選擇移除程序移除埠

透過程序/埠識別符號新增的程序和埠會將這些程序/埠所在的節點添加到節點列表中。可以點擊按鈕新增節點,或在節點列表中右鍵點擊並選擇新增節點來新增更多節點。要移除節點,請選取它們,然後右鍵點擊並選擇移除節點

如果追蹤函式呼叫,則必須點擊按鈕新增追蹤模式來新增追蹤模式。選取模組、函式和比對規範。如果未選取任何函式,則會追蹤模組中的所有函式。

也可以為追蹤的訊息新增追蹤模式。點擊按鈕新增追蹤模式,然後選取已傳送訊息已接收訊息,以及一個比對規範。

工具中提供了一些基本比對規範,您也可以提供自己的比對規範。比對規範的語法在 ERTS 使用者指南 中描述。為了簡化比對規範的撰寫,它們也可以寫成 fun/1。詳細資訊請參閱應用程式 STDLIB 中的模組 ms_transform

點擊按鈕開始追蹤開始追蹤。預設情況下,追蹤輸出會寫入一個新視窗。當視窗關閉,或點擊按鈕停止追蹤時,追蹤會停止。可以使用選單選項 > 輸出變更追蹤輸出。追蹤設定,包括比對規範,可以儲存到檔案或從檔案載入。

有關追蹤的詳細資訊,請參閱應用程式 Runtime_Tools 中的模組 dbg,以及 ERTS 使用者指南 中「Erlang 中的比對規範」一節,以及應用程式 STDLIB 中的模組 ms_transform