转:http://jiekeyang.blog.51cto.com/11144634/1774473
一.系统性能分析
1.系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。操作系统完成任务与系统自身设置、网络拓扑结构、路由设备、路由策略、接入设备、物理线路有关。当linux服务器出现问题,应该从应用程序、操作系统、服务器硬件、网络环境等方面排查。
2.性能优化方案提供:影响系统性能最大的因素是应用程序和操作系统两个方面,因为这两个方面出现的问题隐藏性好,不易察觉,而其他方面出现的问题一般会立刻定位到。系统硬件:(1).当硬件属于物理故障,直接更换硬件;(2).硬件性能不满足需求,升级硬件。网络:带宽不够,网络不稳定,优化和升级网络即可。应用程序:直接修改或者优化软件系统即可。操作系统配置:修改系统参数、修改系统配置即可。
3.资源平衡:linux操作系统属于开源产品,是开源软件的实践和应用平台,可以支撑开源软件的使用。性能优化的目的是:在一定范围内使系统的各项资源使用趋于合理并保持平衡,即系统运行良好的时候恰恰就是系统资源达到一个平衡状态的时候。任何一项资源的过度使用都会破坏系统平衡状态,导致系统响应缓慢或者负载过高。CPU资源的过度使用会造成系统中的出现大量的等待进程,导致应用程序响应缓慢,而进程的大量增加会导致系统内存资源的增加,当内存耗尽时,系统会使用虚拟内存,而虚拟内存的使用会导致磁盘I/O的增加并加大CPU的开销。
4.系统管理员分析系统性能及管理方案:系统管理员要了解操作系统的当前运行状态,如系统负载、内存状态、进程状态、CPU负荷等。并且系统管理员还需要掌握操作系统的硬件信息,如磁盘I/O、CPU型号、内存大小、网卡带宽等相关参数。系统管理员还需了解应用程序对系统资源的使用情况,以及更深层次的应用程序的运行效率,如程序是否存在bug、内存溢出等问题,并对此类问题具备基本的解决方案。可以通过对系统资源的监控,来判断应用程序是否存在异常,如果应用程序存在问题,如果系统管理员自身可以解决,则自己解决,如果解决不了,则需要反映给开发人员,对应用程序进行修改或升级。
二.影响linux服务器性能的因素
1.硬件资源
(1).CPU
大部分CPU在同一时间只能运行一个线程,超线程的处理器可以在同一时间运行多个线程,所以可以利用处理器的超线程特性提高性能。Linux系统下只有运行SMP内核才能支持超线程,但安装的CPU越多,则性能的提高率就越低。并且,linux内核会把多核处理器当做多个单核CPU来识别,如两个四核CPU,在linux系统下会被当做8个单核CPU。但从性能上分析,两者并不等价,相对来说,8个单核CPU的性能相对更高一点。
CPU瓶颈的情况:邮件服务器、动态WEB服务器。
(2).内存
内存太小,进程会被阻塞,应用会变缓慢,甚至失去响应;内存太大,浪费资源。Linux采用物理内存和虚拟内存两种方式,虚拟内存可以缓解物理内存的不足,但占用过多的虚拟内存,会导致应用程序的性能下降。所以要保证应用程序的高性能运行,需要足够大的物理内存,但物理内存过大,会造成资源浪费。如32位处理器的linux操作系统,内存超过4G的部分都会被浪费,要使用更大的内存,需安装64的操作系统。
32位linux操作系统上,应用程序单个进程最大只能使用2G内存(因为处理器寻址范围的限制),所以,即使有更大的内存,应用程序也使用不了。
内存瓶颈的情况:打印服务器、数据库服务器、静态Web服务器。
(3).磁盘I/O性能
在一个频繁读写操作的应用中,如果磁盘I/O性能得不到满足,就会产生应用停滞的情况,故常见的使用RAID阵列来提高磁盘I/O性能。
RAID:独立磁盘冗余阵列,简称磁盘阵列。Raid通过将多块独立的磁盘(物理硬盘)按不同的方式组合起来形成一个磁盘组(逻辑硬盘),从而提供比单个硬盘更高的I/O性能和数据冗余。
通过RAID技术组成的磁盘组,相当于一个大硬盘,用户可以对其进行分区格式化、建立文件系统等操作,和单个物理硬盘基本上一样,唯一不同的是RAID磁盘组的I/O性能比单个硬盘性能要高许多,并且在数据安全方面也有很大提高。
常见的RAID技术:RAID0、RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7、RAID0+1、RAID10等级别。
(4)网络带宽
网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络都将导致网络应用程序的访问阻塞。而解决带宽的方法是是使用大流量的带宽或者使用光纤网络。
2.操作系统资源
(1).系统安装优化
在安装linux系统时,可以在磁盘的划分、SWAP内存的分配等加载项上做优化。
磁盘层面:磁盘分配可以遵循应用的要求:a.对于读写数据频繁但数据安全性要求不高时,可以将磁盘做成RAID0;b.对数据安全性要求高却对数据读写没有要求的可以做成RAID1;c.对读要求高,而对写操作没有要求,但要保证数据安全性,则可以将磁盘做成RAID5;d.对读写要求高,并且要求数据安全性高,则可以将磁盘做成RAID0+1;通过不同的需求将磁盘做成不同的RAID级别,在磁盘层面对系统进行优化。
内存层面:当内存较小(物理内存小于4G),一般设置SWAP交换分区为内存的2倍,如果物理内存大于4G而小于16G,设置SWAP交换分区大小等于或略小于内存;如果内存大小大于16G,原则上可以将SWAP分区设置为0,建议设置一个一定大小的SWAP分区起缓冲作用。
(2).内核参数优化
内核参数的优化要和具体应用结合起来整体考虑,根据应用的不同要求进行参数的优化。
(3).文件系统优化
Linux下可选的文件系统有ext2、ext3、ext4、xfs和ReiserFS,根据应用的需求,选择不同的文件系统。
Linux标准文件系统是从VFS开始的,然后是ext,接着是ext2,准确来说。Ext2是linux上标准的文件系统,ext3是在ext2基础上增加日志形成的,,是基于超级块和inode的设计理念设计的。
XFS文件系统是一个高级日志文件,通过分布式处理磁盘请求、定位数据、保持cache的一致性来提供对文件系统数据的低延迟、高带宽的访问。所以XFS伸缩性较好,具有优秀的日志记录功能、可扩展性强、快速写入性能等特点。
ReiserFS是一款高性能的日志文件系统,通过平衡树结构来管理数据,包括文件数据、文件名以及日志支持等。优点是访问性能好和安全性高。具有高效、合理利用磁盘空间,先进的日志管理机制,特有的搜寻方式、海量磁盘存储等特点。
(4).应用的程序的优化
应用程序的优化主要是测试应用程序的可用性以及高效性,目的是调试应用程序是否存在bug。
三.系统性能分析和优化标准
影响系统性能的主要因素是CPU、内存、以及I/O磁盘,以下为系统性能的好坏的判定标准:
好 坏 糟糕
CPU: user%+sys% <70% =85% >=90%
内存: Swap In(si)=0 per CPU with10 page/s More Swap In & Swap Out
Swap Out(so)=0
磁盘:iowait% <20% =35% >=50%
参数解释:
User%:CPU出于用户模式下的时间百分比。
Sys%:CPU处于系统模式下的百分比。
Iowait%:CPU等待输入输出完成时间的百分比。
Swap In:虚拟内存的页导入,即从虚拟磁盘交换到内存
Swap Out:虚拟内存的页导出,即从内存交换到虚拟磁盘。
四,常用应用程序资源占用案例
1.以静态页面为主的Web服务
主要特点是小文件居多,读操作频繁,Web服务器一般为Apache或者Nginx。
应用场景:Apache或者Nginx服务器对静态页面的处理非常迅速和高效,当在Web访问量不大时,可以不做优化直接对外提供服务,但在高并发请求时,单一的Web服务器无法支撑大量的客户端访问,需要搭建由多台Web服务器组件的负载均衡集群平台来保证服务的可用性。并且可以在Web服务器前端搭建Cache服务器用以提供高效的访问处理速度,即将静态资源文件缓存到操作系统的内存中直接进行读操作,当客户端访问服务器时,Cache服务器先在缓存中找相应的资源,如果缓存中资源存在则直接处理,如果资源不存在,再将请求发送到后端Web服务器上,Web服务器根据请求在后端服务器中找相应的资源,最后将处理结果返回给客户端。这样可以大大提高Web服务器的并发访问性能。但此种结构服务器需要有很大的内存,当系统内存充足时,可以缓解磁盘读操作的压力,当内存不足时,系统就会使用虚拟内存,虚拟内存的频繁使用会加大磁盘I/O的增大,从而导致CPU的消耗增大,再次影响Web服务器性能。并且网络带宽也是制约高并发访问的一个因素,当访问量很大时,网络带宽不够,会阻塞网络,导致系统性能下降。网络带宽瓶颈可以通过调节带宽或者更换为光纤优化。故此种结构只适用于低并发的Web网站。常用的缓存服务器有Varnish和Squid。
2.以动态页面为主的Web服务
主要特点是写操作频繁,一般为Java、php、cgi、perl等动态语言编写的网站。
应用场景:频繁的写操作会导致CPU的资源消耗严重,主要原因是动态程序的执行需要进行编译、读取数据库等操作,这些操作会大量消耗CPU资源。所以处理动态Web应用的服务器。一般情况下需要有多个性能较好的CPU。因为动态内容的Web应用在高并发时,会产生多个进程,大量的进程会造成系统负载高,并且大量的进程会消耗系统大量的内存,导致系统内存不足,系统就会使用虚拟内存,而虚拟内存的大量使用会造成磁盘写操作频繁,从而加剧CPU的负荷,因此处理动态内容的Web服务器不但需要多个高性能的CPU,还需要配置较大的内存,并且可以在Web服务器与数据库之间加入memcached缓存服务器,用以提高数据处理的效率。
3.数据库应用
主要特点:内存和磁盘I/O的消耗较大,对CPU的消耗并不是很大
应用场景:后端数据库每时每刻都在进行频繁的写操作和读操作,而这些操作对于系统内存以及磁盘I/O的消耗很大,为了保证数据高效、安全的处理,则需要在内存层面和磁盘层面进行优化。
可以选择RAID阵列进行磁盘I/O优化,并且尽量将Web服务器与数据库服务器分离,当客户端对数据库的请求较大时,可以考虑对数据库做负载均衡,以此提高数据库的访问性能。
对于数据库中较大的表,可以将大表分成多个小表,并且建立索引,提高数据的查询效率。而且数据库中的查询语句比较复杂,容易使CPU出现瓶颈,导致数据更新时比较慢,造成磁盘I/O的写操作大量等待,出现写操作瓶颈,所以在数据程序代码的编写时,尽量要简洁。
还可以对数据库进行读写分离,根据数据库的读写压力分别建立两台相同的数据库服务器,将读操作与写操作分开进行,只需要定时将数据同步即可。但这种方式会导致数据不实时同步,可以在数据库前面加入缓存服务器,当客户端需要读取实时数据时可以从缓存服务器中获取,不影响写操作的服务器将数据同步给读操作的数据库服务器。并且加入缓存服务器,可以大大减少读、写操作服务器的压力,提高数据的性能。
4.软件下载应用优化
主要特点:主要针对的是静态资源下载,其特点是带宽消耗严重,并且对存储性能要求较高。
应用场景:客户在下载应用时,带宽不足,会导致下载速度慢,甚至出现下载失败,而且大量下载同时进行,更严重加剧了带宽的负担,并且对数据库的负担也加重了。可以通过多台、多点服务器分流的方式分担下载负荷。在HTTP服务器方面。可以采用支持高并发的服务器,如Nginx服务器,,采用异步非阻塞的I/O工作模式,处理资源下载的能力较强。
5.流媒体服务应用优化
主要特点:主要应用于视频会议、视频点播、远程教育、在线直播等场景。特点是网络带宽和存储系统带宽存在瓶颈(主要是数据库的读操作)。
应用场景:当远程视频点播时,对于视频的流畅性有较高的要求,因此对网络带宽和数据读取方面的要求较高。对于网络带宽,前面阐述主要可以从带宽优化和更换光纤方面处理,这是硬件方面的处理方案。软件方面可以从存储策略、传输策略、调度策略以及代理缓存方面进行优化。
存储方面可以采用多点分布式存储,既能提高数据的安全性。又可以提升数据的读取速率,并且可以对视频的编码格式进行优化,节省存储空间,优化存储性能。
传输方面可以通过智能数据流方式根据压力来控制数据流的传输,尽可能的保证客户观看视频的流畅性。
调度方面可以采用动静结合的调度方式,将动态数据和静态数据结合到同一台代理服务器上。
代理缓存方面可以采用分段缓存、动态缓存、静态缓存等策略,加快视频数据的读取速度,减小数据库的读操作压力。
在流媒体结构方面,可以通过采用内存池和线程池技术改善内存消耗和线程堆积的弊端。