100分!求服务器压力的解决方案 服务器测试socket 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 “队列”这个词儿听上去挺时髦,但是这往往就是你的瓶颈。你看许多学java的人抄袭的所谓“队列”的代码,只有两个处理线程,还美其名曰“队列多线程代码”。实际上你应该在一个有着4核或者8核的pc server可以用上几百个、甚至上千个线程来处理游戏消息,而不是只有两个线程。“队列”这个词儿,可能使得你只会两个线程。所以不要纠结在什么队列中。实际上.net的ThreadPool可以自动管理系统线程池,你的处理方法可以直接注册给系统线程池,根本用不着自己搞什么队列。 很早以前,我们的一个功能相当“轻”的交友方面的服务器系统,自己建了一个线程池,默认是最多300个线程。实际上当服务于两千万在线活跃用户时,大多数时间也只是并行有50个线程在执行事务。那是因为自己写上一百几十行代码来自己做个线程池,能够满足个人爱好,而并不是因为它一定就比.net framework中的更高级。什么时候会考虑队列?实际上当你天然地就是多线程编程时,此时反而是考虑特意要“阻塞”一些数据并行处理的时候,才想到要使用“队列”来吧原本并行的东西给顺序化了。把“队列”这个词用在多线程编程上,这就是似是而非的,容易产生误区。 首先检查程序算法,有没有低级的严重影响性能的BUG. (这是很常见的)比如说不正确的循环,正则等。然后在压力测试时,观察一下CPU的每个核是不是都爆满。如果是的话,那什么优化也别想了,加服务器吧。如果都不是,那可能就是LS几位所说的问题,系统架构问题。 还要充分利用服务器的内存,按理说,游戏服务器的关键数据都应该驻留内存。如果说你的CPU都满了,内存还空空荡荡,也说明资源没得到充分利用。 首先 最基本的 你也应该把你配置说出来阿比如8核16G 100MB速度 08R2X64的系统..目前支持了**人..并发多少人.顶峰多少人之后服务器扛不住了...这都是基本信息..如果你说上面的配置 抗住了100W长连接+10W并发..那还发个毛的帖子了 你回答了两条,这里一并作答。你分析的还是有点道理,我们之前也考虑到了,bug基本没有了,因为我们有日志记录。主要是系统结构问题,但现在说这个并不现实,改架构不做讨论氛围内。之前的用例测试,显示cpu和内存消耗并不大。你还有没有其他建议。 我把问题重新整理一下,如下:现象:玩家登录过多,如果同时在进行战斗,那么达到一定数量后,后面的玩家登录不上,登录上的玩家也收到了影响,游戏没有响应了。服务器配置:极好,可以排除服务器的问题。程序方面的:采用socket连接方式。玩家进行战斗,采用的是消息队列的方式,用线程池来处理请求。目前主要是压力过大,但不清楚是哪个模块出了问题。可能是消息推送过多?发生战斗时,每个玩家同时有几百条在进行推送,推送消息用到的是多线程。我们在测试的过程中发现,消息队列中的消息没有推送完,所以导致以上出现的种种问题。 页游的话不需要用socket连接呀socket的话是长连接用HTTP就行了操作一次请求一次~ 希望能给你到启发http://kb.cnblogs.com/page/207824/ 当然这是网站的~登录界面一个服务器~ 聊天一个服务器~其他的按地图分到不同的服务器~ 资料太少,不好做出具体的判断,大家都是狂猜,不过资料一多,估计也没人会看得下去。我怀疑是不是你的战斗计算过于复杂,导致线程池使用了太多的资源,形成队列拥堵,然后就越来越慢,最后暴了,当然,也不排除是有人找到复杂点的恶意攻击,但也应该是变卡,而不是直接无响应了。其实,像这种很容易解决,第一,自己模拟个500线程去战斗登陆或是其它什么,其二,你应该有特殊字符记录吧?比如ATT表示战斗什么的,login表示登陆,view_j表示查看交易所,你再把开始和结束时间一同记录,然后分析一下就很明了哪块。 内存,CPU,IO(硬盘/带宽)其中某一项瓶颈了?如果存在瓶颈,那就要该业务逻辑或者扩展机器了。如果都有空闲,那就要找到哪里阻塞了。不要简单的一句崩溃,崩溃了说明有BUG啊。什么叫同时?几百条/s?统计过每秒服务器处理消息数量吗? 将VB代码转换为C#代码 C# 调用非托管代码 接收数组的问题 [攒分贴]每日小知识 求助:把窗口中的图片全屏用什么方法???高手帮帮忙 小弟求vc#教程下载请大哥给个方便 关于在网页页面上取得硬件(cpu/硬盘)标识得问题 c#调用bat文件的问题 .net开发团队招收队员做项目. c#怎么调用自己用vb编写的dll组件 如何打开应用程序 ? c#怎么读取access数据库中指定字段的属性值 log4net 配置问题 请各位帮忙看看
然后在压力测试时,观察一下CPU的每个核是不是都爆满。如果是的话,那什么优化也别想了,加服务器吧。
如果都不是,那可能就是LS几位所说的问题,系统架构问题。
现象:玩家登录过多,如果同时在进行战斗,那么达到一定数量后,后面的玩家登录不上,登录上的玩家也收到了影响,游戏没有响应了。
服务器配置:极好,可以排除服务器的问题。
程序方面的:采用socket连接方式。玩家进行战斗,采用的是消息队列的方式,用线程池来处理请求。目前主要是压力过大,但不清楚是哪个模块出了问题。可能是消息推送过多?发生战斗时,每个玩家同时有几百条在进行推送,推送消息用到的是多线程。我们在测试的过程中发现,消息队列中的消息没有推送完,所以导致以上出现的种种问题。
socket的话是长连接
用HTTP就行了
操作一次请求一次~
http://kb.cnblogs.com/page/207824/ 当然这是网站的~登录界面一个服务器~ 聊天一个服务器~
其他的按地图分到不同的服务器~
如果存在瓶颈,那就要该业务逻辑或者扩展机器了。
如果都有空闲,那就要找到哪里阻塞了。
不要简单的一句崩溃,崩溃了说明有BUG啊。
什么叫同时?几百条/s?统计过每秒服务器处理消息数量吗?