遊戲版本更新出錯排查

遊戲版本更新出錯排查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、因爲是代碼出錯,排查確定要大量時間,因此要進行回滾,數據、代碼回滾等等等。

  

    最後仍是遊戲代碼中循環出錯,致使玩家進行某個操做時,要進行大量實時值獲取並進行循環計算。
    

    總結下,上面的步驟都是總結的,中間確定也繞了一些路,但都是判斷錯誤的一些常見步驟,如查看網絡鏈接,查看磁盤使用狀況等等。總的來講,就是遇到問題,一步一步進行排查,從服務器到進程,而後取得可靠數據,一切用數聽說話。

相關文章
相關標籤/搜索