在日常的性能测试中,我们需要掌握一些常用的策略,并且需要了解和掌握查看服务器性能的命令,以便对服务器性能进行故障排除和诊断。今天给大家分享一下如何在压测的时候,通过分段排查的方式,快速使用命令诊断服务器的性能。Linux服务器分段排查的方法是按照CPU、内存、磁盘IO、网络的顺序依次排除。参考流程图如下:分析步骤:Step1使用top查看系统概况:注意cpu(sys+us)使用率。如果该值持续大于80%,可以观察进程视图,看看非核心应用进程是否占用了大量CPU资源。如果能够排除非核心应用进程的影响,则基本可以确定系统面临cpu资源不足。此时结合vmstat监控,可以观察到proc列的r值应该比较大;同理,当cpu使用率很低,但正在运行的进程队列(r值)很大时,表面c??pu被阻塞。注意%idle(cpu空闲时间的百分比)。如果该值很高但系统响应很慢,可能是CPU在等待分配内存。这时候要注意内存的使用情况(见step3);如果空闲时间%idle持续为0,系统时间(cpusy)是用户时间(cpuus)的两倍,则系统面临CPU资源短缺。注意%wait(cpu等待IO的时间百分比),如果cpu资源没有耗尽,如果这个值持续偏高,说明系统存储IO可能存在瓶颈;问题的原因可能是:(1)系统存在应用问题(应用本身有很多IO请求);(2)物理内存不足;(3)低效的I/O子系统配置;这时候应该先检查是否是应用程序的问题,再检查系统内存使用情况。如果交换页过多,则确定是物理内存不足引起的DiskIO问题(见step3);如果不是,检查系统盘,使用iostat验证是应用IO过多导致的现象(见step4)。Step2结合vmstat和sar监控cpu:主要关注4个cpu列和2个procs(内核线程)列r:等待CPU资源的进程数。这个数据比平均负载更能反映CPU负载,并且该数据不包括等待IO的进程。如果这个值大于系统的逻辑CPU核数,说明系统运行缓慢,大部分进程都在等待CPU,那么系统的CPU资源就饱和了。us,sy,id,wa,st:这些代表CPU时间的消耗,分别代表用户时间(user)、系统(kernel)时间(sys)、空闲时间(idle)、IO等待时间(wait)和Stolen时间(被盗,一般被其他虚拟机消费)。上面提到的CPU时间可以让我们快速了解CPU是否繁忙。一般情况下,如果用户时间和系统时间之和很大,说明CPU正在忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能是磁盘IO。sar–PALL:分别查询cpus,统计每个cpu的使用情况,查看多个cpus的负载是否均衡。通过前两步,可以基本判断出cpu是否存在瓶颈:CPU使用率使得应用程序能够更高效地使用CPU,同时可以考虑增加更多的CPU;如果CPU不是瓶颈,重点检查系统内存。Step3使用vmstat查看内存使用情况:每一行都会输出一些系统核心指标,可以让我们更详细的了解系统状态。下面参数1表示每秒输出一次统计信息,参数2表示总共输出两次统计信息。表头提示各列含义,这里只介绍一些与内存性能调优相关的列:Memoryareaswpd:表示切换到内存交换区的内存大小,即虚拟内存已用大小(单位为KB).如果大于0,说明你的机器物理内存不足。如果不是程序内存泄漏的原因,那么就应该升级内存或者将耗内存的任务迁移到其他机器上。free:表示当前空闲的物理内存(以千字节为单位)。如果剩余内存不足,也会导致系统性能出现问题。buff:表示buffers缓存内存的大小,即缓冲区大小。通常,读取和写入块设备需要缓冲。Cache:表示页面缓存的内存大小,即缓存大小。一般用作缓冲的文件系统,经常访问的文件会被缓存起来。如果缓存值很大,说明缓存的文件很多。如果此时io中的bi比较小,说明文件系统的效率比较好。Swapareasi:表示有磁盘调入内存,即内存进入内存交换区的内存大小;通俗地说,就是每秒从磁盘读取的虚拟内存的大小。如果这个值大于0,说明物理内存不够或者内存泄露了,找到耗内存的进程解决。so:表示从内存进入磁盘的内存大小,即从内存交换区进入内存的内存大小。注意:一般情况下si和so的值都是0,如果si和so的值长期不为0,说明系统内存不足,需要增加系统内存.Step4使用iostat查看磁盘IOtps:设备每秒传输次数(Indicatethenumberoftransferspersecondthatisissuedtothedevice.)。“传输”是指“I/O请求”。多个逻辑请求可以组合成“一个I/O请求”。“一次传输”请求的大小未知。kB_read/s:每秒从设备(驱动表示)读取的数据量;kB_wrtn/s:每秒写入设备(驱动表示)的数据量;kB_read:读取的数据总量;kB_wrtn:写入的数据总量;这些单位都是Kilobytes,跟%iowait有关,如果不存在CPU和内存限制,%iowait长期大于25%,就认为IO有瓶颈。收集磁盘IO数据吞吐量(iostat-d-k),粗略估计系统数据吞吐量是否与应用负载匹配,查看是否有大量与业务无关的IO操作。Step5使用sar-d查看磁盘读写情况:其中:tps:物理磁盘每秒的I/O数。多个逻辑请求会合并为一个I/O磁盘请求,一次传输的大小是不确定的。rd_sec/s:每秒读取的扇区数。wr_sec/s:每秒写入的扇区数。avgrq-sz:每次设备I/O操作的平均数据大小(扇区)。avgqu-sz:磁盘请求队列的平均长度。await:每次请求从请求磁盘操作到系统完成处理的平均消耗时间,包括请求队列等待时间,单位毫秒(1秒=1000毫秒)。svctm:系统处理每个请求的平均时间,不包括在请求队列中花费的时间。%util:I/O请求对CPU的百分比。比率越大,它越饱和。一般情况下avserv应该小于avwait的值。如果avserv的值与avwait非常接近,说明几乎没有I/O等待,磁盘性能非常好;如果avwait的值远高于avserv的值,说明I/O队列等待时间过长,系统上运行的应用程序会变慢,磁盘IO会成为系统瓶颈。Step6使用netstat查看网络:1.通过ping命令检测网络的连通性2.使用netstat–nltp组合检测网络接口状态-u(udp)只显示udp相关选项-l只列出Listen(监听)Status-n中的服务拒绝显示别名,能显示数字的都转为数字。-t(tcp)只显示tcp相关的选项-p显示建立相关链接的程序名,3.通过netstat-r组合检测系统路由表信息汇总:cpu瓶颈常见症状:响应时间很慢cpuidletimeiszero用户cpu时间使用过多系统cpu时间使用过多长时间运行的进程队列cpu调整方法:平衡系统负载-在不同时期运行进程,以更有效地利用一天24小时。使用nice或renice来优化调度程序-您可以为正在运行的进程分配不同的优先级以避免占用大量cpu资源。增加资源——增加更多的cpu内存瓶颈的常见症状:高分页率高交换空间使用率进程进入非活动状态;交换区中所有磁盘的高活动性;全局系统CPU利用率高;Insufficientmemoryerror内存调整方法:保证swap空间分配合理(分配足够的swap空间,每个swap空间大小相同,每个swap空间分配在不同的硬盘上)参数调整,将内存参数阈值调整为增加内存资源IO瓶颈的常见症状:磁盘利用率太高磁盘等待队列太长等待磁盘I/O的时间百分比太高物理I/O率太高缓存故障率太低运行进程队列,但CPUidleIO调优方法:一般来说,%iowait高说明系统至少有一个应用问题,内存不足问题,或者I/O子系统配置效率低下;应检查应用重IO请求是否正常;检查IO问题是否是内存交换空间频繁分页引起的;检查磁盘配置是否合理对于磁盘IO本身的优化,虽然有一些I/O优化参数的虚拟内存等价物,但是提高磁盘I/O性能最好的方法还是正确配置Linux系统,而不仅仅是优化相关参数。***有许多工具可用于解决Linux服务器性能问题。上面介绍的一些命令可以帮助我们快速定位问题。以后在实际工作中,如果掌握了更多的shell命令,可以根据工作需要编写一些脚本来辅助自己的测试工作,比如数据监控、数据采集、数据处理等,然后再结合配合其他工具,可以形成一套解决方案。注:本文仅供学习交流,涉及的部分参数可能与实际项目不同。仅供以后Linux服务器系统性能分析参考。
