官术网_书友最值得收藏!

2.7 監控服務狀態

Skynet自帶了一個調試控制臺服務debug_console,啟動它之后,可以查看節點的內部狀態。

2.7.1 啟用調試控制臺

下面以代碼2-11所示的ping程序為例加以說明。

代碼2-11 examples/Pmain.lua


local skynet = require "skynet"

skynet.start(function()
    skynet.newservice("debug_console",8000)
        local ping1 = skynet.newservice("ping")
    local ping2 = skynet.newservice("ping")
    local ping3 = skynet.newservice("ping")

    skynet.send(ping1, "lua", "start", ping3)
    skynet.send(ping2, "lua", "start", ping3)
    skynet.exit()
end)

在圖2-25所示的節點結構中,代碼2-11先開啟debug_console服務,讓它監聽8000端口,然后開啟3個ping服務(見2.3節)。主服務會讓ping1和ping2向ping3發消息,ping3會給出回應。

圖2-25 代碼2-11的節點結構圖

下面我們會用telnet連接debug_console,再來一探究竟。

2.7.2 監控指令

用本地的telnet連接debug_console服務,可以看到“Welcome to skynet console”的字樣,如圖2-26所示。

圖2-26 用本地的telnet連接debug_console服務

1.list指令

list指令用于列出所有的服務,以及啟動服務的參數。在控制臺輸入“list”后,控制臺會顯示圖2-27所示的信息??梢姡擞芍鞣臻_啟的“debug_console”和3個“ping”服務以外,skynet還自動開啟了cmaster、cslave、datacenterd等服務用于提供引擎功能。在編寫程序的過程中,如果懷疑某些服務沒成功啟動,可用list命令檢查。

圖2-27 list指令

2.mem指令

mem指令用于顯示所有Lua服務占用的內存。執行結果如圖2-28所示,3個ping服務大致會占用60Kb的內存。如果某個服務占用的內存很高,可以做針對性優化。

圖2-28 mem指令

3.stat指令

stat指令用于列出所有Lua服務的CPU時間、處理的消息總數(message)、消息隊列長度(mqlen)、被掛起的請求數量(task)等。如圖2-29所示,每個服務都含有消息隊列,向服務發消息,就是將消息插入消息隊列的過程,如果某個服務處理消息的速度太慢,它的消息隊列就會很長。stat指令可以查看各個服務消息隊列的長度,得知哪些服務負載高。

圖2-29 ping1和ping2向ping3發送消息

圖2-30展示了stat指令的執行結果。其中ping3(0100000d)的message(處理的消息總數)是另外兩個ping服務(0100000b和0100000c)的兩倍,這與ping1和ping2共同針對ping3形成的負載相符。

圖2-30 stat指令

4.netstat指令

netstat指令用于列出網絡連接的概況。執行結果如圖2-31所示,其中0100000a代表debug_console服務(可由list命令得知),它監聽8000端口(第3行)。

圖2-31 netstat指令

更多控制臺功能見https://github.com/cloudwu/skynet/wiki/DebugConsole。

主站蜘蛛池模板: 上林县| 盐城市| 上林县| 固安县| 五大连池市| 新宾| 长春市| 密山市| 环江| 榆中县| 汽车| 临颍县| 常德市| 龙南县| 高青县| 七台河市| 东海县| 延川县| 东台市| 红原县| 乌兰浩特市| 陵水| 郸城县| 咸阳市| 蚌埠市| 日土县| 黑山县| 六安市| 临湘市| 彭阳县| 临清市| 石棉县| 宜兰县| 泰州市| 萍乡市| 洞口县| 哈巴河县| 宁国市| 汝州市| 大悟县| 荣昌县|