- 百萬在線:大型游戲服務端開發
- 羅培羽
- 760字
- 2021-09-17 17:04:57
2.7 監控服務狀態
Skynet自帶了一個調試控制臺服務debug_console,啟動它之后,可以查看節點的內部狀態。
2.7.1 啟用調試控制臺
下面以代碼2-11所示的ping程序為例加以說明。
代碼2-11 examples/Pmain.lua
local skynet = require "skynet"
skynet.start(function()
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。
- Learning LibGDX Game Development(Second Edition)
- AngularJS Testing Cookbook
- Java系統分析與架構設計
- TensorFlow Lite移動端深度學習
- 精通搜索分析
- 從學徒到高手:汽車電路識圖、故障檢測與維修技能全圖解
- MATLAB定量決策五大類問題
- CKA/CKAD應試教程:從Docker到Kubernetes完全攻略
- Python貝葉斯分析(第2版)
- ANSYS Fluent 二次開發指南
- 劍指大數據:企業級數據倉庫項目實戰(在線教育版)
- Java網絡編程實戰
- HoloLens與混合現實開發
- Learning Jakarta Struts 1.2: a concise and practical tutorial
- Visual C++開發寶典