我的Windows下的服务器现在只能带900人,CPU就100%。
客户极其不满,要求2000人。
Compaq 服务器,双CPU(自强)、1G内存、SCSI硬盘(基本是顶级配置)。
而且,别人已经可以带1500人。实在令人痛苦。仔细研究,怀疑在以下情况
需要优化,想看看大侠门的看法:
1、是否程序中应当加入些Sleep语句,让CPU降降温;否则,CPU总是出现
100%??????
2、内存中查找到底对CPU负载造成多大影响。900个线程,每次来个请求,
就要查找1~10次,但是,全部在内存中?????
3、工作线程和用户线程会有很大的差别吗?我用的是用户线程,但,其实
只需工作线程即可。
4、ZLIB压缩对CPU压力有多大???我每个大包都用了ZLIB压缩。
5、多线程是提前把2000个开好,作为线程池用;还是来一路连接就为
用户分配一个线程好???????我用的是后者,来一个,分一个;走了
断开,来了又重新分配。
客户极其不满,要求2000人。
Compaq 服务器,双CPU(自强)、1G内存、SCSI硬盘(基本是顶级配置)。
而且,别人已经可以带1500人。实在令人痛苦。仔细研究,怀疑在以下情况
需要优化,想看看大侠门的看法:
1、是否程序中应当加入些Sleep语句,让CPU降降温;否则,CPU总是出现
100%??????
2、内存中查找到底对CPU负载造成多大影响。900个线程,每次来个请求,
就要查找1~10次,但是,全部在内存中?????
3、工作线程和用户线程会有很大的差别吗?我用的是用户线程,但,其实
只需工作线程即可。
4、ZLIB压缩对CPU压力有多大???我每个大包都用了ZLIB压缩。
5、多线程是提前把2000个开好,作为线程池用;还是来一路连接就为
用户分配一个线程好???????我用的是后者,来一个,分一个;走了
断开,来了又重新分配。
当然,那样是个很好的方法。不过,据了解,在对手没有用此技术的
前提,也能搞定1500人,令我费解。
2、 你的意思是,先把线程开好,然后作为资源调度?
realdreamer兄,不知有何高招。
2、你门认为内存查找真的很耗时吗?每个线程查10次以内,那不是
一瞬间吗?
3、我用的是select复用技术,因为这样,在Linux下也可以用。
当然,完成端口I/O那样是个很好的方法。不过,据了解,在对手没有用此技术的 前提,也能搞定1500人,令我费解。