1、如何提高服务器并发数
消除瓶颈是提高服务器性能和并发能力的唯一途径。
如果你能够消除所有的瓶颈,你就能够最大的发挥硬件性能,让系统的性能和并发数到达最佳。
采用多线程多核编程,使用事件驱动或异步消息机制,尽量减少阻塞和等待操作(如I/O阻塞、同步等待或计时/超时等)。
原理:
1、多线程多核编程,消除cpu瓶颈。
2、采用IOCP或epoll,利用状态监测和通知方式,消除网络I/O阻塞瓶颈。
3、采用事件驱动或异步消息机制,可以消除不必要的等待操作。
4、如果是Linux,可以采用AIO来消除磁盘I/O阻塞瓶颈。
5、在事件驱动框架或异步消息中统一处理timer事件,变同步为异步,而且可以在一个线程处理无数timer事件。
6、深入分析外部的阻塞来源,消除它。
比如数据库查询较慢,导致服务器处理较慢,并发数上不去,这时就要优化数据库性能。
7、如果与某个其他server通信量很大,导致性能下降较多。
可以考虑把这两个server放在一个主机上,采用共享内存的方式来做IPC通信,可以大大提高性能。
2、1000个用户并发的网站服务器大概需要什么样的配置?
并发数
不能作为配置参考
关键是你网站
和数据的性质啊
说个例子你就明白了
如果是视频站
并发1000
那可实实在在同时的高流量并发
必须高带宽
高配置应对
可如果是文字小说站呢
那就算并发也没那么大影响
你也知道你普通的并发
和那8000的区别了
所以关键不是数字
而是性质
决定配置
3、如何测试服务器支持的最大并发连接数
更改服务端的I/O模型吧,这明显是服务端设计的问题。
你这样设计上线使用的话,服务器开销太大了(主要是线程切换的开销)。
//--------------------
Listen(socket,5),跟这个有一定关系。
int listen(int sockfd, int backlog); 第二个参数是你监听客户端的最大个数,如连接到主机上的客户端超过其数listen则会返回一个错误代号。
backlog你可以设置大一点,如100之类的。
建议使用I/O模型吧,不要使用建立新线程来处理。
(你使用建立新线程的话,会发现每个进程所建立的最大线程数量是有一个限制的)
4、如何测试网站最大并发数
不同的服务器有默认的最大并发数,当然默认是默认,实际承不承受得住就需要通过测试来试了,
测试网站压力有很多软件,,,
JMeter,比较好用,教程网上可以找到,,有中文版。。。
5、什么是服务器并发量?并发量如何计算
并发的意思是指网站在同一时间访问的人数,人数越大,瞬间带宽要求更高。服务器并发量分为:1.业务并发用户数;2.最大并发访问数;3.系统用户数;4.同时在线用户数;
说明服务器实际压力,能承受的最大并发访问数,既取决于业务并发用户数,还取决于用户的业务场景,这些可以通过对服务器日志的分析得到。
一般只需要分析出典型业务(用户常用,最关注的业务操作)
给出一个估算业务并发用户数的公式(测试人员一般只关心业务并发用户数)
C=nL/T
C^=C+3×(C的平方根)
C是平均的业务并发用户数、n是login session的数量、L是login session的平均长度、T是指考察的时间段长度、C^是指业务并发用户数的峰值。
假设OA系统有1000用户,每天400个用户发访问,每个登录到退出平均时间2小时,在1天时间内用户只在8小时内使用该系统。
C=400×2/8=100
C^=100+3×(100的平方根)=100+3×10=130
另外,如果知道平均每个用户发出的请求数u,则系统吞吐量可以估算为u×C
精确估算,还要考虑用户业务操作存在一定的时间集中性(比如上班后1小时内是OA系统高峰期),采用公式计算仍然会存在偏差。
285-104-1346
6、多线程处理时,并发量过大时该如何避免服务器崩溃
尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。
1、用jprofiler等工具找出性能瓶颈,减少额外的开销。优化数据库查询语句,减少直接使用hibernate等工具的直接生成语句(仅耗时较长的查询做优化)。优化数据库结构,多做索引,提高查询效率。
2、统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。
3、能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态html来显示)。
4、解决以上问题后,使用服务器集群来解决单台的瓶颈问题。基本上以上述问题解决后,达到系统最优。
7、游戏服务端大访问量大并发的优化解决方案?
所有的对象都放在内存,20万用户以下无压力。
如果游戏的用户很多,例如超过50万,内存就会不够,可使用LRU算法来淘汰一些数据。
流程:收到用户请求 - 在内存查找用户对象 - 如果不存在就从数据库中加载- 放入内存cache-如果cache中的用户超过20万 - 用LRU算法淘汰最古老的用户数据。
避免同步的IO操作,所有会发生写数据库的操作:例如角色获得了经验,要更新数据库;这类和游戏逻辑相关、安全性要求不高的保存操作,一律用异步操作,由后台的数据库保存线程定期保存。
流程:如果要保存到数据库 - 检查该对象是否已有标志为在保存队列中 - 如果为假 - 将对象放入保存队列。 后台保存线程的流程:从队列中获取要保存的对象 - 保存 - 置保存标志位为假。
内存cache + 异步保存模式,并发 每秒1000+ 不会有任何压力,而且正常情况下每个请求的处理时间不会超过50毫秒。
邮件操作一定产生大量IO操作,而且都是同步操作,可用上面的cache机制处理,或者专门的邮件服务器。
如果是DNF之类的格斗类游戏,因为对系统响应的时间要求特别高,50毫秒都嫌慢,这种情况下,瓶颈是在网络上,可用UDP包来解决。搜索UDP,有大量文档。
如果用户数是海量的,例如超过500万,或者对并发的要求更高,例如每秒5000+次请求,这种指标明显超过了单机的处理能力,这个时候就必须采用分布式结构,使用多台服务器。可参照EJB二次远程调用的原理实现多机分布式结构,搜索EJB,也有大量文档。
没事不要用c或者c++写游戏服务器端,c#和java这类历史悠久、有大量工具包、程序员一抓一大把的语言最好。性能不是问题,少BUG、稳定、开发周期短才是最重要的。
8、如何提高服务器并发处理能力
有什么方法衡量服务器并发处理能力
1. 吞吐率
吞吐率,单位时间里服务器处理的最大请求数,单位req/s
从服务器角度,实际并发用户数的可以理解为服务器当前维护的代表不同用户的文件描述符总数,也就是并发连接数。服务器一般会限制同时服务的最多用户数,比如apache的MaxClents参数。
这里再深入一下,对于服务器来说,服务器希望支持高吞吐率,对于用户来说,用户只希望等待最少的时间,显然,双方不能满足,所以双方利益的平衡点,就是我们希望的最大并发用户数。
2. 压力测试
有一个原理一定要先搞清楚,假如100个用户同时向服务器分别进行10个请求,与1个用户向服务器连续进行1000次请求,对服务器的压力是一样吗?实际上是不一样的,因对每一个用户,连续发送请求实际上是指发送一个请求并接收到响应数据后再发送下一个请求。这样对于1个用户向服务器连续进行1000次请求, 任何时刻服务器的网卡接收缓冲区中只有1个请求,而对于100个用户同时向服务器分别进行10个请求,服务器的网卡接收缓冲区最多有100个等待处理的请求,显然这时的服务器压力更大。
压力测试前提考虑的条件
并发用户数: 指在某一时刻同时向服务器发送请求的用户总数(HttpWatch)
总请求数
请求资源描述
请求等待时间(用户等待时间)
用户平均请求的等待时间
服务器平均请求处理的时间
硬件环境
压力测试中关心的时间又细分以下2种:
用户平均请求等待时间(这里暂不把数据在网络的传输时间,还有用户PC本地的计算时间计算入内)
服务器平均请求处理时间
用户平均请求等待时间主要用于衡量服务器在一定并发用户数下,单个用户的服务质量;而服务器平均请求处理时间就是吞吐率的倒数,一般来说,用户平均请求等待时间 = 服务器平均请求处理时间 * 并发用户数
怎么提高服务器的并发处理能力
1. 提高CPU并发计算能力
服务器之所以可以同时处理多个请求,在于操作系统通过多执行流体系设计使得多个任务可以轮流使用系统资源,这些资源包括CPU,内存以及I/O. 这里的I/O主要指磁盘I/O, 和网络I/O。
多进程 & 多线程
多执行流的一般实现便是进程,多进程的好处可以对CPU时间的轮流使用,对CPU计算和IO操作重叠利用。这里的IO主要是指磁盘IO和网络IO,相对CPU而言,它们慢的可怜。
而实际上,大多数进程的时间主要消耗在I/O操作上。现代计算机的DMA技术可以让CPU不参与I/O操作的全过程,比如进程通过系统调用,使得CPU向网卡或者磁盘等I/O设备发出指令,然后进程被挂起,释放出CPU资源,等待I/O设备完成工作后通过中断来通知进程重新就绪。对于单任务而言,CPU大部分时间空闲,这时候多进程的作用尤为重要。
多进程不仅能够提高CPU的并发度。其优越性还体现在独立的内存地址空间和生命周期所带来的稳定性和健壮性,其中一个进程崩溃不会影响到另一个进程。
但是进程也有如下缺点:
fork()系统调用开销很大: prefork
进程间调度和上下文切换成本: 减少进程数量
庞大的内存重复:共享内存
IPC编程相对比较麻烦
9、并发数与服务器配置的关系,能举个例子说明一下吗?
做网站的话,服务器要分前端和后端的,还有cache、负载平衡、网络带宽和存储系统等问题要考虑,不是单讲一台服务器就能说清楚的。
只讨论一台服务器的话,3650双路加4G内存支持到5万并发是容易达到的,即使针对业务流比较复杂的情况,也能满足很大程度的需要。
但是考虑到存储子系统,比如4块sas硬盘raid0,可能只能达到5000数量级的并发请求。如果是以另外的光纤盘阵来支持存储则可以显著提高硬盘传输带宽的性能。
最后还要考虑到你的网络带宽,对大多数网站来说,通常这才是最大的瓶颈所在。也就是说即使你的cpu、内存、硬盘都没问题,也会因为租用的网络带宽限制而影响最大的并发数。
还有一点,经过优化的网站程序对结果也有很大影响。事实上很多网站的访问体验很糟糕,其实不是因为硬件的原因,而是程序写的太烂。
很抱歉我本想以单台服务器来讲,但是说着说着又变成讲网站架构了。不如举个例子吧,如果你在这台服务器上运行discuz或动网之类的服务,在没有特别高峰的情况下,5万并发是没有问题的。
10、2个4核的CPU +4G的内存,这样的服务器最大能支持多少用户并发
这个配置的服务器,如果是国内大商家的话,每天跑几万pv访问量是没问题的。
小商家就不一定了。毕竟硬件服务器的质量是不同的,稳定性、速度、网络都会有很大差别。
你问这个问题的时候,要综合考虑自己业务的实际情况来判断够不够用。