当前位置: 首页 > news >正文

基于Linux服务器的性能分析与优化(2)

上接http://ixdba.blog.51cto.com/2895551/1397305


一、几种典型应用对系统资源使用的特点

1.1 以静态内容为主的Web应用
这类应用的一个主要特点是小文件居多,并且读操作频繁,Web服务器一般为Apache或Nginx,因为这两个HTTP服务器对静态资源的处理非常迅速和高效。在Web访问量不大时,可以直接对外提供服务,但是在有很大并发请求时,单一的Web服务无法支撑大量的客户端访问,此时就需要由多台Web服务器组成的负载集群系统。为了实现更高效的访问,在最前端还可以搭建Cache服务器,也就是将静态资源文件缓存到操作系统内存中直接进行读操作,因为直接从内存读取数据要比从硬盘读数据效率高很多,所以在Web前端搭建Cache服务器可以大大提高并发访问性能。常用的Cache软件有Squid、Varinsh等。
Cache服务器虽然可以提高访问性能,但要求服务器有很大的内存,当系统内存充足时,可以缓解磁盘随机读的压力;当内存过小或者内存不足时,系统就会使用虚拟内存,而虚拟内存的使用会引起磁盘I/O的增大,当磁盘I/O增大时,CPU的开销也随之增加。
在高并发访问时,还存在另外一个问题,就是网络带宽瓶颈,如果客户端访问量很大且带宽不够,就会阻塞网络,影响访问,因此,在构建基于Web的网络应用时,网络带宽也是必须考虑的一个因素。

1.2 以动态内容为主的Web应用
这类应用的一个特点是频繁地执行写操作,例如Java、PHP、Perl、CGI等,会导致CPU资源消耗严重。因为动态程序的执行要进行编译、读取数据库等操作,而这些操作都会消耗CPU资源,因此,一个基于动态程序的Web应用,应该选择多个性能较高的CPU,这将对系统整体性能的提高有很大帮助。
基于动态内容的Web应用在高并发访问时,系统执行的进程数会很多,因此要注意负载的分配。由于过多的进程会消耗大量系统内存,如果内存不足,就会使用虚拟内存,而虚拟内存的增加会导致磁盘写操作频繁,进而消耗CPU资源,因此要寻求一个硬件资源和软件资源的平衡点,例如配置较大的内存和高性能的CPU,而在软件方面可通过如Memcached加快程序与数据库之间的访问效率。

1.3 数据库应用

数据库应用的一个主要特点是消耗内存和磁盘I/O,而对CPU的消耗并不是很大,因此最基本的做法就是为数据库服务器配置较大的内存和读写较快的磁盘阵列,例如,可以为数据库服务器的磁盘选择RAID5、RAID01等RAID级别。将Web Server与DB Server分离也是优化数据库应用的一个常用做法。如果客户端用户对数据库的请求过大,还可以考虑采取数据库的负载均衡方案,通过软件负载均衡或硬件负载均衡的方式提高数据库访问性能。
对于数据库中过大的表,可以考虑进行拆分,也就是将一个大表拆分成多个小表,再通过索引进行关联处理,这样可以避免查询大表造成的性能问题,因为表太大时,查询遍历全表会造成磁盘读操作激增,进而出现读操作等待的情况。同时,数据库中查询语句复杂,大量的where子句,order by、group by排序语句等,容易使CPU出现瓶颈。最后,当数据更新时,数据更新量大或更新频繁,也会造成磁盘写操作激增,出现写操作的瓶颈。这些也应该在程序代码中避免。
在日常应用中,还有一种方法可以显著提高数据库服务器的性能,那就是读写分离。 同时对数据库进行读和写的操作,是效率极低的一种访问方式,较好的做法是根据读、写的压力和需求,分别建立两台结构完全相同的数据库服务器,将负责写的台服务器上的数据,定时复制给负责读的服务器,通过读写的协作提高系统整体性能。
通过缓存方式也可以提高数据库的性能, 缓存是数据库或对象在内存中的临时容器,使用缓存可大幅减少数据库的读取操作,改由内存来提供数据。比如可以在 Web Server和DB Server之间增加一层数据缓存层,在系统内存中建立被频繁请求对象的副本,这样一来,不访问数据库也可为程序提供数据,现在应用很广泛的Memcached就是基于这个原理。
1.4 软件下载应用

