遊戲版本更新出錯排查python
最近有一次遊戲服務器更新了一個版本以後,不少玩家反映遊戲「很卡」,鏈接出現問題,遊戲更新出錯了。
做爲運維人員,獲得報告後,經過如下步驟處理問題:redis
1、先登陸游戲服務器,執行命令 ps -ef |grep ### 查看遊戲進程,還好,發現幾個遊戲進程都存在,netstat -tlnp 發現幾個遊戲端口都處於監聽的,說明更新後遊戲進程啓動正常。數據庫
2、查看進程的啓動時間 bash
ps -p PID -o lstart
發現進程的啓動時間正好是本次更新的時間,基本上能夠判斷遊戲更新沒有問題,由於都是腳本更新,之前沒有問題,此次應也不會有問題(僥倖心理不該有的)...
服務器
3、使用top命令查看機器性能,cpu平均負載,內存使用都不高,在top命令裏按1鍵,發現其中一個邏輯CPU的用戶空間的使用率常常會達到99%以上,在top命令的進程表中發現一個twisted進程CPU使用率常常會達到99,初步判斷緣由在這裏。這裏對twisted說明下:遊戲使用python開發的,網絡通訊使用的是twisted模塊,twisted使用事件通知機制模型,在一個進程中異步處理大量用戶的鏈接請求,特色是能夠處理大量I/O操做(若是使用同步模型就會在由於任務阻塞而浪費大量的時間),且任務之間相互獨立,即一個用戶請求出錯不會影響其餘用戶請求。
網絡
4、經過top命令獲得該twisted的進程號運維
5、跟蹤該進程,先介紹一個強大命令:strace異步
strace命令: strace - trace system calls and signals 追蹤系統調用和信號。可以偵聽和記錄進程的系統調用,和進程接收到的信號。當程序沒法啓動或運行變慢時可使用此命令跟蹤程序。 -o 返回值能夠經過這個參數重定向到一個文件中。 -p 參數指定pid開始跟蹤,跟蹤能夠經過鍵盤中斷信號Ctrl-C結束。strace命令能夠在進程運行的狀況下獲得相應信息
經過strace命令跟蹤twisted進程,並將結果重定向到文件中 ide
strace -p PID -o tra.txt #能夠運行幾十分鐘,以便獲得更加平均的數。PID是進程號,tra.txt是寫入文件。
6、處理tra.txt文件
查看tra.txt文件能夠發現存在大量字段「XXX」,分析後知道這個字段是從redis數據庫中取數據,經過不一樣的key獲得value,對此數據文件進行處 性能
more tra.txt | grep XXX | awk '{print $2}' | sort | uniq -c | sort -nr
獲得排行靠前的多個key,最大的都有幾十萬了,而後能夠將獲得的數據給開發,讓他們根據數據進行代碼排查。
7、因爲是代碼出錯,排查確定要大量時間,因此要進行回滾,數據、代碼回滾等等等。
最後仍是遊戲代碼中循環出錯,致使玩家進行某個操做時,要進行大量實時值獲取並進行循環計算。
總結下,上面的步驟都是總結的,中間確定也繞了一些路,但都是判斷錯誤的一些常見步驟,如查看網絡鏈接,查看磁盤使用狀況等等。總的來講,就是遇到問題,一步一步進行排查,從服務器到進程,而後取得可靠數據,一切用數聽說話。