工欲善其事,必先利其器,要对系统进行调优,知道了思路和方法,还需要知道调优工具,接下来重点给大家介绍一下,对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命令完成。