龙空技术网

超好用的Linux系统性能调优工具使用汇总

互联网蚂蚁哥 398

前言:

当前咱们对“centos72优化脚本”可能比较重视,朋友们都想要剖析一些“centos72优化脚本”的相关知识。那么小编在网摘上收集了一些对于“centos72优化脚本””的相关资讯,希望看官们能喜欢,姐妹们快快来了解一下吧!

工欲善其事,必先利其器,要对系统进行调优,知道了思路和方法,还需要知道调优工具,接下来重点给大家介绍一下,对linux系统进行调优时需要用到的一些工具。对于这些工具的熟练掌握,有助于我们能够迅速了解Linux的运行状态,最终给出合理、稳妥的系统调优方案。

这里我们从linux系统的CPU、内存、磁盘、网络四个方面展开介绍,分别说明下对这四个方面进行性能评估的专业工具。

一、CPU性能评估工具

对CPU性能评估,常用的工具有vmstat、uptime、mpstat等,下面分别介绍如下。

1.vmstat命令

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,很多linux发行版本都默认安装了此命令工具,利用vmstat命令可以对操作系统的CPU活动、内存信息、进程状态进行监视,不足之处是无法对某个进程进行深入分析。

vmstat使用语法如下:

 vmstat [-V] [-n] [delay [count]]

各个选项及参数含义如下:

? -V:表示打印出版本信息,是可选参数。

? -n:表示在周期性循环输出时,输出的头部信息仅显示一次。

? delay:表示两次输出之间的间隔时间。

? count:表示按照“delay”指定的时间间隔统计的次数。默认为1。

例如:

vmstat 3表示每3秒钟更新一次输出信息,循环输出,按ctrl+c停止输出。vmstat 3 5

表示每3秒更新一次输出信息,统计5次后停止输出。

下面看一个具体的输出案例,这里重点看CPU的输出状态信息,输出结果如下:

对上面每项的输出解释如下:

procs

? r列表示运行和等待cpu时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。

? b列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

memory

? swpd列表示切换到内存交换区的内存数量(以k为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况下一般不用担心,不会影响系统性能。

? free列表示当前空闲的物理内存数量(以k为单位)

? buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。

? cache列表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好。

swap

? si列表示由磁盘调入内存,也就是内存进入内存交换区的数量。

? so列表示由内存调入磁盘,也就是内存交换区进入内存的数量。

一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足。需要增加系统内存。

IO项显示磁盘读写状况

? Bi列表示从块设备读入数据的总量(即读磁盘)(每秒kb)。

? Bo列表示写入到块设备的数据总量(即写磁盘)(每秒kb)

这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大,则表示系统磁盘IO有问题,应该考虑提高磁盘的读写性能。

system 显示采集间隔内发生的中断数

? in列表示在某一时间间隔中观测到的每秒设备中断数。

? cs列表示每秒产生的上下文切换次数。

上面这2个值越大,会看到由内核消耗的CPU时间会越多。

CPU项显示了CPU的使用状态,此列是我们关注的重点。

? us列显示了用户进程消耗的CPU 时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。

? sy列显示了内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。

根据经验,us+sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU资源不足。

? id 列显示了CPU处在空闲状态的时间百分比。

? wa列显示了IO等待所占用的CPU时间百分比。wa值越高,说明IO等待越严重,根据经验,wa的参考值为20%,如果wa超过20%,说明IO等待严重,引起IO等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘控制器的带宽瓶颈造成的(主要是块操作)。

综上所述,在对CPU的评估中,需要重点注意的是procs项r列的值和CPU项中us、sy和id列的值。

2、mpstat命令

mpstat是 Multiprocessor Statistics的缩写,是一个CPU实时状态监控工具。它与vmstat命令类似,mpstat是通过/proc/stat里面的状态信息来进行统计的。使用mpstat最大的好处是,它可以查看多核CPU中每个计算核的统计数据,而vmstat只能查看系统整体的CPU 情况。

mpstat的语法如下:

mpstat [-P {cpu|ALL}] [internal [count]]

其中,各参数含义如下:

? -P {cpu l ALL}:表示监控哪个CPU, cpu在[0,cpu个数-1]中取值

? internal: 相邻的两次采样的间隔时间

? count:采样的次数,count只能和delay一起使用

下面看一个输出例子,如下图所示:

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

? CPU: 处理器ID,多处理器时,会显示每个处理器ID号。

? %usr: 显示了用户进程消耗的CPU 时间百分比。

? %nice: 显示了运行正常进程所消耗的CPU 时间百分比。

? %sys: 显示了系统进程消耗的CPU时间百分比。

? %iowait:显示了IO等待所占用的CPU时间百分比

? %irq: 显示了硬中断时间占用的CPU时间百分比

? %soft: 显示了软中断时间占用的CPU时间百分比

? %steal:显示了在内存相对紧张的环境下page in强制对不同的页面进行的steal操作。

? %guest:显示运行虚拟处理器时CPU花费时间的百分比

? %idle:显示了CPU处在空闲状态的时间百分比。

继续看下面一个例子:

这个例子是统计系统中第三个核的CPU状态信息,其中,“-P 2” 表示第三个CPU核,类似“-P 1”表示第二个CPU核,“-P ALL”表示所有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)。

