Linux性能调优的优化思路

Linux操做系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,咱们常见的有apache、tomcat、nginx、mysql、php等等,开源软件的最大理念就是自由、开放,那么Linux做为一个开源平台,最终要实现的是经过这些开源软件的支持,以低廉的成本,达到应用最有的性能。所以,谈到性能问题,主要实现的是Linux系统和应用程序的最佳结合。php

博文大纲:
1、性能问题综述
2、影响Linux性能的因素
3、分析系统性能设计的人员
4、调优总结node

1、性能问题综述

系统的性能是指操做系统完成任务的有效性、稳定性和响应速度。Linux系统管理员会常常遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个web服务,常常会出现网页打不开、打开速度慢等现象,而遇到这些问题,就会有人抱怨Linux系统很差,其实这些都是表面现象。操做系统完成一个任务时,与系统自身设置、网络拓补结构、路由设备、路由策略、接入设备、物理线路等多个方面都紧密相关,任何一个环节出现问题,都会影响整个系统的性能。所以当Linux应用出现问题是,应当从应用程序、操做系统、服务器硬件、网络环境等方面综合排查,定位问题出如今那个部分,而后集中解决。mysql

在应用程序、操做系统、服务器硬件、网络环境等方面。影响性能最大的是应用程序和操做系统两个方面,由于这两个方面出现的问题不易察觉,隐蔽性很强。而硬件、网络方面只要出现问题,通常都能立刻定位。本次博文主要介绍操做系统方面的性能调优思路,应用程序方面须要具体问题具体对待。linux

如下从影响Linux性能的因素、分析性能设计的人员、系统性能优化工具、系统性能评价标准四个方面介绍优化Linux的通常思路和方法。ios

2、影响Linux性能的因素

1)系统硬件资源

1)CPU

CPU是操做系统稳定运行的根本,CPU的速度与性能在很大程度上决定了系统总体的性能。所以,CPU数量越多、主频越高,服务器性能也就相对较好。但试试并不是彻底如此。nginx

目前在大部分CPU在同一时间内只能运行一个线程,超线程的处理器能够在同一时间运行多个线程。所以,能够利用处理器的超线程特性来提升系统性能。在Linux系统下,只有运行SMP内核才能支持超线程,可是,安装的CPU数量越多,从超线程得到的性能方面的提升就越少。另外,Linux内核会把多核的处理器看成多个单独的CPU来识别,例如:两个4核的CPU,在Linux系统下会被当作8个单核的CPU。但从性能角度来说,两个4核的CPU和8个单核的CPU并不彻底等价,根据权威部门得出的测试结论,前者的总体性能要比后者低25%~30%。web

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

2)内存

内存的大小也是影响Linux性能的一个重要的因素,内存过小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,致使资源浪费。Linux系统采用了物理内存和虚拟内存两种方式,虚拟内存虽然能够缓解物理内存的不足,可是占用过多的虚拟内存,应用程序的性能将明显降低,要保证应用程序的高性能运行,物理内存必定要足够大;可是过大的物理内存,会形成内存资源浪费,例如,在一个32位处理器的Linux操做系统上,超过8GB的物理内存都将被浪费。所以,要使用更大的内存,建议安装64位的操做系统,同时开启Linux的大内存内核支持。数据库

因为处理器寻址范围的限制,在32位Linux操做系统上,应用程序单个进程最大只能使用4GB的内存,这样以来,即便系统有更大的内存,应用程序也没法“享”用,解决的办法就是使用64位处理器,安装64位操做系统。在64位操做系统下,能够知足全部应用程序对内存的使用需求 ,几乎没有限制。apache

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

3)磁盘I/O性能

磁盘的I/O性能直接影响应用程序的性能,在一个有频繁读写的应用中,若是磁盘I/O性能得不到知足,就会致使应用停滞。好在现今的磁盘都采用了不少方法来提升I/O性能,好比常见的磁盘RAID技术。

经过RAID技术组成的磁盘组,就至关于一个大硬盘,用户能够对它进行分区格式化、创建文件系统等操做,跟单个物理硬盘如出一辙,惟一不一样的是RAID磁盘组的I/O性能比单个硬盘要高不少,同时在数据的安全性也有很大提高。

