服務器的性能監控

一:說明java

模擬客戶端發包,壓測服務器性能服務器

服務器:8核  +  4geclipse

二:壓測過程jvm

1.玩家登錄、建立工具

2.玩家瞬時登錄上限(主要使用j.u.c信號量CountDownLatch)性能

3.戰鬥優化

4.移動線程

5.自動任務netty

6.場景無縫切換(暫未作驗證)orm

 

三:技術過程

1.設置program argumetns,好比3000人戰鬥,參數:1,3000

2.加載配置文件,包括客戶端須要的配置文件,主要目的是尋路、任務、採集、副本等

3.機器人的線程模型:

  機器人客戶端只須要設置io worker線程數量,通常是:cpu*2

  netty inbound事件中接受服務器的返回消息,若是是機器人感興趣的事件,拋到業務線程中處理,處理的業務線程數量:cpu

  移動任務、攻擊任務等在機器人客戶端都是統一的task,增長任務執行的schedule線程,線程數量:cpu

  機器人客戶端模擬機器人的移動,相似定時移動任務幀,線程數量:1

  若是機器人有移動的隊列信息,在上一步會輪訓到,取出隊列頭信息,更改客戶端機器人的位置

  全部機器人的狀態變動,都是在業務線程中處理。

 

四:遇到的坑點

  消息的解碼,因爲是頁遊,以前用到了policy文件,定長爲:162.具體的解碼過程,後面文章中會詳細說到。如今走843,已不用。

  消息的回調,新增了MessageCallBack,具體使用j.u.c的lock和condition

  機器人客戶端的位置與服務器位置不統一,修正機器人的位置,並移動發送到服務器位置。

  讀寫操做致使機器人掉線,單獨一個線程,每30S發送一次心跳包。

  服務器初始化腳本,致使somaxconn變大,臨時更改:echo 32768 > /proc/sys/net/core/somaxconn

 

五:如何分析問題?

  使用Java命令:

    jps -l:查看Java的pid

    jstat -gc pid 1000:每1s查看一次垃圾回收狀況

    jmap -dump:format=b,file=a.bin pid:dump出bin文件,能夠結合MemoryAnalyzer.exe一塊兒使用

    jmap -histo:live pid(根據狀況看live是否使用),查看當前jvm佔用的大對象

    cpu太高:

      top -Hp pid:查看當前佔用最高的tid,線程ID

      printf "%x\n" tid:16進制轉換

      jstack pid|grep tid -A 30:查看線程棧信息

  遠程監控工具的使用:

    JAVA_OPTS="-Dcom.sun.management.jmxremote.port=9998 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=xxx"

    JMC="-XX:+UnlockcommercialFeatures -XX:+FlightRecorder"

  可視化工具的額使用:

    jconsole

    jvvm

    jmc飛行記錄儀

    eclipse memory analyzer 分析bin文件

 

六:程序中集成SocketMBean接口,監控stat信息

 

程序的優化:

writeAndFlush仍是write,單獨線程flush?

是使用buffer仍是directBuffer?

堆外內存大小的設置? -XX:MaxDirectMemorySize=256m

相關文章
相關標籤/搜索