您的位置:首页 > 运维架构 > Linux

第10章 基于linux服务器的性能分析与优化 (笔记)

2013-10-09 18:36 375 查看
系统性能分析的目的

1、找到系统性能的瓶颈
系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。

2、提供性能优化方案
查找系统性能瓶颈需要在应用程序、操作系统、服务器硬件、网络环境等方面进行查找和定位,影响性能最大的是应用程序和操作系统两方面,这两个方面出现的问题不易察觉,隐蔽性很强。

3、使系统硬件和软件资源的使用达到平衡
性能优化的最终目的是:在一定范围内使系统的各项资源使用趋于合理并保持一定的平衡,即系统运行良好的时候恰恰就是系统资源达到了一个平衡状态的时候。在操作系统中,任何一项资源的过度使用都会破坏这种平衡状态,从而导致响应缓慢或者负载过高。
例如,CPU资源的过度使用会造成系统中出现大量的等待进程,导致应用程序响应缓慢,而进程的大量增加又会导致系统内存资源的增加,当物理内存耗尽时,系统就会使用虚拟内存,而虚拟内存的使用又会导致磁盘I/O的增加并加大CPU的开销。因此性能的优化就是在硬件、操作系统、应用软件之间找到一个平衡点。

分析系统性能涉及的人员

1、linux系统管理人员

2、系统架构设计人员

3、软件开发人员

系统性能优化一般遵循的流程是:首先系统管理人员查看系统的整体状况,主要从系统硬件、网络设备、操作系统配置、应用程序架构和程序代码5个方面进行综合判断。如果发现时系统硬件、网络设备或者操作系统配置问题,系统管理员可以根据情况自主解决;如果发现是程序结构问题,就需要提交给程序架构设计人员;如果发现是程序代码执行问题,就交给开发人员进行代码优化。这样就完成了一个系统性能优化的过程。

影响linux性能的各种因素

1、CPU

CPU数量越多,主频越高,服务器性能也就相对越好。事实并非完全如此。在linux系统下,只有运行SMP内核才能支持超线程,但是,安装的CPU数量越多,从超线程获得的性能方面的提高就越少。另外,linux内核会把多核的处理器当做多个单独的CPU来识别。

可能出现CPU瓶颈的应用有邮件服务器、动态Web服务器等。对于这类应用,要把CPU的配置和性能放在主要位置。

2、内存

可能出现内存性能瓶颈的应用有打印服务器、数据库服务器、静态Web服务器等,对于这类应用要把内存大小放在主要位置。

3、磁盘I/0性能

磁盘的I/0性能直接影响应用程序的性能,一个有频繁读写操作的应用中,磁盘I/O性能得不到满足,就会导致应用停滞。很多方法可提高I/O性能,如常见的磁盘RAID技术。

唯一不同的是RAID磁盘组的I/O性能比单个磁盘要高很多,同时在数据的安全性方面也有很大提升。

根据磁盘组合方式的不同,RAID可分为RAID0、RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7、RAID0+1、RAID10等级别,常用的RAID级别有RAID0、RAID1、RAID5、RAID0+1。

RAID0:通过把多块硬盘粘合称一个容量更大的硬盘组,提高了磁盘的性能和吞吐量。这种方式成本低,要求至少两块磁盘,但没有容错和数据修复功能,因而只能用在对数据安全性要求不高的环境中。

RAID1:磁盘镜像,通过把一个磁盘的数据镜像到另一个磁盘上,最大限度地保证磁盘数据的可靠性和可修复性,具有很高的数据冗余能力,但磁盘利用率只有50%,成本最高,多用在保持重要数据的场合。

RAID5:采用了磁盘分段加奇偶校验技术,从而提高了系统的可靠性。RAID5读出效率很高,写入效率一般,至少需要3块盘。允许一块磁盘故障,而不影响数据的可靠性。

RAID0+1:把RAID0和RAID1技术结合起来就成了RAID0+1,至少需要4块硬盘,此种方式的数据除分布在多个盘上外,每个盘都有其镜像盘,提高全冗余能力,同时允许一个磁盘故障,而不影响数据可用性,并具有快速度/写能力。

4、网络宽带

低速的、不稳定的网络将导致网络应用程序的访问阻塞。

操作系统相关资源

1、系统安装优化

系统优化可从安装操作系统开始,安装linux系统时,磁盘的划分、SWAP内存的分配都直接影响以后系统的运行性能。更具需求做RAID。
如果内存较小(物理内存小于4GB),一般设置SWAP交换分区大小为内存的2倍;如物理内存大于4GB小于16GB,可以设置SWAP大小等于或略小于物理内存即可;如果内存大小在16GB以上,原则上可以设置SWAP为0,但不建议这么做,因为设置一定大小的SWAP还是有一定作用的。

2、内核参数优化