根据磁盘组合方式的不一样,RAID能够分为RAID0,RAID一、RAID二、RAID三、RAID四、RAID五、RAID六、RAID七、RAID0+一、RAID10等级别,经常使用的RAID级别有RAID0、RAID一、RAID五、RAID0+1,这里进行简单介绍。

RAID 0:也就是带区卷,经过把多块硬盘粘合成一个容量更大的硬盘组,提升了磁盘的性能和吞吐量。这种方式成本低,要求至少两个磁盘,可是没有容错和数据修复功能,于是只能用在对数据安全性要求不高的环境中。
RAID 1:也就是镜像卷,经过把一个磁盘的数据镜像到另外一个磁盘上,最大限度地保证磁盘数据的可靠性和可修复性,具备很高的数据冗余能力,但磁盘利用率只有50%,于是,成本最高,多用在保存重要数据的场合。
RAID5:采用了磁盘分段加奇偶校验技术,从而提升了系统可靠性,RAID5读出效率很高,写入效率通常,至少须要3块盘。容许一块磁盘故障,而不影响数据的可用性。
RAID0+1:把RAID0和RAID1技术结合起来就成了RAID0+1,至少须要4个硬盘。此种方式的数据除分布在多个盘上外,每一个盘都有其镜像盘,提供全冗余能力,同时容许一个磁盘故障,而不影响数据可用性,并具备快速读/写能力。

经过了解各个RAID级别的性能,能够根据应用的不一样特性,选择适合自身的RAID级别,从而保证应用程序在磁盘方面达到最优性能。

4)网络带宽

Linux下的各类应用,通常都是基于网络的,所以网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络将致使网络应用程序的访问阻塞,而稳定、高速的网络带宽,能够保证应用程序在网络上畅通无阻地运行。幸运的是,如今的网络通常都是千兆带宽或光纤网络,带宽问题对应用程序性能形成的影响也在逐步下降。

2)操做系统相关资源

基于操做系统的性能优化也是多方面的,能够从系统安装、系统内核参数、网络参数、文件系统等几个方面进行衡量,下面依次进行简单介绍。

1)系统安装优化

系统优化能够从安装操做系统开始,当安装Linux系统时,磁盘的划分,SWAP内存的分配都直接影响之后系统的运行性能。

例如,磁盘分配能够遵循应用的需求:
1)对于对写操做频繁而对数据安全性要求不高的应用,能够把磁盘作成RAID 0;
2)而对于对数据安全性较高,对读写没有特别要求的应用,能够把磁盘作成RAID 1;
3)对于对读操做要求较高,而对写操做无特殊要求,并要保证数据安全性的应用,能够选择RAID 5;
4)对于对读写要求都很高,而且对数据安全性要求也很高的应用,能够选择RAID10/01;

这样经过不一样的应用需求设置不一样的RAID级别,在磁盘底层对系统进行优化操做。

随着内存价格的下降和内存容量的日益增大,对虚拟内存SWAP的设定,如今已经没有了所谓虚拟内存是物理内存两倍的要求,可是SWAP的设定仍是不能忽略,根据经验:
1)若是内存较小(物理内存小于4GB),通常设置SWAP交换分区大小为内存的2倍;
2)若是物理内存大于8GB小于16GB,能够设置SWAP大小等于或略小于物理内存便可;
3)若是内存大小在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下可选的文件系统有ext二、ext三、ReiserFS、ext四、xfs,根据不一样的应用,选择不一样的文件系统。

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

XFS文件系统是一个高级日志文件系统,XFS经过分布处理磁盘请求、定位数据、保持Cache 的一致性来提供对文件系统数据的低延迟、高带宽的访问,所以,XFS极具伸缩性,很是健壮,具备优秀的日志记录功能、可扩展性强、快速写入性能等优势。

目前服务器端ext4和xfs是主流文件系统,如何选择合适的文件系统,须要根据文件系统的特色加上业务的需求综合来定。

3)应用程序软件资源

应用程序的优化实际上是整个优化工程的核心,若是一个应用程序存在BUG,那么即便全部其余方面都达到了最优状态,整个应用系统仍是性能低下,因此,对应用程序的优化是性能优化过程的重中之重,这就对程序架构设计人员和程序开发人员提出了更高的要求。

3、分析系统性能设计的人员

1)Linux运维人员