上图是在centos7.x版本系统中的free命令输出,如果你在centos6.x以及之前版本下的输出可能会有不同,不过,centos7.x版本以后,free命令对内存状态的输出更加人性化,我们可以直接通过查看available列的值,即可知道目前系统还有多少可用的物理内存。

在Mem这行的输出中,其实是有个等式关系的:

Used+free+buff/cache=total

可见,Linux是最大限度的将物理内存映射到缓存,待需要使用内存的时候,可以以最快的速度获取内存并使用,在available和buff/cache两列值的对比,可以看出,available是在buff/cache基础上减去了shared以及buffer内存损耗剩下的内存资源,这部分内存资源可以留给应用程序使用。所以查看内存是否充足,只需要关注available一列即可。

一般有这样一个经验公式:available内存 >70%时,表示系统内存资源非常充足,不影响系统性能,available内存< 20%时,表示系统内存资源紧缺,需要增加系统内存,20%< available内存 < 70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。

2、内存状态监测工具smem命令

Smem 是一款命令行下的内存使用情况报告工具,它能够给用户提供 Linux 系统下的内存使用的多种报告。和其它传统的内存报告工具不同的是,它有个独特的功能,可以报告 PSS。

Linux使用到了虚拟内存(virtual memory),因此要准确的计算一个进程实际使用的物理内存就不是那么简单。只知道进程的虚拟内存大小也并没有太大的用处,因为还是无法获取到实际分配的物理内存大小。

下面介绍几个跟内存相关的内存选项RSS、PSS和USS。

RSS(Resident set size),使用top命令可以查询到,是最常用的内存指标,表示进程占用的物理内存大小。但是,将各进程的RSS值相加,通常会超出整个系统的内存消耗,这是因为RSS中包含了各进程间共享的内存。

PSS(Proportional set size)所有使用某共享库的程序均分该共享库占用的内存时。显然所有进程的PSS之和就是系统的内存使用量。它会更准确一些,它将共享内存的大小进行平均后,再分摊到各进程上去。

USS(Unique set size )进程独自占用的内存,它只计算了进程独自占用的内存大小,不包含任何共享的部分。

了解了内存相关概念后,再来看看如何安装和使用这个工具,要安装smem这个工具,需要在系统上安装EPEL软件源,安装过程如下:

[root@localhost ~]# yum install epel-release[root@localhost ~]# yum install smem python-matplotlib python-tk

这样smem就安装到系统中了,接着看看怎么使用smem。要显示系统中每

个进程的占用内存状态,可执行如下图指令:

上图中,“-k”参数用来显示内存单位,“-s”是排序,uss是对uss列进行排序,这样,就输出了系统中所有进行占用的内存大小,非常清晰明白。

smem还支持以百分比形式显示每个进程占用系统内存的比率,如下图所示:

其中,“-p”表示以百分比的形式报告内存使用情况,这样每个进程占用的系统内存比重一目了然。

smem还可以显示系统中每一个用户的内存使用情况,如下图所示:

其中,“-u”表示显示用户占用内存信息。

最后,smem还支持查看某个进程占用内存大小,例如:

通过这种方式,我们可以马上知道每个进程占用了多少内存资源,以及占用是否合理,通过smem,对每个进程占用的内存资源可以很轻松的获取。绝对是运维必备工具。

三、磁盘性能评估工具

对磁盘性能评估,常用的工具有iotop.

1、磁盘IO监测工具iotop命令

iotop是一个用来监视磁盘I/O使用状况的top类工具,可监测到哪一个程序使用的磁盘IO的实时信息。这对于线上业务系统来说非常有用。要使用这个工具,需要简单安装一下,在centos7.x版本下,直接执行yum在线安装即可:

