游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6049|回复: 10

网络游戏服务器优化方法

[复制链接]

6

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2005-1-26 14:05:00 | 显示全部楼层 |阅读模式
做了一些时间的优化工作,这里总结一下,给大家做个参考,希望对大家都有用,也希望抛砖引玉。
其实游戏优化的应该是速度,当然,游戏服务器优化还要再加上一个内存和带宽。
速度方面其实也就那几个:
1 避免函数参数过多。因为参数是堆栈存取的,堆栈的速度很慢;
2 避免函数太长。究竟能够多长,个人感觉在40~50行以内比较好;
3 函数嵌套少。不要一个函数体内调用了另一个,另一个再调用另另一个,另另一个再调用另另另一个……
-_-:
4 嵌套循环少。
for(i=0;i<count;i++)
for(j=0;j<loop;j++)
这种循环最好没有……
5 不要有堆栈和嵌套,强调一下。
6 列表用std::list,尽量不要用Vector,数量多了就知道std::list占用CPU资源要少的道理了。
7 不要做多余的动作,比如服务器端一直在渲染,画蛇添足。


内存方面
这里我只有一个想法,不要load的东西就不要载入内存,比如图片什么的。

带宽方面
1 网络上传什么最好清楚,不要动不动就是int类型,如果小于256就可以表达的,unsigned char就行了。
2 用hashTable来解决问题,两边进行压缩和解压缩

最后再加一点。因为服务器运行的应该是一个后台程序,所以游戏服务器最好编译成为控制台程序,这样服务器可以针对这样的程序进行优化,效果还是很显著的哦。

LINUX上的优化方法也有一些,只是没有整理过思路,所以下次再贴啦。
  


59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-1-26 14:28:00 | 显示全部楼层

Re:网络游戏服务器优化方法

服务器的优化最主要的是IO方面。
其他的消耗几乎可以忽略不计,目前服务器性能方面讨论最广的也是如何实现高效率的IO。

要优化,首先要知道瓶颈出现在什么地方,建议楼主在Linux下用strace看看哪个系统调用调得最频繁,你也就知道什么地方该做优化了。

6

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
 楼主| 发表于 2005-1-26 16:18:00 | 显示全部楼层

Re:网络游戏服务器优化方法

Windows下我用的是Intel的vTune查效率的,效果还可以。

29

主题

421

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2005-1-26 16:45:00 | 显示全部楼层

Re: 网络游戏服务器优化方法

不错。
我觉得服务器尽量可能用空间换时间。内存便宜,而new和delete太贵。

std::list 比 std:vector要快吗?我一直以为std:vector快呢。晕倒。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-1-26 16:47:00 | 显示全部楼层

Re:网络游戏服务器优化方法

:) 首先是IO模型的优化吧,WIN下完成端口,LINUX下用epoll
之后是频繁调用代码的优化,比如总结出服务器哪些操作是比较频繁的,尽量在频繁调用的代码上尽量的优化,最后才是一些普通的代码的优化,或者说这一步根本不用优化,因为优化带来性能上的提高以及优化时耗的比例太小,划不来。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2005-1-26 17:28:00 | 显示全部楼层

Re:网络游戏服务器优化方法

我感觉楼主好像没学过什么程序优化的办法

7

主题

203

帖子

203

积分

中级会员

Rank: 3Rank: 3

积分
203
QQ
发表于 2005-1-26 20:02:00 | 显示全部楼层

Re:网络游戏服务器优化方法

1 网络上传什么最好清楚,不要动不动就是int类型,如果小于256就可以表达的,unsigned char就行了。

省掉3个字节?有必要?而且应该有些副作用吧……%

6

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
 楼主| 发表于 2005-1-27 10:00:00 | 显示全部楼层

Re:网络游戏服务器优化方法

启动一个程序的时候,什么问题都没有,即便是4千5千个人都能带的,但是这个程序在服务器上启动了上百个以后,大家可以试试问题会如何。
首先,程序启动了10个以上,CPU占用率会一下子暴增,从10%以下提高到50%,这个问题的存在是因为有了多重循环。
然后是不必要的操作的去除又可以减少许多CPU占用率,接下来的就是std::list和Vector,Vector速度是很快,而且比std::list好用,但是当你拥有了多个Vector,每个Vector都有许多元素的时候,就会有CPU占用率一下子高许多的问题存在。

这里不知道会不会有人提进程和线程的问题,也想请教请教。

int和unsigned char的传输问题是不得以的,因为在计算带宽的时候,每百兆独享带宽每个月就要给IDC许多钱,所以能够节省就要尽量节省。

我的项目里面IO操作似乎没有,休闲游戏呀!

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-1-27 12:02:00 | 显示全部楼层

Re:网络游戏服务器优化方法

首先,程序启动了10个以上,CPU占用率会一下子暴增,从10%以下提高到50%,这个问题的存在是因为有了多重循环。

导致这个的主要原因应该是IO,我这里说的IO不仅仅只是文件操作,包括网络等各种设备的访问,都属于IO,比如网络,数据库,进程间通讯时用的SOCKET之类的。

如果你是用的select模型来处理IO,那么当你的应用程序启动10个的时候,CPU占用率的增长则是很正常的,因为select在高负载情况下对系统资源消耗得非常的多。

所以说,一定要对症下药。

6

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
 楼主| 发表于 2005-1-27 13:08:00 | 显示全部楼层

Re:网络游戏服务器优化方法

有道理,我去试试。

不过我在做优化的时候的确是一项一项进行优化的,都有记录,比如去掉多重循环以后CPU占用率下降多少等。我是按照vTune效率查看软件一项一项进行优化的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 05:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表