在作性能优化过程当中,Linux运维人员承担着很重要的任务:
1)首先,Linux运维人员要了解和掌握操做系统的当前运行状态,例如系统负载、内存状态、进程状态、CPU负荷等信息,这些信息是检测和判断系统性能的基础和依据;
2)其次,Linux运维人员还有掌握系统的硬件信息,例如磁盘I/O、CPU型号、内存大小、网卡带宽等参数信息,而后根据这些信息综合评估系统资源的使用状况;
3)做为一名Linux运维人员,还要掌握应用程序对系统资源的使用状况,更深刻的一点就是要了解应用程序的运行效率,例如是否有程序BUG、内存溢出等问题,经过对系统资源的监控,就能发现应用程序是否存在异常,若是确实是应用程序存在问题,须要把问题马上反映给程序开发人员,进而改进或升级程序。

性能优化自己就是一个复杂和繁琐的过程,Linux运维人员只有了解了系统硬件信息、网络信息、操做系统配置信息和应用程序信息才能有针对性地的展开对服务器性能优化,这就要求Linux运维人员有充足的理论知识、丰富的实战经验以及缜密分析问题的头脑。

2)系统架构设计人员

系统性能优化涉及的第二类人员就是应用程序的架构设计人员。若是Linux运维人员在通过综合判断后,发现影响性能的是应用程序的执行效率,那么程序架构设计人员就要及时介入,深刻了解程序运行状态。

1)首先,系统架构设计人员要跟踪了解程序的执行效率,若是执行效率存在问题,要找出哪里出现了问题;
2)其次,若是真的是架构设计出现了问题,那么就要立刻优化或改进系统架构,设计更好的应用系统架构;

3)软件开发人员

系统性能优化最后一个环节涉及的是程序开发人员,在Linux运维人员或架构设计人员找到程序或结构瓶颈后,程序开发人员要立刻介入进行相应的程序修改。修改程序要以程序的执行效率为基准,改进程序的逻辑,有针对性地进行代码优化。例如,Linux运维人员在系统中发现有条SQL语句耗费大量的系统资源,抓取这条执行的SQL语句,发现此SQL语句的执行效率太差,是开发人员编写的代码执行效率低形成的,这就须要把这个信息反馈给开发人员,开发人员在收到这个问题后,能够有针对性的进行SQL优化,进而实现程序代码的优化。

从上面这个过程能够看出,系统性能优化通常遵循的流程是:
1)首先Linux运维人员查看系统的总体情况,主要从系统硬件、网络设备、操做系统配置、应用程序架构和程序代码五个方面进行综合判断,若是发现是系统硬件、网络设备或者操做系统配置问题,Linux运维人员能够根据状况自主解决;
2)若是发现是程序结构问题,就须要提交给程序架构设计人员;
3)若是发现是程序代码执行问题,就交给开发人员进行代码优化;
4)这样就完成了一个系统性能优化的过程!

4、调优总结

系统性能优化是个涉及面广、繁琐、长久的工做,寻找出现性能问题的根源每每是最难的部分,一旦找到出现问题的缘由,性能问题也就迎刃而解。所以,解决问题的思路变得很是重要。

例如,linux系统下的一个网站系统,用户反映,网站访问速度很慢,有时没法访问。

针对这个问题的解决思路:
1)检测网络,能够经过ping命令检查网站的域名解析是否正常,同时,ping服务器地址的延时是否过大等等,经过这种方式,首先排除网络可能出现的问题;若是网络没有问题;
2)对linux系统的内存使用情况进行检查,由于网站响应速度慢,通常跟内存关联比较大,经过free、vmstat等命令判断内存资源是否紧缺,若是内存资源不存在问题;
3)检查系统CPU的负载情况,能够经过sar、vmstat、top等命令的输出综合判断CPU是否存在过载问题,若是CPU没有问题;
4)检查系统的磁盘I/O是否存在瓶颈,能够经过iostat、vmstat等命令检查磁盘的读写性能,若是磁盘读写也没有问题,linux系统自身的性能问题基本排除,最后要作的是检查程序自己是否存在问题。经过这样的思路,层层检测,步步排查,性能问题就“无处藏身”,查找出现性能问题的环节也就变得很是简单;

——————————本文到此结束,感谢阅读————————————

相关文章
相关标签/搜索