操作系统的负载状态反映了应用程序的资源使用情况,从中可以找到应用程序优化的瓶颈。系统平均负载,指正在运行或不受干扰的平均进程数。是running,表示running状态,占用CPU,或者ready状态,等待CPU调度。请勿打扰,表示阻塞,等待I/O在Linux系统中,一般使用uptime命令查看负载状态(w命令和top命令也可以)1.uptime命令$uptime16:33:56up69days,5:10、1个用户,loadaverage:0.14、0.24、0.29以上信息分析如下:16:33:56:当前时间已到69天,5:10:系统已运行69天,5小时10分钟1个用户:当前有1个用户登录系统loadaverage:0.14、0.24、0.29:系统过去1分钟、5分钟、15分钟的平均负载loadaverage:0.14,0.24,0.29:系统过去1分钟,5分钟内,15分钟内的平均负载分析查看逻辑CPU核心数:$grep'modelname'/proc/cpuinfo|wc-l1运行结果显示有1个逻辑CPU核心。以1个CPU核为例,假设CPU每分钟最多处理100个进程-load=0,无进程要求CPUload=0.5,CPU处理50个进程load=1,CPU处理100个进程,则CPU已经满了,但系统还能流畅运行。load=1.5,CPU处理了100个进程,还有50个进程在等待CPU处理。这时候CPU已经超载了。为了系统运行顺畅,负载值最好不要超过1.0,这样就没有进程需要等待,所有进程都可以第一时间处理。显然,1.0是一个临界值,超过该值系统就不是最优的。通常0.7是一个理想值。此外,负载值的健康状态还与系统中的CPU核数有关。如果CPU核心数为2,则load值的health值应该为2,以此类推。评价系统的负载一般采用15分钟内的平均负载值。2.w命令$w17:47:40up69days,6:24,1user,loadaverage:0.46,0.26,0.25USERTTYFROMLOGIN@IDLEJCPUPCPUWHATlvinkimpts/014.18.144.215:550.00s0.02s0.00sw第1行:与uptimeone相同。在第2行下方,是当前登录用户的列表。3.Top命令$toptop-17:51:23up69days,6:28,1user,loadaverage:0.31,0.30,0.26Tasks:99total,1running,98sleeping,0stopped,0zombieCpu(s):2.3%us,0.2%sy,0.0%ni,97.4%id,0.0%wa,0.0%hi,0.0%si,0.0%stMem:1922244ktotal,1737480kused,184764kfree,208576kbuffersSwap:0ktotal,0kused,0k免费,466732k缓存PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND1root200192321004708S0.00.10:01.17init2root200000S0.00.00:00dread.01kthread.01.Line1:与uptimeone相同。第2行:进程号信息。Tasks:99total:总共99个进程1running:1个进程占用CPU98sleeping:98个休眠进程0stopped:0个停止进程0zombie:0个僵尸进程Line3:CPUusageus(user):CPU占用率non-niceuserprocessessy(system):内核和内核进程占用的CPU比例ni(nice):用户进程空间中优先级改变的进程占用的CPU比例id(idle):CPU空闲比例,如果系统是slow且这个值高,说明系统慢的原因不是CPU负载高wa(iowait):CPU等待I/O操作的时间比例。用id判断hi(HardwareIRQ):CPU处理硬件中断时间的比例si(SoftwareInterrupts):CPU处理软件中断的比例st(steal):消耗的时间,被虚拟机中其他任务占用的CPU时间的比例需要注意一些情况:用户进程us占比高,I/O操作wa低:说明系统慢是因为进程占用大量CPU,通常伴随着低idle比id,说明CPU空闲的时间很少。低I/O操作wa和高空闲率id:可以排除CPU资源瓶颈。I/Ooperationwahigh:表示I/O占用CPU时间较多,需要查看swap空间的使用情况。交换空间位于磁盘上,性能远低于内存。当内存耗尽,使用swap空间时,会给性能带来严重影响,所以对于性能要求高的服务器,一般建议关闭swap空间。另一方面,如果内存充足但wa很高,则需要检查是哪个进程占用了很多I/O资源。更多的负载情况可以在实践中灵活判断。4、iostat命令iostat命令可以查看系统分区的IO使用情况$iostatLinux2.6.32-573.22.1.el6.x86_64(sgs02)01/20/2017_x86_64_(1CPU)avg-cpu:%user%nice%system%iowait%steal%idle2.290.000.250.040.0097.41设备:tpsBlk_read/sBlk_wrtn/sBlk_readBlk_wrtnvda1.153.4821.8821016084131997520一些值得注意的IO指标:每秒设备/Ops传输:设备/Ops传输每秒读取多少块,查看块大小,请参考命令tune2fsBlk_wrtn/s:每秒写入多少块Blk_read:总共读取多少块–Blk_wrtn:总共写入多少块top命令,但它会显示每个进程的I/O状态,这对于定位I/O操作繁重的进程非常有用。#iotopTotal磁盘读取:0.00B/s|TotalDISKWRITE:774.52K/sTIDPRIOUSERDISKREADDISKWRITESWAPINIO>COMMAND272be/3root0.00B/s0.00B/s0.00%4.86%[jbd2/vda1-8]9072be/4mysql0.00B/s268.71K/s0.00%0.00%mysqld5058be/4lvinkim0.00B/s3.95K/s0.00%0.00%php-fpm:池www1be/4root0.00B/s0.00B/s0.00%0.00%init可以看到不同任务的读写强度。6、sysstat工具在检测或了解历史高负载状态时,往往需要回放历史监控数据。这时候sar命令就派上用场了。sar命令同样来自sysstat工具包,可以记录系统的CPU负载、I/O状态和内存使用记录,方便历史数据的回放。sysstat的配置文件在/etc/sysconfig/sysstat文件中,历史日志存放位置为/var/log/sa。每10分钟记录一次统计信息,每天23:59分统计文件。在/etc/cron.d/sysstat文件中配置。7、sar命令使用sar命令查看当天的CPU使用情况:$sarLinux2.6.32-431.23.3.el6.x86_64(szs01)01/20/2017_x86_64_(1CPU)10:50:01AMCPU%user%nice%system%iowait%steal%idle11:00:01AMall0.450.000.220.400.0098.93Average:all0.450.000.220.400.0098.93使用sar命令查看当天的内存使用情况:$sar-rLinux2.6.32-431el.63.3x86_64(szs01)01/20/2017_x86_64_(1CPU)10:50:01AMkbmemfreekbmemused%memusedkbbufferskbcachedkbcommit%commit11:00:01AM4129245918091.7544072164620822392164.32Average:4129245918091.7544072164620822392164.32使用sar命令查看当天的IO统计:$sar-bLinux2.6.32-431.23.3.el6.x86_64(szs01)01/20/2017_x16_)641_(CPU):50:01AMtpsrtpswtpsbwrtn/s11:00:01AM3.312.141.1737.1816.84平均:3.312.141.1737.1816.84更多sar用法请mansar
