linux性能调优,从优化思路入手,php等。开源软件最大的理念就是自由和开放。linux作为一个开源平台,最终需要通过这些开源软件的支持,以低成本实现最佳的应用性能。因此,在性能问题上,主要是实现linux操作系统和应用程序的最佳结合。一、性能问题总结系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题。比如在linux上搭建web服务,经常会出现网页打不开或者打开速度慢的情况。遇到这些问题,有些人会抱怨Linux系统不好,其实这些都是表面现象。操作系统在完成一项任务时,与系统自身的设置、网络拓扑、路由设备、路由策略、接入设备、物理线路等诸多方面密切相关。任何一个环节出现问题都会影响整个系统的性能。因此,当Linux应用程序出现问题时,应从应用程序、操作系统、服务器硬件、网络环境等方面进行综合排查,定位出问题的部位,然后重点解决它。在应用程序、操作系统、服务器硬件和网络环境方面,性能受应用程序和操作系统两个方面的影响最大,因为这两个方面的问题不易被发现,隐蔽性强。只要是硬件和网络出现问题,一般都能第一时间定位。下面主要讲解操作系统的性能调优思路,应用程序需要具体处理。下面从影响Linux性能的因素、参与性能分析的人员、系统性能优化工具、系统性能评价标准四个方面介绍优化Linux的总体思路和方法。二、影响Linux性能的因素2.1系统硬件资源1、CPUCPU是操作系统稳定运行的基础。CPU的速度和性能在很大程度上决定了系统的整体性能。所以CPU越多,主频越高,服务器性能相对越好。但事实并非如此。目前大多数CPU只能同时运行一个线程,而超线程处理器可以同时运行多个线程。因此,可以利用处理器的超线程特性来提高系统性能。在Linux下,只有运行SMP内核才支持超线程,但是,安装的CPU越多,从超线程获得的性能提升就越少。此外,Linux内核会将多核处理器识别为多个独立的CPU。比如2个4核CPU在Lnux系统下会被当作8个单核CPU。但是从性能上来说,两个4核CPU和8个单核CPU并不完全等价。根据权威部门得出的测试结论,前者的综合性能比后者低25%至30%。可能存在CPU瓶颈的应用包括db服务器、动态web服务器等,对于这类应用,CPU的配置和性能应该放在主要位置。2、内存内存的大小也是影响Linux性能的一个重要因素。如果内存太小,系统进程会被阻塞,应用程序会变慢甚至失去响应;如果内存太大,会导致资源浪费。Linux系统使用物理内存和虚拟内存两种方式。虚拟内存虽然可以缓解物理内存不足的问题,但是占用过多的虚拟内存,应用程序的性能会明显下降。为保证应用程序的高性能运行,物理内存必须足够大;但是过多的物理内存会造成内存资源的浪费。例如,在32位处理器的Linux操作系统上,超过8GB的物理内存就会被浪费掉。因此,要使用更大的内存,建议安装64位操作系统,并开启Linux的大内存内核支持。由于处理器寻址范围的限制,在32位Linux操作系统上,单个应用进程最多只能使用4GB内存。这样一来,即使系统拥有更大的内存,应用程序也无法“享用”。最好的方法是使用64位处理器并安装64位操作系统。在64位操作系统下,可以满足所有应用程序的内存使用需求,几乎没有限制。可能存在内存性能瓶颈的应用包括NOSQL服务器、数据库服务器、缓存服务器等,对于这类应用,内存大小应该放在主要位置。3.磁盘I/O性能磁盘的I/O性能直接影响应用程序的性能。在读写频繁的应用中,如果磁盘I/O性能得不到满足,应用就会卡顿。幸运的是,今天的磁盘使用很多方法来提高I/O性能,例如常见的磁盘RAID技术。采用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块硬盘。除了通过这种方式将数据分布在多个磁盘上,每个磁盘都有自己的镜像磁盘,提供完全冗余,允许一个磁盘发生故障而不影响数据可用性,并具有快速的读写能力。通过了解各个RAID级别的性能,可以根据应用程序的不同特点选择合适的RAID级别,从而保证应用程序在磁盘方面达到最佳性能。4、网络带宽Linux下的各种应用程序一般都是基于网络的,因此网络带宽也是影响性能的一个重要因素。低速不稳定的网络会造成网络应用的访问阻塞,而稳定高速的网络带宽,可以保证应用在网络上畅通无阻地运行。幸运的是,如今的网络普遍都是千兆带宽或者光纤网络,带宽问题对应用性能的影响正在逐渐减小。2.2操作系统相关资源基于操作系统的性能优化也是多方面的。可以从系统安装、系统内核参数、网络参数、文件系统等几个方面来衡量。下面依次进行简要介绍。1、系统安装优化系统优化可以从操作系统的安装开始。在安装Linux系统时,磁盘的划分和SWAP内存的分配将直接影响到系统日后的运行性能。例如,磁盘分配可以按照应用需求进行:对于写操作频繁、数据安全性要求不高的应用,可以将磁盘做成RAID0;对于数据安全性高,读写没有特殊要求的应用,可将磁盘做成RAID1;对操作要求高,但对写操作没有特殊要求,保证数据安全的应用,可选择RAID5;对于读写要求高、数据安全性要求高的应用,可以选择RAID10/01。这样根据不同的应用需求设置不同的RAID级别,在磁盘底层对系统进行优化。随着内存价格的下降和内存容量的增加,现在虚拟内存SWAP的设置已经不再需要所谓的虚拟内存是物理内存的两倍,但是SWAP的设置也不容忽视。根据经验,如果内存较小(物理内存小于4GB),一般将SWAP交换分区的大小设置为内存大小的两倍;如果物理内存大于8GB但小于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等网络内核参数。索玛康3.文件系统优化文件系统的优化也是系统资源优化的一个重点。Linux下可选的文件系统有ext2、ext3、ReiserFS、ext4、xfs。根据不同的应用,选择不同的文件系统。Linux标准文件系统从VFS开始,然后是ext,然后是ext2。应该说ext2是linux上的标准文件系统,ext3是在ext2的基础上加入日志形成的。从VFS到ext4,其设计思想并没有太多变化,都是沿袭了早期UNIX家族基于superblocks和inode的设计思想。XFS文件系统是一种高级日志文件系统。XFS通过分发磁盘请求、定位数据和维护缓存一致性来提供对文件系统数据的低延迟、高带宽访问。因此,XFS具有极强的可扩展性和健壮性,具有出色的日志记录功能、强大的可扩展性和快速的写入性能等优点。目前服务器端的ext4和xfs是主流的文件系统。如何选择合适的文件系统,需要根据文件系统的特点和业务的需求来决定。2.3.应用软件资源应用程序的优化实际上是整个优化项目的核心。如果一个应用程序出现bug,即使其他各方面都达到了最佳状态,整个应用系统的性能仍然会很低。因此,应用程序的优化是性能优化过程中最重要的部分,这对程序架构师和程序开发人员提出了更高的要求。3.参与系统性能分析的人员3.1.Linux运维人员在性能优化的过程中担负着非常重要的任务。首先,Linux运维人员必须了解和掌握操作系统当前的运行状态,比如系统负载、内存状态、进程状态、CPU负载等信息,这些信息是检测和判断的依据和依据系统性能;其次,Linux运维人员也掌握了系统的硬件信息,比如磁盘I/O、CPU型号、内存大小、网卡带宽等参数信息,然后根据这些综合评估系统资源的使用情况信息;第三,作为一名Linux运维人员,还必须掌握应用程序对系统资源的使用情况。更深入的一点是了解应用程序的运行效率,比如是否存在程序错误、内存溢出等问题。通过监控系统资源,可以发现应用程序是否异常。如果应用确实存在问题,需要立即将问题报告给程序开发人员,以改进或升级程序。性能优化本身就是一个复杂繁琐的过程。Linux运维人员只有了解系统硬件信息、网络信息、操作系统配置信息、应用程序信息,才能有针对性地优化服务器性能。维修人员具有充足的理论知识、丰富的实践经验和分析问题的头脑。3.2.系统架构设计师第二类参与系统性能优化的人员是应用架构设计师。如果Linux运维人员在综合判断后发现性能受到应用程序执行效率的影响,那么程序架构设计者就必须及时介入,深入了解程序的运行状况。首先,系统架构设计者应该跟踪和了解程序的执行效率。如果执行效率有问题,找出问题出在哪里;其次,如果架构设计有问题,则立即优化或改进系统架构。设计更好的应用系统架构。3.3.软件开发人员系统性能优化的最后一个环节涉及到程序开发人员。Linux运维人员或架构设计人员发现程序或结构瓶颈后,程序开发人员必须立即介入并进行相应的程序修改。程序的修改应以程序的执行效率为基准,改进程序的逻辑,有针对性地优化代码。例如,Linux运维人员在系统中发现了一条消耗大量系统资源的SQL语句,抓取执行的SQL语句,发现该SQL语句的执行效率太差,是由于低开发人员编写的代码的执行效率,这就需要将这些信息反馈给开发者。开发人员收到这个问题后,可以有针对性地优化SQL,进而实现程序代码的优化。从以上过程可以看出,系统性能优化的大致过程如下:首先,Linux运维人员检查系统的整体状态,主要从系统硬件、网络设备、操作系统五个方面进行检查配置、应用程序架构和程序代码。综合判断,如果发现是系统硬件、网络设备或者操作系统配置问题,Linux运维人员可以根据情况独立解决;如果发现是程序结构问题,需要提交给程序架构设计者;如果发现是程序代码执行问题,请开发人员进行代码优化。这样就完成了一个系统性能优化过程。4.优化总结系统性能优化是一项涉及面广、繁琐、长期的工作。查找性能问题的根本原因通常是最困难的部分。一旦找到问题的原因,性能问题也就迎刃而解了。因此,解决问题的思路就变得非常重要。比如linux系统下的一个网站系统,用户反映网站访问速度很慢,有时甚至无法访问。针对这个问题,第一步就是检测网络。可以使用ping命令查看网站域名解析是否正常。如果网络没有问题,进入第二步查看Linux系统的内存使用情况。因为网站响应速度慢,一般和内存有关。使用free、vmstat等命令判断内存资源是否不足。如果内存资源没有问题,进入第三步检查系统CPU的负载情况。可以通过sar、vmstat、top等命令的输出综合判断CPU是否过载。如果CPU没有问题,进入第四步检查系统。磁盘I/O是否存在瓶颈,可以通过iostat、vmstat等命令查看磁盘的读写性能。如果磁盘读写没有问题,Linux系统本身的性能问题就基本排除了。最后要做的是检查程序本身是否存在问题。通过这种思路,层层检测,逐层排查,性能问题就会“无处遁形”,找到性能问题发生的环节就会变得非常简单。
