zoukankan      html  css  js  c++  java
  • 服务器的性能监控

    一:说明

    模拟客户端发包,压测服务器性能

    服务器:8核  +  4g

    二:压测过程

    1.玩家登陆、创建

    2.玩家瞬时登陆上限(主要使用j.u.c信号量CountDownLatch)

    3.战斗

    4.移动

    5.自动任务

    6.场景无缝切换(暂未做验证)

    三:技术过程

    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 " 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

  • 相关阅读:
    顺序栈的实现
    创建HttpRequest传输数据
    .net Json对象序列化和反序列化
    SqlBulkCopy类数据导入
    两表更新:根据条件从一个表里面查询出符合条件的结果更新另一个表
    javascript实现绚丽效果
    SQL SERVER 表结构修改
    SqlCacheDependency Application
    运用泛型实现增删改
    实现数组的全排列(百度笔试题)
  • 原文地址:https://www.cnblogs.com/cr1719/p/6908534.html
Copyright © 2011-2022 走看看