如何提升服务器系统性能(转)
2012-05-17 14:54
411 查看
众所周知,在服务器系统的开发上,对性能要求是很高的,特别在大批量并发中,服务器系统的性能就体现的尤为重要,常常会有人问:为啥我的CPU消耗那么大,为啥我的事务处理那么慢,执行效率无法提高等等此类的问题。那怎么提高系统的性能呢,联系目前的工作,对此谈谈看法。
1、服务器系统架构的不合理。
服务器在设计时,必须考虑整个系统架构的高效、稳定,高的可靠性和可用性。这点我深有体会,在最近的一个项目中,由于服务器需要接受大批量小数据的多客户端并发请求,对服务器的业务处理提出了挑战。原先的设计采用的了串行业务处理流程,结果导致服务器大量业务堆积,造成丢包现象异常严重。经过讨论后,为了提高服务器的业务处理能力,采用了生产者——消费者模型,在业务上来时,直接进队,然后返回,继续接受下一个请求,缩短通信的滞留时间。然后多条业务线程从队列取业务,加快业务处理速度,这样就有效的提高了服务器处理业务的能力。
2、通信协议的不合理。
对于大批量小数据多客户端并发,可以考虑用UDP协议,由于UDP是一种无连接传输协议,可以有效的降低系统开销,特别对大批量小数据的请求,效果明显,而TCP在这种情况对系统的消耗是很大的,往往会导致连接被拒绝,或者socket句柄已经存在的错误。有人可能就会问了,在服务端可以采用短连接,这样就可以节约资源。其实不然,大量socket的创建与销毁本来就是一种对系统性能的极度消耗,有时这种还没有直接使用长连接来的效率高。
在目前的P3项目就有体现,原本我们采用的就是TCP连接,当时并发量一直提不上去,而且在大量并发下,系统出现Socket的错误,资源消耗及其大,所以之后采用UDP协议,而TCP作为备用方案,来防止UDP的不可靠性。
3、大批量的内存创建、销毁,以及一切有关内存的操作都会影响到系统性能
这点对小量的并发,体现的并不明显,但是在大量并发下,这就会性能造成严重影响,这种内存的创建,销毁,以及内存的COPY等会消耗掉系统50%~60%的性能。对这种情况,尽量在系统启动时,创建好内存资源,然后再业务处理完后,回收资源,重新利用,切忌在大量业务处理时,new新的内存,处理完后,又delete内存资源,这样对系统性能消耗及其大。
另外,对于自定的协议包处理,尽量少用涉及到内存copy操作的函数或者类型,比如memset,string等,这样在打包与解包时,都会对系统性能造成影响。
http://blog.csdn.net/lenyusun/article/details/6604081
1、服务器系统架构的不合理。
服务器在设计时,必须考虑整个系统架构的高效、稳定,高的可靠性和可用性。这点我深有体会,在最近的一个项目中,由于服务器需要接受大批量小数据的多客户端并发请求,对服务器的业务处理提出了挑战。原先的设计采用的了串行业务处理流程,结果导致服务器大量业务堆积,造成丢包现象异常严重。经过讨论后,为了提高服务器的业务处理能力,采用了生产者——消费者模型,在业务上来时,直接进队,然后返回,继续接受下一个请求,缩短通信的滞留时间。然后多条业务线程从队列取业务,加快业务处理速度,这样就有效的提高了服务器处理业务的能力。
2、通信协议的不合理。
对于大批量小数据多客户端并发,可以考虑用UDP协议,由于UDP是一种无连接传输协议,可以有效的降低系统开销,特别对大批量小数据的请求,效果明显,而TCP在这种情况对系统的消耗是很大的,往往会导致连接被拒绝,或者socket句柄已经存在的错误。有人可能就会问了,在服务端可以采用短连接,这样就可以节约资源。其实不然,大量socket的创建与销毁本来就是一种对系统性能的极度消耗,有时这种还没有直接使用长连接来的效率高。
在目前的P3项目就有体现,原本我们采用的就是TCP连接,当时并发量一直提不上去,而且在大量并发下,系统出现Socket的错误,资源消耗及其大,所以之后采用UDP协议,而TCP作为备用方案,来防止UDP的不可靠性。
3、大批量的内存创建、销毁,以及一切有关内存的操作都会影响到系统性能
这点对小量的并发,体现的并不明显,但是在大量并发下,这就会性能造成严重影响,这种内存的创建,销毁,以及内存的COPY等会消耗掉系统50%~60%的性能。对这种情况,尽量在系统启动时,创建好内存资源,然后再业务处理完后,回收资源,重新利用,切忌在大量业务处理时,new新的内存,处理完后,又delete内存资源,这样对系统性能消耗及其大。
另外,对于自定的协议包处理,尽量少用涉及到内存copy操作的函数或者类型,比如memset,string等,这样在打包与解包时,都会对系统性能造成影响。
http://blog.csdn.net/lenyusun/article/details/6604081
相关文章推荐
- 如何提升服务器系统性能
- 一个优秀的Java程序员必须了解GC的工作原理、如何优化GC的性能、如何与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序
- 去哪儿网大数据流处理系统:如何使用Alluxio(前 Tachyon)实现10倍性能提升
- 在高并发的linux系统下如何提升性能统计tcp连接状态
- 架构师提升篇:分布式系统中,如何提升系统性能?
- 如何更新 Linux 内核来提升系统性能
- 架构师提升篇:分布式系统中,如何提升系统性能?
- 如何提升系统整体性能
- CentOS系统参数优化-提升MySQL服务器性能
- 请画出一个抓虫系统的架构图并说明你的爬虫需要如何优化来提升性能
- 如何用队列提升系统性能
- 使用原始的Titanic数据,通过特征筛选,一步步提升性能(特征如何提取)
- HHVM 是如何提升 PHP 性能的?
- 服务器性能调优,减少系统延时
- log4j日志异步化大幅提升系统性能
- 内存做硬盘,开启readyboost加速,全面提升系统性能!
- ECS 服务器CentOS系统如何开放端口
- 加载页面时如何提升性能
- 使用memcached提升网站服务器性能
- 如何在win10(64位系统)上安装apache服务器