[root@localhost ~]# yum -y install iotop

安装完毕后,直接执行命令iotop即可展现系统中所有进行的IO信息。如下图所示:

从图中可以看出,当前有一个PID为25696的scp进程正在执行写操作,可以看到写磁盘的速率以及IO占比,同时还可以看到整个系统的磁盘读、写状态。

iotop还可以跟一些选项,用来定制输出结果,常用的选项有:

? -p 指定进程ID,显示该进程的IO情况

? -u 指定用户名,显示该用户所有的进程IO情况

? -P, --processes #只显示进程,默认为显示所有的线程

? -k, --kilobytes #以千字节显示

? -t, --time #在每一行前添加一个当前的时间

另外,iotop还支持交互模式,在交互模式下,可以通过键盘按键进行排序、切换等操作。例如:

? o键是只显示当前有IO输出的进程

? 左右箭头改变排序方式,默认是按IO排序

? p键,可进行线程、进程切换。

是不是非常方便和强大,有了此工具,再也不用担心找不到消耗IO资源多的进程了。如果发现磁盘IO很大,那么通过这个工具,可以马上找到消耗磁盘IO的元凶.

四、网络性能评估工具

对网络性能评估,常用的工具有ping、mtr等,下面分别介绍如下。

1、 ping检查网络延时性能

ping命令很简单,但是功能强大,如果发现网络反应缓慢,或者连接中断,可以通过ping来测试网络的连通情况,请看下面的一个输出:

在这个输出中,time值显示了两台主机之间的网络延时情况,如果此值很大,则表示网络的延时很大,单位为毫秒。在这个输出的最后,是对上面输出信息的一个总结,packet loss表示网络的丢包率,此值越小,表示网络的质量越高。此例发送了10个包,只接收到了6个,因此,有40%的丢包率,网络延时平均在38.443ms。

2、 mtr路由跟踪命令

一般在判断网络连通性用ping和traceroute工具,ping的话可以来判断丢包率和延时,traceroute可以用来跟踪路由,但还有一个更好的网络连通性判断工具,它可以结合ping nslookup traceroute来判断网络的相关特性,这个命令就是mtr。

使用mtr非常简单,只需要mtr后面跟上IP地址或者域名即可,例如:

mtr 8.8.8.8

输出如下图所示:

其中:

? Host列是途经的IP或本机域名

? Loss%列就是对应IP行的丢包率了,值得一提的是,只有最后的目标丢包才算是真正的丢包。

? Last列则是最后一次返回的延迟,按毫秒计算的

? Avg列是所有返回时延的一个平均值

? Best列是最快的一次返回时延

? Wrst列是最长的一次返回时延

? StDev列是延时标准偏差

Mtr的优势是可以动态显示到某个主机的路由状态,在路由过程中每一条的延时和丢包都可以非常清晰的展示出来,这对于我们排查网络故障和性能问题非常有用。

五、系统性能综合监控工具

有几个不错的工具可以用来全面监控Linux系统性能,分别是top、htop,下面分别介绍如下。

1、 系统实时状态监控工具top

top命令提供了实时的对系统处理器状态的监控,它能够实时显示系统中各个进程的资源占用状况。该命令可以按照对CPU的使用、内存使用和执行时间对系统任务进程进行排序显示,同时top命令还可以通过交互式命令进行设定显示。

下面通过一个具体的例子,来解读top的输出内容,如下图所示:

从图中可以看到,top的输出可以分为统计信息区和进程信息区两个部分,即前5行显示为统计信息区,下面为进程信息区,我们分别进行介绍。

(1)统计信息区

第1行为任务队列信息,含义如下:

? 13:29:02:表示当前系统时间。

? up 3 days,23:15:表示系统已经启动3天零23小时15分钟了。

? 2 users:当前登录系统的用户数。

? load average: 0.47, 0.20, 0.10:表示系统平均负载,3个数值分别表示1分钟、5分钟、15分钟前到现在的系统平均负载值。

第2行和第3行分别为进程和CPU信息,具体含义如下:

? Tasks: 122 total:进程的总数。

? 1 running:正在运行的进程数。

? 121 sleeping:处于休眠的进程数。

? 0 stopped:停止的进程数。

? 0 zombie:僵死的进程数。

? Cpu(s): 0.3% us:表示用户进程占用CPU的百分比。

? 0.1% sy:系统进程占用CPU的百分比。

? 0.0% ni:用户进程空间内改变过优先级的进程占用CPU百分比。

