性能优化的核心是找出系统的瓶颈点,首先可以从系统层面分析!
系统运行一段时间响应变慢了,首先得定位大致的问题出在哪里?是CPU瓶颈、IO瓶颈、内存瓶颈还是程序导致的系统问题;
对于系统层面的命令工具有很多,统计CPU、内存、磁盘、队列、io、 流量等等,最为常用的几个工具:
top, free, iostat, netstat, vmstat, dstat, iotop, iftop
首先使用top命令查询系统响应
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了%id:空闲CPU时间百分比,如果这个值过低,表明系统CPU存在瓶颈;%wa:等待I/O的CPU时间百分比,如果这个值过高,表明IO存在瓶颈;其次使用iostat命令进行IO瓶颈分析。
通过iostat方便查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况, 负载信息。
查看设备使用率和响应时间
命令:iostat如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
命令:iostat -d -x -m 2 5如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。
最后使用sar全方位分析
sar是System Activity Reporter(系统活动情况报告)的缩写。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar是目前Linux上最为全面的系统性能分析工具之一。
sar是查看操作系统报告指标的各种工具中,最为普遍和方便的;它有两种用法;
追溯过去的统计数据(默认)周期性地查看当前数据追溯过去的统计数据:sar -f >>sar.log
查看CPU使用率: sar -u -f >> bb.log
查看平均负载:sar -q
runq-sz:运行队列的长度(等待运行的进程数)plist-sz:进程列表中进程(processes)和线程(threads)的数量ldavg-1:最后1分钟的系统平均负载 ldavg-5:过去5分钟的系统平均负载ldavg-15:过去15分钟的系统平均负载查看内存使用状况:sar -r
kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.%memused:物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比.kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.查看页面交换发生状况:sar -W
页面发生交换时,服务器的吞吐量会大幅下降;服务器状况不良时,如果怀疑因为内存不足而导致了页面交换的发生,可以使用这个命令来确认是否发生了大量的交换;
要判断系统瓶颈问题,有时需要几个 sar 命令选项结合起来;
怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看怀疑内存存在瓶颈,可用sar -B、sar -r 和 sar -W 等来查看怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看总结
如果实时监测查看系统状况,以上工具都是不错的选择;
如果长时间监控,则需要借助其他工具进行了,如常用的Nmon,easyNmon, netdata等!