工欲善其事,必先利其器,要对系统进行调优,知道了思路和方法,还需要知道调优工具,接下来重点给大家介绍一下,对linux系统进行调优时需要用到的一些工具。对于这些工具的熟练掌握,有助于我们能够迅速了解Linux的运行状态,最终给出合理、稳妥的系统调优方案。
这里我们从linux系统的CPU、内存、磁盘、网络四个方面展开介绍,分别说明下对这四个方面进行性能评估的专业工具。
一、CPU性能评估工具
对CPU性能评估,常用的工具有vmstat、uptime、mpstat等,下面分别介绍如下。
1.vmstat命令
vmstat是VirtualMeomoryStatistics(虚拟内存统计)的缩写,很多linux发行版本都默认安装了此命令工具,利用vmstat命令可以对操作系统的CPU活动、内存信息、进程状态进行监视,不足之处是无法对某个进程进行深入分析。
vmstat使用语法如下:
vmstat[-V][-n][delay[count]]
各个选项及参数含义如下:
例如:
vmstat3表示每3秒钟更新一次输出信息,循环输出,按ctrl+c停止输出。vmstat35
表示每3秒更新一次输出信息,统计5次后停止输出。
下面看一个具体的输出案例,这里重点看CPU的输出状态信息,输出结果如下:

对上面每项的输出解释如下:
procs
memory
swap
IO项显示磁盘读写状况
system显示采集间隔内发生的中断数
综上所述,在对CPU的评估中,需要重点注意的是procs项r列的值和CPU项中us、sy和id列的值。
2、mpstat命令
mpstat是MultiprocessorStatistics的缩写,是一个CPU实时状态监控工具。它与vmstat命令类似,mpstat是通过/proc/stat里面的状态信息来进行统计的。使用mpstat最大的好处是,它可以查看多核CPU中每个计算核的统计数据,而vmstat只能查看系统整体的CPU情况。
mpstat的语法如下:
mpstat[-P{cpu|ALL}][internal[count]]其中,各参数含义如下:
下面看一个输出例子,如下图所示:

这是直接执行mpstat,然后指定输出间隔和输出次数,这种情况下统计的是系统所有CPU核的状态数据,mpstat输出中每列的含义如下:
继续看下面一个例子:

这个例子是统计系统中第三个核的CPU状态信息,其中,“-P2”表示第三个CPU核,类似“-P1”表示第二个CPU核,“-PALL”表示所有CPU。
在实际的使用过程中,如果要显示每个处理器的统计,可以使用mpstat,因为某些不使用多线程体系结构的应用程序,可能会运行在一个多处理器机器上,而不使用所有处理器。从而导致一个CPU过载,而其他CPU却很空闲。此时通过mpstat可以轻松诊断这些类型的问题。
其实,vmstat中所有关于CPU的统计都适合mpstat,具体调优过程中,可以通过两个命令的结合,来综合判断CPU是否有性能问题。例如,当通过两个命令都发现较低的%idle数字时,那么可以判断应该是CPU不足的问题。而当看到较高的%iowait数字时,就应该马上知道在当前负载下I/O子系统出现了某些问题。
二、内存性能评估工具
对内存性能评估,常用的工具有free、smem等,下面分别介绍如下。
1、内存监控命令free
free是监控linux内存使用状况最常用的指令,看下面的一个输出:

free命令输出中显示了系统的各种内存状态,具体包括物理内存和swap,物理内存中又分为已使用内存(used)、空闲内存(free)、共享内存(shared)、系统缓存(buff/cache)和目前可用内存(available)。
上图是在版本系统中的free命令输出,如果你在以及之前版本下的输出可能会有不同,不过,版本以后,free命令对内存状态的输出更加人性化,我们可以直接通过查看available列的值,即可知道目前系统还有多少可用的物理内存。
在Mem这行的输出中,其实是有个等式关系的:
Used+free+buff/cache=total
一般有这样一个经验公式:available内存70%时,表示系统内存资源非常充足,不影响系统性能,available内存20%时,表示系统内存资源紧缺,需要增加系统内存,20%available内存70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。
2、内存状态监测工具smem命令
Smem是一款命令行下的内存使用情况报告工具,它能够给用户提供Linux系统下的内存使用的多种报告。和其它传统的内存报告工具不同的是,它有个独特的功能,可以报告PSS。
Linux使用到了虚拟内存(virtualmemory),因此要准确的计算一个进程实际使用的物理内存就不是那么简单。只知道进程的虚拟内存大小也并没有太大的用处,因为还是无法获取到实际分配的物理内存大小。
下面介绍几个跟内存相关的内存选项RSS、PSS和USS。
RSS(Residentsetsize),使用top命令可以查询到,是最常用的内存指标,表示进程占用的物理内存大小。但是,将各进程的RSS值相加,通常会超出整个系统的内存消耗,这是因为RSS中包含了各进程间共享的内存。
PSS(Proportionalsetsize)所有使用某共享库的程序均分该共享库占用的内存时。显然所有进程的PSS之和就是系统的内存使用量。它会更准确一些,它将共享内存的大小进行平均后,再分摊到各进程上去。
USS(Uniquesetsize)进程独自占用的内存,它只计算了进程独自占用的内存大小,不包含任何共享的部分。
了解了内存相关概念后,再来看看如何安装和使用这个工具,要安装smem这个工具,需要在系统上安装EPEL软件源,安装过程如下:
[root@localhost~]yuminstallsmempython-matplotlibpython-tk
这样smem就安装到系统中了,接着看看怎么使用smem。要显示系统中每
个进程的占用内存状态,可执行如下图指令:

上图中,“-k”参数用来显示内存单位,“-s”是排序,uss是对uss列进行排序,这样,就输出了系统中所有进行占用的内存大小,非常清晰明白。
smem还支持以百分比形式显示每个进程占用系统内存的比率,如下图所示:

其中,“-p”表示以百分比的形式报告内存使用情况,这样每个进程占用的系统内存比重一目了然。
smem还可以显示系统中每一个用户的内存使用情况,如下图所示:

其中,“-u”表示显示用户占用内存信息。
最后,smem还支持查看某个进程占用内存大小,例如:

通过这种方式,我们可以马上知道每个进程占用了多少内存资源,以及占用是否合理,通过smem,对每个进程占用的内存资源可以很轻松的获取。绝对是运维必备工具。
三、磁盘性能评估工具
对磁盘性能评估,常用的工具有iotop.
1、磁盘IO监测工具iotop命令
iotop是一个用来监视磁盘I/O使用状况的top类工具,可监测到哪一个程序使用的磁盘IO的实时信息。这对于线上业务系统来说非常有用。要使用这个工具,需要简单安装一下,在版本下,直接执行yum在线安装即可:
[root@localhost~]只显示进程,默认为显示所有的线程?-k,--kilobytes在每一行前添加一个当前的时间
另外,iotop还支持交互模式,在交互模式下,可以通过键盘按键进行排序、切换等操作。例如:
?o键是只显示当前有IO输出的进程
?左右箭头改变排序方式,默认是按IO排序
?p键,可进行线程、进程切换。
是不是非常方便和强大,有了此工具,再也不用担心找不到消耗IO资源多的进程了。如果发现磁盘IO很大,那么通过这个工具,可以马上找到消耗磁盘IO的元凶.
四、网络性能评估工具
对网络性能评估,常用的工具有ping、mtr等,下面分别介绍如下。
1、ping检查网络延时性能
ping命令很简单,但是功能强大,如果发现网络反应缓慢,或者连接中断,可以通过ping来测试网络的连通情况,请看下面的一个输出:
在这个输出中,time值显示了两台主机之间的网络延时情况,如果此值很大,则表示网络的延时很大,单位为毫秒。在这个输出的最后,是对上面输出信息的一个总结,packetloss表示网络的丢包率,此值越小,表示网络的质量越高。此例发送了10个包,只接收到了6个,因此,有40%的丢包率,网络延时平均在38.443ms。
2、mtr路由跟踪命令
一般在判断网络连通性用ping和traceroute工具,ping的话可以来判断丢包率和延时,traceroute可以用来跟踪路由,但还有一个更好的网络连通性判断工具,它可以结合pingnslookuptraceroute来判断网络的相关特性,这个命令就是mtr。
使用mtr非常简单,只需要mtr后面跟上IP地址或者域名即可,例如:
输出如下图所示:
其中:
Mtr的优势是可以动态显示到某个主机的路由状态,在路由过程中每一条的延时和丢包都可以非常清晰的展示出来,这对于我们排查网络故障和性能问题非常有用。
五、系统性能综合监控工具
有几个不错的工具可以用来全面监控Linux系统性能,分别是top、htop,下面分别介绍如下。
1、系统实时状态监控工具top
top命令提供了实时的对系统处理器状态的监控,它能够实时显示系统中各个进程的资源占用状况。该命令可以按照对CPU的使用、内存使用和执行时间对系统任务进程进行排序显示,同时top命令还可以通过交互式命令进行设定显示。
下面通过一个具体的例子,来解读top的输出内容,如下图所示:
从图中可以看到,top的输出可以分为统计信息区和进程信息区两个部分,即前5行显示为统计信息区,下面为进程信息区,我们分别进行介绍。
(1)统计信息区
第1行为任务队列信息,含义如下:
第2行和第3行分别为进程和CPU信息,具体含义如下:
最后两行输出的是内存信息,具体含义如下:
(2)进程信息区
进程信息区显示了每个进程的运行状态,我们先来看一下每列输出的含义。
通过使用top命令,可以对系统整体运行状态有一个清晰的了解,结合上面介绍的CPU、磁盘、内存等工具,对于判断系统性能问题,完全可以给出一个正确的结论。
2、htop命令
htop是Linux系统中的一个互动的进程查看器,与Linux传统的top相比,htop更加人性化,它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。
Htop项目地址是,要使用htop,既可以通过源码包编译安装,也可以配置好yum源后网络下载安装,推荐yum方式安装,但是要下载一个epel源,因为htop包含在epel源中。安装很简单,这里以版本为例,命令如下:
[root@localhost~]yuminstall-yhtop安装完成后,命令行中直接敲击htop命令,即可进入htop的界面。
htop命令安装好以后,直接输入htop,即可打开如下界面:
从图中可以看出,htop命令总共分了5个展示区,分别是cpu展示区、内存展示区、整体状态区、进程状态区和管理控制台。
接着是内存展示区,主要是物理内存和swap的状态,同样也使用了不同颜色来区分是使用情况,其中Mem项中,绿色的表示已经使用内存情况,蓝色的表示用于缓冲的内存使用情况,黄色的表示用于缓存的内存使用情况。从图中可知,此服务器有72Gb内存。而Swap项中,主要显示交换分区使用情况,如果使用过大,那么可能需要增加内存了。
然后看整体状态区,其中,Tasks项显示的是进程总数,当前运行的进程数、Loadaverage项展示的是系统1分钟,5分钟,10分钟的平均负载情况、Uptime为系统运行了多长时间。
最后看下进行状态区和管理控制台,进程状态区展示当前系统中的所有进程,默认有12列组成,每列代表的含义如下:
在上图中,我们定制了第一列TGID,此列展示的是进程对应的线程信息,我们还可以进行更多的定制,可以通过最下面的进程控制台,有F1~F10共10个功能键,依次定制需要的展示功能。
htop工具可以整体观察系统状态和资源,也可以对某个进程进行细致的查看,例如进程中的线程状态,进程占用的内存大小、优先级调整等,都可以通过htop命令完成。