静态资源下载服务器的主要特点是带宽消耗严重,同时对存储性能要求也很高,在下载量极高时,可以采用多台、多点服务器分流形式分担下载负荷,在HTTP服务器方面,从高性能角度和减少服务器部署的角度考虑,推荐采用Lighttpd HTTP服务器,而不是采用传统的Apache服务器,原因是Apache使用阻塞模式的I/O操作,性能相对较差,并发能力有限,而Lighttpd使用异步I/O方式,处理资源下载的并发能力远远超过Apache。

1.5 流媒体服务应用
流媒体主要应用在视频会议、视频点播、远程教育、在线直播等方面,这类应用主要的性能瓶颈是网络带宽和存储系统带宽(主要是读操作),面对海量用户,如何保障用户接收到高清晰的、流畅的画面,如何最大限度地节省网络带宽,这些都是流媒体应用要解决的首要问题。
对于流媒体服务器的优化,可以从存储策略、传输策略、调度策略、代理服务器缓存策略及流媒体服务器的体系结构设计等几个方面进行考虑。在存储方面,需要对视频的编码格式进行优化,进而节省空间,优化存储性能;在传输方面,可以采用智能流技术控制发送的速率,最大程度保障用户观看视频的流畅性;在调度方面,可以采用静态调度和动态调度结合的方法;在代理服务器方面,可以采用分段缓存、动态缓存等管理策略;在流媒体体系结构方面,可以采用内存池和线程池技术改善内存消耗和线程过多对性能造成的影响。

















本文转自南非蚂蚁51CTO博客,原文链接: http://blog.51cto.com/ixdba/1397324,如需转载请自行联系原作者




相关文章:

  • mouseleave与mouseout区别
  • windows 7 与音频相关的几个服务
  • JavaScript精粹读书笔记(1,2)
  • restrore progress
  • 基于AJAX.NET技术的DataGrid控件开发
  • 将对象序列化和反序列化
  • 忘记linux中root密码怎么办?两种方法两步教你轻松搞定修改新的密码(仅限CentOS6.X)...
  • Oracle使用透明网关访问SQLSERVER数据库
  • Ts基础
  • SVN “不能打开文件“.svn/lock” 权限不够”精解
  • Oracle动态SQL和静态SQL比较
  • Android学习笔记--Content Provider 1
  • SpringMVC 参数注入
  • 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】下 ~ Net程序员的福利...
  • IIS6.0 + openssl执行版 + Windows2003 -- 移植篇
  • 【笔记】你不知道的JS读书笔记——Promise
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Iterator 和 for...of 循环
  • Java,console输出实时的转向GUI textbox
  • Linux gpio口使用方法
  • MySQL主从复制读写分离及奇怪的问题
  • Node项目之评分系统(二)- 数据库设计
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Sublime text 3 3103 注册码
  • Vue UI框架库开发介绍
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • windows下mongoDB的环境配置
  • 从伪并行的 Python 多线程说起
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 你不可错过的前端面试题(一)
  • 日剧·日综资源集合(建议收藏)
  • 深度解析利用ES6进行Promise封装总结
  • 微信小程序设置上一页数据
  • 我感觉这是史上最牛的防sql注入方法类
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 关于Android全面屏虚拟导航栏的适配总结
  • 选择阿里云数据库HBase版十大理由
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #pragma pack(1)
  • #QT(TCP网络编程-服务端)
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (windows2012共享文件夹和防火墙设置
  • (办公)springboot配置aop处理请求.
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET 回调、接口回调、 委托
  • .NET 中什么样的类是可使用 await 异步等待的?
  • /etc/sudoer文件配置简析
  • @Query中countQuery的介绍
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解