======服务器性能优化====== =====1概述===== |在线人数和活跃人数预估| 1:5 ~ 1:10| |平均每人每秒发包 | 0.1~0.2 | |平均每人发包间隔 | 5-10 | |每秒100个发包折合 | 500-1000人同时在线 | =====2目标===== 平均压力:一组服务器每秒200次战斗处理,折合1200~1500同时在线 瞬间压力:同一个数据库一秒5个注册登陆,也就是每分钟300个注册登陆 SSS档:一台All In One 服务器支持 3000+人同时在线,约合15000+活跃用户 \\ SS档:一组1+1服务器支持 3000+同时在线 \\ S档:一组1+N服务器 支持 3000+同时在线 \\ A档:一台All In One 服务器支持1000+同时在线 \\ B档:一组1+1 服务器支持1000+同时在线 \\ C档:一台All In One服务器支持500人同时在线 \\ =====3优化推进时间表===== 12月中旬测试, 同时在线300-500人,出现连接数问题和解压缩问题 12月底机器人测试,模拟战斗发包。2台入口服务器,用三台redis分摊连接,一个数据库,折合同时1000人在线 1月上旬客户端优化,减少发包请求,2+1部署,支持到1200~1500人同时在线 1月中旬分服动态扩容。分3个游戏数据库,实现动态新服扩容。 1月下旬数据库写入优化,合并数据库写入,部分数据缓存, 支持到1500~2000同时在线 1月下旬,合服自动化工具 2月底 数据库大量缓存,支持2000+同时在线。 =====4优化方向===== ====4.1 架构==== 按照优先级依次是 mod_php + Apache + Windows redis短链接有问题 FastCGI + Apache + Windows 目前优先选择 +op_cache FastCGI + IIS + Windows CPU可能有问题 FastCGI + Apache + Linux fpm + Ngix + Linux ====4.2 基础==== 1/ Apache连接数 2/ TIME_WAIT连接数 http://blog.csdn.net/u013474436/article/details/53117463 修改周期和端口池 https://help.aliyun.com/knowledge_detail/40701.html 3/ 减小每秒发包数量,合并临近的StartBattle和EndBattle 4/ Opcache 优化每次包含的代码编译 ====4.3 Redis==== 1/ Redis pconnect php_redis下载:http://pecl.php.net/package/redis 需要注意NTS和TS的区分,只有NTS才有pconnect Github 说明 https://github.com/phpredis/phpredis#pconnect-popen 注意里面提到This feature is not available in threaded versions. pconnect and popen then working like their non persistent equivalents. 所以不能在apache 的 mod_php 模式下运行 所以必须用cgi之类的模式运行 2/ 用户token可以使用redis而不是mysql,降低了mysql访问频率 ====4.4 压缩==== 替换bz为lz压缩,提高计算效率 ====4.5 mysql==== 1/ pconnect 瓶颈出现在连接数的时候考虑 2/ 合并sql 瓶颈出现在sql调用频繁的时候考虑 3/ 批量入库 对于 temp bag这样的表,考虑用redis缓存,然后批量入库 ====4.6 负载均衡==== 1/客户端根据下方的ip地址进行自动均衡,可以采用随机或者奇偶 2/基于服务器分组的自动均衡 3/阿里云负载均衡 https://help.aliyun.com/knowledge_detail/55193.html?spm=5176.11065259.1996646101.searchclickresult.126a191cOS379J ====4.7 动态扩容==== 服务器启动时准备好预案 如果一台服务器迅速进入爆满状态。服务器状态表可以[[generated:server_stat_info]]控制进入的服务器 配置第二组服务器(主要是数据库分开)后续玩家进入第二组而不是在第一组进行拥挤。 ‘ TSung 测试