看完本文,你还不知道如何分析和优化Linux性能。来骂我性之类的都是没有意义的,所以掌握linux的性能很重要。当然很多同学可能会觉得这些是运维同学的事情,我不这么认为。无论你是架构师还是渣男,对项目有一个全面的把控是非常重要的基本素质,所以我总结了这篇文章,希望对你有用,如果你觉得我的文笔还不错的话,看完记得点个赞,再看一遍。废话不说,直入正题。影响linux服务器cpu性能的因素CPU是操作系统稳定运行的基础。CPU的速度和性能在很大程度上决定了系统的整体性能。所以CPU越多,主频越高,服务器性能越好。好的。内存大小也是影响Linux性能的重要因素。如果内存太小,系统进程会被阻塞,应用程序会变慢甚至失去响应;如果内存太大,就会浪费资源。磁盘IO磁盘的I/O性能直接影响应用程序的性能。在读写频繁的应用中,如果磁盘I/O性能得不到满足,应用就会卡顿。幸运的是,今天的磁盘使用很多方法来提高I/O性能,例如常见的磁盘RAID技术。网络Linux下的各种应用一般都是基于网络的,所以网络带宽也是影响性能的一个重要因素。低速不稳定的网络会造成网络应用的访问阻塞,而稳定高速的网络带宽,可以保证应用程序在网络上畅通无阻地运行。幸运的是,如今的网络普遍都是千兆带宽或者光纤网络,带宽问题对应用性能的影响正在逐渐减小。常用的Linux系统性能监控命令uptime(系统整体性能评估)这里需要注意:loadaverage的输出值,这三个值的大小一般不能大于系统CPU个数,那么如何查看CPU数量呢?查看系统cpu的信息cat/proc/cpuinfo其中cpucores为cpu的核数也可以直接通过cat/proc/cpuinfo|grep"cores"|uniq[root@test~]#cat/proc/cpuinfo|grep"cores"|uniqcpucores:2cpuperformanceevaluation使用vmstat命令监控cpuvmstat210(每2秒监控一次,监控10次)procsr表示运行和等待cpu时间片的进程数。如果这个值长时间大于cpu数,则需要增加系统cpub来表示等待资源的进程数。CPUus列显示用户进程消耗的CPU时间百分比。当us比较高的时候,说明用户进程消耗了很多CPU时间。如果长时间大于50%,则需要优化程序算法sy栏显示内核进程消耗的cpu时间百分比。当sy的值很高时,说明内核占用cpu资源多。根据经验,us+sy的参考值是80%。如果us+sy大于80%,可能是InsufficientCPUresources。使用sar命令监控系统cpusar命令会增加系统开销但影响不大。yuminstallsysstat安装sar命令sar-u35(u显示采样时间内系统所有CPU的负载情况)%user:用户进程占用CPU的时间百分比%nice:cpu百分比运行正常进程所消耗的%system:系统消耗的CPU时间百分比%iowait:IO等待占用的CPU时间百分比%steal:pagein在相对紧张的内存环境下,对不同页面强制进行steal操作%idle:百分比ofCPUidletime内存性能评估使用free命令监控内存free-m#查看M中的内存使用情况。一般有这样一个经验公式:当应用程序/系统物理内存的可用内存>70%时,它表示系统内存资源非常充足,不影响系统性能。当应用可用内存/系统物理内存小于20%时,说明系统内存资源紧缺,需要增加系统内存。当20%<应用可用内存/系统物理内存<70%时,表示系统内存资源基本可以满足应用需求,系统性能暂时不会受到影响。使用vmstat监控内存swpd以指示切换到内存交换(k)的内存量。如果swpd的值不为0,或者比较大,但是si、so的值长期为0,这种情况不用担心,不会影响性能。Free指示可用物理内存量。Buffer指示缓冲区缓存中的内存量。通常,buffercache表示页面缓存中的内存量。一般作为文件系统缓存,会缓存经常访问的文件。如果缓存值很大,说明缓存的文件比较多。如果IO中的bi比较小,说明文件系统比较高效。si表示磁盘加载到内存中,即内存进入内存交换区的个数so表示内存转移到磁盘中,即内存交换区进入内存的个数。正常情况下sosi的值为0,如果siso的值长期不为0,说明系统内存不足,需要增加内存盘IO性能评估。iostatiostat-d210Blk_reads/s每秒读取的数据块数Blk_wrtn/s每秒写入的数据块数Blk_read读取的所有块数Blk_wrtn写入的所有块数。这些值没有标准。如果它们长期太大,那一定是不正常的。使用sar评估磁盘性能sar-d25await每次设备I/O操作的平均等待时间(毫秒)svctm每次设备I/O操作的平均服务时间(毫秒)%util占秒的百分比I/O操作判断标准一般情况下,svctm应该小于await,svctm的值与磁盘性能、cpu内存等有关,如果svctm的值与await的值相近,说明有几乎没有I/O等待,磁盘性能非常好。如果await的值比svctm高很多,说明I/O队列的等待时间过长。如果太长,系统上的应用程序会变慢。这时,可以通过更换速度更快的硬盘来解决问题。%util越小越好。如果%util接近100%,则表示磁盘产生了过多的I/O请求。I/O系统已经满负荷工作。这时,可以通过优化程序或更换更快的磁盘来解决问题。网络性能评估通过ping命令检查网络的连通性。通过netstat-i组合查看网络接口状态。通过netstat-r组合查看系统路由表信息。使用sar-n组合显示系统的网络运行状态(sar-nDEV53)。常用分析:查看tcp连接数最多的ip:sudonetstat-pant|grep“:22”|awk'{print$5}'|awk-F":"'{print$4}'|sort|uniq-c|sort-nr解释:awk-F":"'{print$4}'意思是把结果的第4列除以:number排序-nr排序,-n按数值排序,-r倒序,从大到小。uniq-c删除重复的行,-c表示添加每行出现的次数。netstat命令是一个非常有用的工具,用于监视TCP/IP网络。它可以显示每个网络接口设备的路由表、实际网络连接和状态信息。netstat-pant参数-p:显示正在使用Socket的程序识别码和程序名;参数-a:显示所有连接中的Socket;参数-n:直接使用ip地址,不经过域名服务器;参数-t:显示TCP传输协议的连接状态。提取访问nginx服务器的前10个IP。猫访问.log|awk'{print$1}'|排序|uniq-c|排序-nr|头-n10