? 99.3% id:空闲CPU占用的百分比。

? 0.2% wa:等待输入输出的进程占用CPU的百分比。

最后两行输出的是内存信息,具体含义如下:

? Mem: 4059952k total:系统的物理内存大小。

? 4009540k used:已经使用的物理内存大小。

? 50412k free:目前空余内存大小。

? 468964k buffers:用作内核缓冲区的内存大小。

? Swap: 8193108k total:交换分区内存大小。

? 0k used:已经使用的交换分区大小。

? 8193108k free:空闲的交换分区大小。

? 2320396k cached:高速缓存。

(2)进程信息区

进程信息区显示了每个进程的运行状态,我们先来看一下每列输出的含义。

? PID:进程的id。

? USER:进程所有者的用户名。

? PR:进程优先级。

? NI:nice值。负值表示高优先级,正值表示低优先级。

? VIRT:进程使用的虚拟内存总量,单位kB。VIRT=SWAP+RES。

? RES:进程使用的、未被换出的物理内存大小,单位kB。RES=CODE+DATA。

? SHR:共享内存大小,单位kB。

? S:进程状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止,Z表示僵死进程。

? %CPU:上次更新到现在的CPU时间占用百分比。

? %MEM:进程占用的物理内存百分比。

? TIME+:进程使用的CPU时间总计,单位为1/100秒。

? COMMAND:正在运行进程的命令名或者命令路径。

通过使用top命令,可以对系统整体运行状态有一个清晰的了解,结合上面介绍的CPU、磁盘、内存等工具,对于判断系统性能问题,完全可以给出一个正确的结论。

2、 htop命令

htop是Linux系统中的一个互动的进程查看器,与Linux传统的top相比,htop更加人性化,它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。

Htop项目地址是, 要使用htop,既可以通过源码包编译安装,也可以配置好yum源后网络下载安装,推荐yum方式安装,但是要下载一个epel源,因为htop包含在epel源中。安装很简单,这里以centos7.x版本为例,命令如下:

[root@localhost ~]# yum install epel-release[root@localhost ~]# yum install -y htop

安装完成后,命令行中直接敲击htop命令,即可进入htop的界面。

htop命令安装好以后,直接输入htop,即可打开如下界面:

从图中可以看出,htop命令总共分了5个展示区,分别是cpu展示区、内存展示区、整体状态区、进程状态区和管理控制台。

htop命令支持键盘输入和鼠标点击,首先看一下CPU展示区,htop可以通过进度条展示每个CPU逻辑核的使用百分比,并且通过不同颜色进行区分,其中,蓝色的表示low-prority使用,绿色的表示normal使用情况,红色的表示kernel使用情况,青色的表示vistualiz使用情况。从图中输出可在,此服务器有32个逻辑核。

接着是内存展示区,主要是物理内存和swap的状态,同样也使用了不同颜色来区分是使用情况,其中Mem项中,绿色的表示已经使用内存情况,蓝色的表示用于缓冲的内存使用情况,黄色的表示用于缓存的内存使用情况。从图中可知,此服务器有72Gb内存。而Swap项中,主要显示交换分区使用情况,如果使用过大,那么可能需要增加内存了。

然后看整体状态区,其中,Tasks项显示的是进程总数,当前运行的进程数、Load average项展示的是系统1分钟,5分钟,10分钟的平均负载情况、Uptime为系统运行了多长时间。

最后看下进行状态区和管理控制台,进程状态区展示当前系统中的所有进程,默认有12列组成,每列代表的含义如下:

? PID:进程标志号,是非零正整数

? USER:进程所有者的用户名

? PR:进程的优先级别

? NI:进程的优先级别数值

? VIRT:进程占用的虚拟内存值

? RES:进程占用的物理内存值

? SHR:进程使用的共享内存值

? S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数

? %CPU:该进程占用的CPU使用率

? %MEM:该进程占用的物理内存和总内存的百分比

? TIME+:该进程启动后占用的总的CPU时间

? COMMAND:进程启动的启动命令名称

在上图中,我们定制了第一列TGID,此列展示的是进程对应的线程信息,我们还可以进行更多的定制,可以通过最下面的进程控制台,有F1~F10共10个功能键,依次定制需要的展示功能。

htop工具可以整体观察系统状态和资源,也可以对某个进程进行细致的查看,例如进程中的线程状态,进程占用的内存大小、优先级调整等,都可以通过htop命令完成。

标签: #centos72优化脚本