一.系统性能分析

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.流媒体服务应用优化

主要特点:主要应用于视频会议、视频点播、远程教育、在线直播等场景。特点是网络带宽和存储系统带宽存在瓶颈(主要是数据库的读操作)

应用场景:当远程视频点播时,对于视频的流畅性有较高的要求,因此对网络带宽和数据读取方面的要求较高。对于网络带宽,前面阐述主要可以从带宽优化和更换光纤方面处理,这是硬件方面的处理方案。软件方面可以从存储策略、传输策略、调度策略以及代理缓存方面进行优化

存储方面可以采用多点分布式存储,既能提高数据的安全性。又可以提升数据的读取速率,并且可以对视频的编码格式进行优化,节省存储空间,优化存储性能。

传输方面可以通过智能数据流方式根据压力来控制数据流的传输,尽可能的保证客户观看视频的流畅性。

调度方面可以采用动静结合的调度方式,将动态数据和静态数据结合到同一台代理服务器上

代理缓存方面可以采用分段缓存、动态缓存、静态缓存等策略,加快视频数据的读取速度,减小数据库的读操作压力。

在流媒体结构方面,可以通过采用内存池和线程池技术改善内存消耗和线程堆积的弊端