服务器的性能监控

一:说明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

相关文章
相关标签/搜索