zoukankan      html  css  js  c++  java
  • 一次httpserver优化的经验和教训(silverlight游戏

    金X因为被推荐到ACFUN游戏排行第一名。并同一时候在17YY、7K7K、U77、17173等各大小游戏站点上线。迎来了在线用户数量的爆炸式增长。眼下各大站点使用外链方式。也就是实际链接到金X官网的server。

    金X 0.5 刚上线。UV从3000+增长到2万+。PV从400万增长到1000万+


    这里说一下金X的服务端架构,由于是一直凑合的一个环境,眼下很老土:

    使用的一台非常老的DELL 2950server(8线程CPU,2G内存),100MB独享联通/电信双线带宽。server操作系统 CentOS6.3。WEBserver为apache,部署的服务包含:


    1、apache文件服务(silverlight主体xap包 + 图片、音乐【均动态载入】)

    2、游戏联机PK server。侦听两个tcpport

    3、数据库mysql

    4、官网wordpress(php)

    5、日志分析服务awstats(crontab启动)

    6、防火墙等等

    7、代码svnserver


    一台如此破旧的server。部署了这么多功能。还是单点。可想有多么的脆弱。

    上线后,玩家普遍反映载入非常缓慢。玩家体验非常不好。

    对于长期来说。肯定须要换server以及整个应用的部署结构,当然这些须要时间和资源。我们先在当前已有的资源下进行优化。

    因为apache參数是系统安装时默认的,于是首先想到的优化apache的參数。我的想法也非常easy:

    1、因为游戏资源是动态载入的,于是我把KeepAlive打开,添加KeepAliveClients的连接数;

    2、因为玩家众多,将默认的MaxClients从250增大(同一时候增大StartServer、Spare等參数),以提高并发服务能力;


    改动后,自己试了试,感觉效果还算比較明显。于是就让整个应用跑了起来。结果……

    一小时后。玩家反馈游戏加载不了了,赶紧pingserver,ping不通……连接不上了。木有办法。打电话给IDC机房让硬重新启动。


    重新启动后把各个服务起起来。思考可能导致的问题,怀疑有可能导致死机的:

    1、awstats分析日志的服务启动太频繁(1分钟一次)

    2、apache内存吃爆了


    于是開始行动。

    1、关闭crontab

    2、将apache的若干參数调小(MaxClients、StartServer等)

    改动后,感觉server性能明显下降了,訪问网页、图片等明显变慢。只是想着先应付着至少不死机,回家!

    结果……


    出租车还在路上。手机收到玩家反馈,游戏加载不了了——server又崩了。

    木有办法,继续打电话给IDC机房,硬重新启动。

    下车飞奔到家,打开电脑。又一次開始配置server,思考可能导致的问题:

    1、还是仅仅可能是apache内存撑爆

    继续改小各个针对并发的分配数,缩小KeepAlive的超时时间!

    试执行!——半个小时候继续崩溃。


    没辙,開始一行一行看apache的配置文件,最后发现两个问题:

    1、KeepAlive 真的须要开么?——尽管金X有大量的图片和音乐须要动态载入。理论上KeepAlive打开的话对于单个玩家的载入速度有优点。但这样对于总体的大规模玩家数量的訪问,无法有效的回收和利用server资源,而且会导致玩家请求大规模排队的情况,表现就是 一些用户认为“非常流畅”。还有一些用户认为“非常卡”

    2、work.c的MaxRequestPerChild默认设置成0了——在大量client请求的情况下,(由于我client使用的线程池没有指定池的maxsize。所以会疯狂的请求服务端。造成每一个client可能有一大堆的request。这个地方可能会导致内存爆掉)


    果断改动两处。然后尝试着再将MaxClients数量调大一些,公布!

    —— 加载速度大为提升。

    —— 稳定执行,至今没死机了!


    经验教训:

    1、优化參数须要结合server性能;

    2、大规模用户并发訪问时,慎用KeepAlive



    附apache当前活跃clients监控命令: 

    watch -n 1 -d "pgrep httpd|wc -l"



  • 相关阅读:
    上传图片,正在加载,loading
    bootstrap-table(2)问题集
    Bootstarp-table入门(1)
    bootstrap-table给每一行数据添加按钮,并绑定事件
    获得 bootstrapTable行号index
    Http请求中Content-Type讲解以及在Spring MVC注解中produce和consumes配置详解
    enums应用详解
    bootstrap-table.min.js不同版本返回分页参数不同的问题
    Linux学习笔记之Linux目录结构、磁盘命名、启动过程
    Linux学习笔记之Linux相关知识
  • 原文地址:https://www.cnblogs.com/llguanli/p/6795731.html
Copyright © 2011-2022 走看看