日新進用戶200W+,解密《龍之谷》手遊背後的壓測故事

2017年3月,騰訊正式於全平臺上線了《龍之谷》手遊,次日衝到了App Store暢銷排行第二的位置,並維持到了現在。上線當日百度指數超過40萬,微信遊戲平臺數據顯示預約數780多萬,而據內部人員透露當日新進用戶200W+,這就是《龍之谷》手遊在安卓平臺上所取得的成績。

較高的市場期待讓騰訊測試團隊對《龍之谷》手遊的測試傾盡全力,面對“經典IP”和盛大遊戲一貫口碑,騰訊測試團隊對遊戲服務器進行了嚴格的壓力測試,上線後服務器穩定的表現也證明了測試團隊的用心沒有白費。

本文記錄了《龍之谷》手遊壓測過程中的點點滴滴,希望給其他手遊的壓測提供思路、方法和工具的借鑑。

一、項目背景

測試需求產生

《龍之谷》手遊初期性能並不好,無法同時支持大量玩家同時進行遊戲,存在卡頓、無法登錄、掉線等一系列性能問題。無論從玩家流失率的降低,還是遊戲體驗的提升,針對該遊戲的性能測試迫在眉睫。

技術難點

爲了產生足夠的服務器壓力,《龍之谷》手遊測試團隊選擇與 騰訊WeTest合作,使用了其服務器性能測試專家模式的代碼開發,產生與客戶端行爲相似的機器人對遊戲服務器產生壓力,並且有針對性的配置機器人的行爲用於測試容易產生問題的場景,可視化的獲取性能數據後進行分析。

由於機器人側需要模擬客戶端的邏輯向服務器進行發包,所以必須理解其遊戲協議並融入騰訊WeTest測試框架中,在騰訊WeTest專家的幫助下,使用針對google protobuf協議的代碼模板自動化生成工具,成功實現模擬客戶端的機器人開發,併產生最高每秒併發上萬的壓力。

另一方面,由於遊戲比較重度,壓測的場景選擇與用戶的行爲分析也成爲難題。在專家的建議下,通過分析刪檔測試時服務器各協議頻率數據,分別按協議比率的多少、處理時間長短、篩選出待測的場景與重點協議。主要針對登錄、好友、交易所、主城、語音、單人pk、英雄戰場、賽馬、世界boss、在線副本以及數據庫等進行了重點調試及壓力測試。

二、實現方案

測試的目標

容量測試:

√ 單服併發用戶數:XXX人

√ 各協議響應時間:<1秒

√ 事務成功率:>99.9%

穩定性測試:

綜合場景壓測48小時無問題,關注各系統資源穩定性

關鍵場景壓力測試:

√ 登錄、主城、世界boss等

√ 各協議響應時間:<1秒

√ 事務成功率:>99.9%

測試前的分析

一般壓測模型由三部分組成,機器人、服務器和數據庫,遊戲服務器主要是優化熱點遊戲邏輯、協議棧參數、系統網絡參數、同步機制等。數據庫是優化sql語句,優化索引,優化數據存儲等。機器人部分由平臺自動分配壓力機,如未產生明顯bug,無需進行調優。

在架構分析之後,需要構建機器人模型,模型構建方法一般是根據研發打點數據,統計在一段時間內,刪檔服各單個協議總數與耗時並計算壓力值與百分比:

示例數據如下:

刪檔服不同時間點各單個協議總數與耗時並計算壓力值與百分比示例

需要注意的是,除了關注佔比靠前的協議進行調試,另外需關注平均耗時較長的協議中邏輯是否存在優化空間,因此該類耗時較長的協議也在測試範圍之內。

在獲取模型並開發完機器人之後,可以通過騰訊WeTest服務器性能測試產生壓力,通過其提供的網卡性能圖中包量和流量的分析來判斷壓力機器人模型是否有效反應了真實玩家的行爲。

主要的測試功能

● 登錄、創建角色、進主城、新手引導壓測

● 主城移動、聊天、做任務、裝備升級壓測

● 好友操作、技能升級、副本戰鬥、世界boss壓測

● PVP、PVE、天空競技場、活動壓測

● 組隊、購買物品、抽寵物、交易所、公會壓測

