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

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

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

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

1、項目背景

測試需求產生

《龍之谷》手遊初期性能並很差,沒法同時支持大量玩家同時進行遊戲,存在卡頓、沒法登陸、掉線等一系列性能問題。不管從玩家流失率的下降,仍是遊戲體驗的提高,針對該遊戲的性能測試迫在眉睫。數據庫

技術難點

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

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

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

2、實現方案

測試的目標

容量測試:架構

√ 單服併發用戶數: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等對服務器進程進行排查。

3、最終效果

測試效果

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

測試期間共發現並修復各種卡頓、宕機、掉線、沒法進行遊戲等問題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/

相關文章
相關標籤/搜索