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

一次httpserver优化的经验和教训(silverlight游戏 - 金庸群侠传X0.5上线记)的更多相关文章

  1. 原创游戏,金庸群侠传X 0.5公布

    首先说一下背景,我个人从小特别爱玩游戏,对小时候一款游戏<金庸群侠传>DOS版更是情有独钟,自己工作以后,利用业余时间自己整了一个原创的改编版丢网上(找图片.音乐.写剧情更是虐心之极,耗时 ...

  2. 小游戏——金庸奇侠传(JAVA,对面向对象的进一步了解)

    金庸群侠传 游戏运行界面:   游戏实现源码: package game.logic; //人类 public class Person { public String name; //名字 Pers ...

  3. 我用shell写了个mud游戏:武林群侠传

    零.前言 学习shell的时候,无聊的我,写了个简单版的文字mud,暂且叫武林群侠传吧.可能90后都不知道文字mud是什么了--哈哈 壹.效果 先看下效果吧,GIF图如下 文字效果如下: [root@ ...

  4. silverlight游戏在坑内发展

    最初做<金X>使用silverlight它是由于右手锯的深蓝色silverlight游戏开发教程,在这里,好评,写得很好的教程!基于这样的思想游戏覆盖.你可以给游戏开发商新提供的非常多的思 ...

  5. Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得 --转

    Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得 通过前6节的Demo制作演示,大家应该已经相当熟悉这款Silverlight-2D游戏场景 ...

  6. MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载

    MUD江湖_MUD文字游戏_MUD五指_武林群侠_北侠_夺宝江湖_书剑_文字江湖游戏_MUD游戏下载  武侠类手机文字游戏,经典再现高度自由玩法宠物 自制装备 师徒自立门派 自造武功欢迎来玩 Q群 1 ...

  7. GCC编译优化指南【作者:金步国】

    GCC编译优化指南[作者:金步国] GCC编译优化指南 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分 ...

  8. Silverlight 2中实现文件上传和电子邮件发送

    Silverlight 2中实现文件上传和电子邮件发送 [收藏此页] [打印]   作者:IT168 TerryLee  2008-05-30 内容导航: 使用Web Service上传文件   [I ...

  9. JAVA优化技巧分享 让游戏更加的流畅

    我的世界怎么样可以玩的更加流畅呢?怎么对游戏进行优化呢?相信很多小伙伴都很想知道吧,今天小编为大家带来的是我的世界游戏优化技巧,喜欢的小伙伴不要错 ... 在很多时候如果电脑配置过低的话,玩游戏并不流 ...

随机推荐

  1. 【哈希表】CODEVS1230 元素查找

    #include<cstdio> #include<vector> using namespace std; typedef vector<int>::iterat ...

  2. python 文件操作与集合

    对文件的操作 1.打开文件,获取句柄 2.根据句柄操作文件 3.关闭文件 现有文档 poem.txt 一天很短, 短得来不及拥抱清晨, 就已经手握黄昏. 一年很短, 短得来不及细品初春殷红窦绿, 就要 ...

  3. Ubuntu 16.04通过源码安装QUEM虚拟机

    下载编译安装: wget http://download.qemu-project.org/qemu-2.9.0.tar.xz tar xvJf qemu-2.9.0.tar.xz cd qemu-2 ...

  4. 在WPF 4.5中跨线程更新集合

    WPF中一个非常强大的功能是数据绑定,我们可以把一个集合绑定到ListBox中,当集合的数据发生变更时,ListBox界面也会同步变更.本身这是一个非常美好的事情,但是美中不足的是:当把集合绑定到Li ...

  5. 【spring】spring boot中使用@EnableTransactionManagement 以后,spring mvc接收前台ajax的post方法传过来的参数,使用@RequestBody接收不到参数

    在启动类上添加了注解: @EnableTransactionManagement, postMan测试接口,以这种方式传递参数: 测试结果: 接收不到参数 问题解决: 原因:是因为 这个项目中的Con ...

  6. 【jQuery】jquery中 使用$('#parentUid').attr(parentUid);报错jquery-1.11.3.min.js:5 Uncaught TypeError: Cannot read property 'nodeType' of undefined

    jquery中 使用$('#parentUid').attr(parentUid);报错jquery-1.11.3.min.js:5 Uncaught TypeError: Cannot read p ...

  7. 64位的centos6.9的vnc-sever的安装及桌面环境安装

    1.VNC (Virtual Network Computer)是虚拟网络计算机的缩写.VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 ...

  8. Linux下获取本机IP地址的代码

    Linux下获取本机IP地址的代码,返回值即为互联网标准点分格式的字符串. #define ETH_NAME "eth0" //获得本机IP地址 char* GetLocalAdd ...

  9. ylbtech-LanguageSamples-Attibutes(特性)

    ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Attibutes(特性) 1.A,示例(Sample) 返回顶部 “特性”示例 本示例 ...

  10. 理解JS里的偏函数与柯里化

    联系到上篇博客讲的bind完整的语法为: let bound = func.bind(context, arg1, arg2, ...); 可以绑定上下文this和函数的初始参数.举例,我们有个乘法函 ...