● 針對以上場景的綜合壓測

測試中遇到的問題

類型一:單協議場景支持併發過低,該類場景集中觸發時,會發生同服玩家卡頓、無法登錄遊戲、掉線等問題。如登錄、技能升級、裝備強化等。

類型二:部分熱點場景如主城、世界boss支持人數不足,易發生玩家集體卡頓、掉線等問題。

類型三:其他在高併發長時間運行下容易出現的問題:緩衝區不足、進程崩潰、內存泄露等。

優化的方法

類型一:單場景問題排查

在機器人開發完畢後,可以通過騰訊WeTest服務器性能測試專家模式中的單場景測試,逐步增加場景壓力,若發生:服務器進程cpu資源耗盡、回覆消息過慢、回覆消息失敗,則表示服務器到達瓶頸,此時一般可通過系統工具(top、perf、iostat、vmstat等)排查熱點邏輯,查看是否存在優化空間,或從邏輯機制上解決。

熱點邏輯排查(業務名已隱去)

圖中展示了簡單場景中,QueryGate請求無法滿足併發量100的要求,遇到這種情況,一般可以使用perf排查服務器熱點邏輯進行優化。

類型二:容量測試問題排查

綜合場景一般包括之前篩選出的所有場景,將所有玩家按照一定比例(比如60%在主城,40%在副本戰鬥),該比例一般可以通過不同場景下的心跳包頻率比例看出。

主要會遇到的問題爲:遊戲卡頓、玩家掉線等,該類問題一般爲客戶端或服務器各進程資源遇到瓶頸所致。排查方法與單場景類似,不再過多描述。

(//blog-10039692.file.myqcloud.com/1490673569949_6733_1490673570238.png)

各場景的數據表現(事務名已隱去)

類型三:穩定性測試問題排查

穩定性測試中易出現服務器宕機、內存泄露等情況,針對服務器宕機,一般通過gdb分析core文件,並結合所測場景的機器人行爲進行分析宕機原因。

通過查看穩定性測試中的內存變化曲線,可以判斷服務器內存是否穩定或泄露,若發生泄露,一般可通過內存檢測工具,如valgrind等對服務器進程進行排查。

三、最終效果

測試效果

解決各種宕機、卡頓、掉線問題:

測試期間共發現並修復各類卡頓、宕機、掉線、無法進行遊戲等問題20餘個,同時準確估算了線上玩家所產生的壓力,爲最終服務器的部署及穩定運行提供了性能保障與數據支撐。

解決需要多人蔘與、團戰等場景的測試問題:

機器人程序可以用於需要大量用戶參與的測試場景,進行自動化測試及驗證該類場景是否可以在一定壓力下穩定運行:如世界boss戰,公會戰、跨服擂臺賽等。

錄像效果

主城移動測試:https://v.qq.com/x/page/l03860ij85k.html

世界boss測試:https://v.qq.com/x/page/l0386whm8qt.html

英雄戰場多人對戰測試:https://v.qq.com/x/page/t0386qjnmtj.html

“外網問題無小事”,所幸這次《龍之谷》手游上線過程中沒有出現常見的面對開服壓力而服務器崩潰的事件,在這次的手遊測試過程中也可以感受到遊戲發行、渠道和CP對服務器承壓情況越來越重視。

然而目前市場上還沒有針對遊戲的服務器性能檢測工具,無論是開源還是商業軟件都不能很好的滿足遊戲的專項測試需求,與此同時受限於開發週期短以及人力的問題,中小型CP往往採取編寫模擬機器人進行簡單的壓測,測試的覆蓋面窄,無法保證併發請求,造成潛伏的問題遺漏到線上。

此次騰訊測試團隊正是利用騰訊WeTest的服務器性能測試功能實現模擬機器人的協議配置,最終實現了《龍之谷》手遊的平穩上線。

目前騰訊WeTest的服務器性能測試功能已經開放對外,通過基於真實業務場景和用戶行爲進行壓力測試,幫助遊戲開發者發現服務器端的性能瓶頸,進行針對性的性能調優,降低服務器採購和維護成本,提高用戶留存和轉化率。

體驗地址:http://wetest.qq.com/gaps/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章