系统安装完成后,优化工作并没有结束,接下来还可以对系统内核参数进行优化,不过内核参数的优化要和系统中部署的应用结合起来整体考虑。例如,如果系统部署的是oracle数据库应用,那么就需要对系统共享内存段(kernel.shmmax、kernel.shmmni、kernel.shmall)、系统信号量(kernel.sem)、文件句柄(fs.file-max)等参数进行优化设置;如部署的是web应用,那么就需要根据web应用特性进行网络参数的优化,例如修改net.ipv4.ip_local_port_range、net.ipv4.tcp_tw_reuse、net.core.somaxconn等网络内核参数。

3、文件系统优化

在linux下可选的文件系统有ext2、ext3、xfs、ReiserFS。可根据不同的应用,选择不同的文件系统。

linux标准文件系统是从VFS开始的,然后是ext,接着就是ext2,ext2是linux上标准的文件系统,ext3是在ext2基础上增加日志形成的。从VFS到ext3,其设计思想没有太大变化,都是早期UNIX家族基于超极块和inode的设计理念设计而成的。

XFS文件系统时SGI开发的一个高级日志文件系统,后来移植到了linux系统下。XFS通过分布处理磁盘请求、定位数据、保持Cache的一致性来提供对文件系统数据的低延迟、高带宽的访问。因此,XFS极具伸缩性,非常健壮,具有优秀的日志记录功能、可扩展性强、快速写入性能等优点。

ReiserFS是在Hans Reiser领导下开发出来的一款高性能的日志文件系统,它通过完全平衡树结构来管理数据,包括文件数据、文件名及日志支持等。与ext2/ext3相比,其最大的优点是访问性能和安全性大幅提升。ReiserFS具有高效、合理利用磁盘空间,先进的日志管理机制,特有的搜寻方式,海量磁盘存储等优点。

系统性能分析标准和优化原则





user%表示CPU处在用户模式下的时间百分比。
sys%表示CPU处在系统模式下的时间百分比。
iowait%表示CPU等待输入输出完成时间的百分比。
Swap In即si,表示虚拟内存的页导入,即从SWAP DISK 交换到 RAM。
Swap Out 即 so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK。

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

1、以静态内容为主的web应用

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

2、以动态内容为主的web应用

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

3、数据库应用

数据库应用的一个主要特点是消耗内存和磁盘I/O,而对CPU的消耗并不是很大,因此最基本的做法就是为数据库服务器配置较大的内存和读写较快的磁盘阵列。例如,可为数据库服务器的磁盘选择RAID5、RAID0+1等RAID级别。将Web Server与DB Server分离也是优化数据库应用的一个常用做法。如客户端用户对数据库的请求过大,还可考虑采取数据库的负载均衡方案,通过软件负载均衡或硬件负载均衡的方式提高数据库访问性能。

对数据库中过大的表,可考虑进行拆分,也就是将一个大表拆分成多个小表,再通过索引进行关联处理,这样可避免查询大表造成的性能问题,因为表太大时,查询遍历全表会造成磁盘读操作激增,进而出现读操作等待的情况。同时,数据库中查询语句复杂,大量的where子句,order by、group by排序语句等,容易使CPU出现瓶颈。最后,当数据更新时,数据更新量大或更新频繁,也会造成磁盘写操作激增,出现写操作的瓶颈。这些也应该在程序代码中避免。

日常应用中,还有一种方法可显著提高数据库服务器的性能,那就是读写分离。同时对数据库进行读和写的操作,是效率极低的一种访问方式,较好的做法是根据读、写的压力和需求,分别建立两台结构完全相同的数据库服务器,将负责写的服务器上的数据,定时复制给负责读的服务器,通过读写的协作提高系统整体性能。

通过缓存方式也可以提高数据库的性能,缓存是数据库或对象在内存中的临时容器,使用缓存可大幅减少数据库的读取操作,改由内存来提供数据。比如可在Web server 和DB server之间增加一层数据缓存层,在系统内存中建立被频繁请求对象的副本,这样一来,不访问数据库也可为程序提供数据。现在应用很广泛的Memcached就是基于这个原理。

软件下载应用

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

流媒体服务应用

流媒体主要应用在视频会议、视频点播、远程教育、在线直播等方面,这类应用主要的性能瓶颈是网络带宽和存储系统带宽(主要是读操作)。面对海量用户,如果保障用户接收到高清晰的、流畅的画面,如果最大限度地节省网络带宽,这些都是流媒体应用要解决的首要问题。

对于流媒体服务器的优化,可以从存储策略、传输策略、调度策略、代理服务器缓存策略及流媒体服务器的体系结构设计等几个方面进行考虑。在存储方面,需要对视频的编码格式进行优化,进而节省空间,优化存储性能;在传输方面,可采用智能流技术控制发送的速率,最大程度地保障用户观看视频的流畅性;在调度方面,可以采用静态调度和动态调度结合的方法;在代理服务器方面,可以采用分段缓存、动态缓存等管理策略;在流媒体体系结构方面,可采用内存池和线程池技术改善内存消耗和线程过多对性能造成的影响。
本文出自 “朵夫” 博客,请务必保留此出处http://tibet.blog.51cto.com/3847517/1306426
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: