超级干货:3个性能监控和优化命令详解

点击上方 "编程技术圈"关注, 星标或置顶一起成长

后台回复“大礼包”有惊喜礼包!

日英文

A person who knows how to laugh at himself will never cease to be amused. 

一个知道如何自嘲的人,会永远生活在快乐里。

每日掏心话

若想看淡世态炎凉、静观花开花落,必先经历颠沛流离和茫然失所。昨天已经过去,明天还没到来。每个人都有他的路,每条路都是正确的。
责编:乐乐 | 来自:高效运维

编程技术圈(ID:study_tech)第 1240 次推文

往日回顾:放弃 Notepad++,事实证明,还有 5 款更牛逼……

     

   正文   

小编为大家整理出了三个有关性能监控和优化命令详细讲解,别看只有三个,但不影响他噎啊,本篇文章很长,涉及top命令、free命令和vmstat命令,真的是很详细的讲解,希望能帮到大家,另外还有两条相关的命令详解,消化消化这篇的知识,过几天再上那两条~1 top命令top 命令是 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于 Windows 的任务管理器。下面详细介绍它的使用方法。top 是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。比较准确的说,top 命令提供了实时的对系统处理器的状态监视。它将显示系统中 CPU最“敏感”的任务列表。该命令可以按 CPU 使用。内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。命令格式:
top [参数]命令功能:显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
命令参数:
-b 批处理-c 显示完整的治命令-I 忽略失效过程-s 保密模式-S 累积模式-i<时间> 设置间隔时间-u<用户名> 指定用户名-p<进程号> 指定进程-n<次数> 循环显示的次数4.使用实例:
实例1:显示进程信息
命令:top
输出:
[root@TG1704 log]# toptop - 14:06:23 up 70 days, 16:44,  2 users,  load average: 1.25, 1.32, 1.35Tasks: 206 total,   1 running, 205 sleeping,   0 stopped,   0 zombieCpu(s):  5.9%us,  3.4%sy,  0.0%ni, 90.4%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%stMem:  32949016k total, 14411180k used, 18537836k free,   169884k buffersSwap: 32764556k total,        0k used, 32764556k free,  3612636k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                28894 root      22   0 1501m 405m  10m S 52.2  1.3   2534:16 java                                                                   18249 root      18   0 3201m 1.9g  11m S 35.9  6.0 569:39.41 java                                                                    2808 root      25   0 3333m 1.0g  11m S 24.3  3.1 526:51.85 java                                                                   25668 root      23   0 3180m 704m  11m S 14.0  2.2 360:44.53 java                                                                     574 root      25   0 3168m 611m  10m S 12.6  1.9 556:59.63 java                                                                    1599 root      20   0 3237m 1.9g  11m S 12.3  6.2 262:01.14 java                                                                    1008 root      21   0 3147m 842m  10m S  0.3  2.6   4:31.08 java                                                                   13823 root      23   0 3031m 2.1g  10m S  0.3  6.8 176:57.34 java                                                                   28218 root      15   0 12760 1168  808 R  0.3  0.0   0:01.43 top                                                                    29062 root      20   0 1241m 227m  10m S  0.3  0.7   2:07.32 java                                                                       1 root      15   0 10368  684  572 S  0.0  0.0   1:30.85 init                                                                       2 root      RT  -5     0    0    0 S  0.0  0.0   0:01.01 migration/0                                                                3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0                                                                4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                                                                 5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.80 migration/1                                                                6 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1                                                                7 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/1                                                                 8 root      RT  -5     0    0    0 S  0.0  0.0   0:20.59 migration/2                                                                9 root      34  19     0    0    0 S  0.0  0.0   0:00.09 ksoftirqd/2                                                               10 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/2                                                                11 root      RT  -5     0    0    0 S  0.0  0.0   0:23.66 migration/3                                                               12 root      34  19     0    0    0 S  0.0  0.0   0:00.03 ksoftirqd/3                                                               13 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/3                                                                14 root      RT  -5     0    0    0 S  0.0  0.0   0:20.29 migration/4                                                               15 root      34  19     0    0    0 S  0.0  0.0   0:00.07 ksoftirqd/4                                                               16 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/4                                                                17 root      RT  -5     0    0    0 S  0.0  0.0   0:23.07 migration/5                                                               18 root      34  19     0    0    0 S  0.0  0.0   0:00.07 ksoftirqd/5                                                               19 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/5                                                                20 root      RT  -5     0    0    0 S  0.0  0.0   0:17.16 migration/6                                                               21 root      34  19     0    0    0 S  0.0  0.0   0:00.05 ksoftirqd/6                                                               22 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/6                                                                23 root      RT  -5     0    0    0 S  0.0  0.0   0:58.28 migration/7说明:
统计信息区:前五行是当前系统情况整体的统计信息区。下面我们看每一行信息的具体意义。第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:
14:06:23:当前系统时间up 70 days, 16:44:系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!)2 users:当前有2个用户登录系统load average: 1.15, 1.42, 1.44:load average 后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average 数据是每隔 5 秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑 CPU 的数量,结果高于5的时候就表明系统在超负荷运转了。第二行,Tasks — 任务(进程),具体信息说明如下:
系统现在共有 206 个进程,其中处于运行中的有1个,205 个在休眠(sleep),stoped状态的有0个,zombie 状态(僵尸)的有0个。
第三行,cpu状态信息,具体属性说明如下:5.9%us:用户空间占用CPU的百分比。3.4% sy:内核空间占用CPU的百分比。0.0% ni:改变过优先级的进程占用CPU的百分比90.4% id:空闲CPU百分比0.0% wa:IO等待占用CPU的百分比0.0% hi:硬中断(Hardware IRQ)占用CPU的百分比0.2% si:软中断(Software Interrupts)占用CPU的百分比备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!第四行,内存状态,具体信息如下:32949016k total — 物理内存总量(32GB)14411180k used — 使用中的内存总量(14GB)18537836k free — 空闲内存总量(18GB)169884k buffers — 缓存的内存量 (169M)第五行,swap交换分区信息,具体信息说明如下:32764556k total — 交换区总量(32GB)0k used — 使用的交换区总量(0K)32764556k free — 空闲交换区总量(32GB)3612636k cached — 缓冲的交换区总量(3.6GB)备注:第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的 cached,按这个公式此台服务器的可用内存:18537836k +169884k +3612636k = 22GB左右。对于内存监控,在 top 里我们要时刻监控第五行 swap 交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。第六行,空行。第七行以下:各进程(任务)的状态监控,项目列信息说明如下:PID:进程idUSER:进程所有者PR:进程优先级NI:nice值。负值表示高优先级,正值表示低优先级VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESRES:进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATASHR:共享内存大小,单位kbS:进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程%CPU:上次更新到现在的CPU时间占用百分比%MEM:进程使用的物理内存百分比TIME+:进程使用的CPU时间总计,单位1/100秒COMMAND:进程名称(命令名/命令行)其他使用技巧:1.多U多核CPU监控在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:
观察上图,服务器有16个逻辑CPU,实际上是4个物理CPU。再按数字键1,就会返回到top基本视图界面。2.高亮显示当前运行进程敲击键盘“b”(打开/关闭加亮效果),top的视图变化如下:
我们发现进程id为2570的“top”进程被加亮了,top进程就是视图第二行显示的唯一的运行态(runing)的那个进程,可以通过敲击“y”键关闭或打开运行态进程的加亮效果。3.进程字段排序默认进入top时,各进程是按照CPU的占用量来排序的,在下图中进程ID为28894的java进程排在第一(cpu占用142%),进程ID为574的java进程排在第二(cpu占用16%)。
敲击键盘“x”(打开/关闭排序列的加亮效果),top的视图变化如下:

可以看到,top默认的排序列是“%CPU”。
4.通过”shift + >”或”shift + <”可以向右或左改变排序列
下图是按一次”shift + >”的效果图,视图现在已经按照%MEM来排序。
2、free 命令free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。
1.命令格式:
free [参数]2.命令功能:
free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略3.命令参数:-b  以Byte为单位显示内存使用情况。-k  以KB为单位显示内存使用情况。-m  以MB为单位显示内存使用情况。-g   以GB为单位显示内存使用情况。-o  不显示缓冲区调节列。-s <间隔秒数>  持续观察内存使用状况。-t  显示内存总和列。-V  显示版本信息。4.使用实例:实例1:显示内存使用情况命令:freefree -gfree -m输出:
[root@SF1150 service]# free             total       used       free     shared    buffers     cachedMem:      32940112   30841684    2098428          0    4545340   11363424-/+ buffers/cache:   14932920   18007192Swap:     32764556    1944984   30819572[root@SF1150 service]# free -g             total       used       free     shared    buffers     cachedMem:            31         29          2          0          4         10-/+ buffers/cache:         14         17Swap:           31          1         29[root@SF1150 service]# free -m             total       used       free     shared    buffers     cachedMem:         32168      30119       2048          0       4438      11097-/+ buffers/cache:      14583      17584Swap:        31996       1899      30097说明:
下面是对这些数值的解释:total:总计物理内存的大小。used:已使用多大。free:可用有多少。Shared:多个进程共享的内存总额。Buffers/cached:磁盘缓存的大小。第三行(-/+ buffers/cached):used:已使用多大。free:可用有多少。第四行是交换分区SWAP的,也就是我们通常所说的虚拟内存。区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是 2098428 KB,已用内存是30841684KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached。第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。如本机情况的可用内存为:
18007156=2098428KB+4545340KB+11363424KB接下来解释什么时候内存会被交换,以及按什么方交换。当可用内存少于额定值的时候,就会开会进行交换.如何看额定值:命令:
cat /proc/meminfo输出:
[root@SF1150 service]# cat /proc/meminfoMemTotal:     32940112 kBMemFree:       2096700 kBBuffers:       4545340 kBCached:       11364056 kBSwapCached:    1896080 kBActive:       22739776 kBInactive:      7427836 kBHighTotal:           0 kBHighFree:            0 kBLowTotal:     32940112 kBLowFree:       2096700 kBSwapTotal:    32764556 kBSwapFree:     30819572 kBDirty:             164 kBWriteback:           0 kBAnonPages:    14153592 kBMapped:          20748 kBSlab:           590232 kBPageTables:      34200 kBNFS_Unstable:        0 kBBounce:              0 kBCommitLimit:  49234612 kBCommitted_AS: 23247544 kBVmallocTotal: 34359738367 kBVmallocUsed:    278840 kBVmallocChunk: 34359459371 kBHugePages_Total:     0HugePages_Free:      0HugePages_Rsvd:      0Hugepagesize:     2048 kB交换将通过三个途径来减少系统中使用的物理页面的个数: 
减少缓冲与页面cache的大小,
将系统V类型的内存页面交换出去, 
换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
事实上,少量地使用swap是不是影响到系统性能的。搜索公众号顶级架构师后台回复“offer”,获取一份惊喜礼包。那 buffers 和 cached 都是缓存,两者有什么区别呢?为了提高磁盘存取效率,Linux 做了一些精心的设计,除了对 dentry 进行缓存(用于VFS,加速文件路径名到 inode 的转换),还采取了两种主要 Cache 方式:Buffer Cache 和Page Cache。前者针对磁盘块的读写,后者针对文件 inode 的读写。这些 Cache 有效缩短了 I/O 系统调用(比如 read,write,getdents)的时间。磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的。
Page cache 实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当 page cache 的数据需要刷新时,page cache 中的数据交给 buffer cache,因为Buffer Cache 就是缓存磁盘块的。但是这种处理在 2.6 版本的内核之后就变的很简单了,没有真正意义上的 cache 操作。
Buffer cache 是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。简单说来,page cache 用来缓存文件数据,buffer cache 用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到 page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到 buffer cache。所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了。这也是linux看内存是否够用的标准。
如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。
实例2:以总和的形式显示内存的使用信息
命令:
free -t输出:
[root@SF1150 service]#  free -t              total       used       free     shared    buffers     cachedMem:      32940112   30845024    2095088          0    4545340   11364324-/+ buffers/cache:   14935360   18004752Swap:     32764556    1944984   30819572Total:    65704668   32790008   32914660[root@SF1150 service]#说明:
实例3:周期性的查询内存使用信息
命令:
free -s 10输出:[root@SF1150 service]#  free -s 10             total       used       free     shared    buffers     cachedMem:      32940112   30844528    2095584          0    4545340   11364380-/+ buffers/cache:   14934808   18005304Swap:     32764556    1944984   30819572             total       used       free     shared    buffers     cachedMem:      32940112   30843932    2096180          0    4545340   11364388-/+ buffers/cache:   14934204   18005908Swap:     32764556    1944984   308195723、vmstatvmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat 工具提供了一种低开销的系统性能观察方式。因为 vmstat 本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat 输出结果。在学习vmstat命令前,我们先了解一下Linux系统中关于物理内存和虚拟内存相关信息。物理内存和虚拟内存区别:
我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。1.命令格式:
free [参数]2.命令功能:
free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
3.命令参数:-b  以Byte为单位显示内存使用情况。-k  以KB为单位显示内存使用情况。-m  以MB为单位显示内存使用情况。-g   以GB为单位显示内存使用情况。-o  不显示缓冲区调节列。-s<间隔秒数>  持续观察内存使用状况。-t  显示内存总和列。-V  显示版本信息。4.使用实例:
实例1:显示内存使用情况命令:
freefree -gfree -m输出:
[root@SF1150 service]# free             total       used       free     shared    buffers     cachedMem:      32940112   30841684    2098428          0    4545340   11363424-/+ buffers/cache:   14932920   18007192Swap:     32764556    1944984   30819572[root@SF1150 service]# free -g             total       used       free     shared    buffers     cachedMem:            31         29          2          0          4         10-/+ buffers/cache:         14         17Swap:           31          1         29[root@SF1150 service]# free -m             total       used       free     shared    buffers     cachedMem:         32168      30119       2048          0       4438      11097-/+ buffers/cache:      14583      17584Swap:        31996       1899      30097它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。要深入了解linux内存运行机制,需要知道下面提到的几个方面:首先,Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。其次,linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟内存,有时我们会看到这么一个现象:linux物理内存还有很多,但是交换空间也使用了很多。其实,这并不奇怪,例如,一个占用很大内存的进程运行时,需要耗费很多内存资源,此时就会有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。关于这点,不用担心什么,只要知道是怎么一回事就可以了。最后,交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页面,它们又会被马上交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会导致linux出现假死机、服务异常等问题,linux虽然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。因此,合理规划和设计linux内存的使用,是非常重要的。虚拟内存原理:在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。1.命令格式:
vmstat [-a] [-n] [-S unit] [delay [ count]]vmstat [-s] [-n] [-S unit]vmstat [-m] [-n] [delay [ count]]vmstat [-d] [-n] [delay [ count]]vmstat [-p disk partition] [-n] [delay [ count]]vmstat [-f]vmstat [-V]2.命令功能:
用来显示虚拟内存的信息
3.命令参数:
-a:显示活跃和非活跃内存
-f:显示从系统启动至今的fork数量 。
-m:显示slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
-d:显示磁盘相关统计信息。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V:显示vmstat版本信息。4.使用实例:
实例1:显示虚拟内存使用情况
命令:
vmstat输出:
说明:
字段说明:
Procs(进程):
r: 运行队列中进程数量
b: 等待IO的进程数量
Memory(内存):
swpd: 使用虚拟内存大小
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小
Swap:
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数
系统:
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数。
CPU(以百分比表示):
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
wa: 等待IO时间
备注:如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。如果pi,po 长期不等于0,表示内存不足。如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。命令:vmstat 5 5表示在5秒时间内进行5次采样。将得到一个数据汇总他能够反映真正的系统情况。
实例2:显示活跃和非活跃内存
命令:
vmstat -a 2 5输出:
[root@localhost ~]# vmstat -a 2 5procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st 0  0      0 3029752 387728 513008    0    0     0     2    3    2  0  0 100  0  0 0  0      0 3029752 387728 513076    0    0     0     0 1005   34  0  0 100  0  0 0  0      0 3029752 387728 513076    0    0     0    22 1004   36  0  0 100  0  0 0  0      0 3029752 387728 513076    0    0     0     0 1004   33  0  0 100  0  0 0  0      0 3029752 387728 513076    0    0     0     0 1003   32  0  0 100  0  0说明:
使用-a选项显示活跃和非活跃内存时,所显示的内容除增加inact和active外,其他显示内容与例子1相同。
搜索公众号后端架构师后台回复“架构整洁”,获取一份惊喜礼包。

字段说明:
Memory(内存):
inact: 非活跃内存大小(当使用-a选项时显示)
active: 活跃的内存大小(当使用-a选项时显示)
实例3:查看系统已经fork了多少次
命令:
vmstat -f输出:
[root@SCF1129 ~]# vmstat -f     12744849 forks[root@SCF1129 ~]#说明:
这个数据是从/proc/stat中的processes字段里取得的
实例4:查看内存使用的详细信息
命令:
vmstat -s输出:
[root@localhost ~]# vmstat -s      4043760  total memory      1013884  used memory       513012  active memory       387728  inactive memory      3029876  free memory       199616  buffer memory       690980  swap cache      6096656  total swap            0  used swap      6096656  free swap        83587 non-nice user cpu ticks          132 nice user cpu ticks       278599 system cpu ticks    913344692 idle cpu ticks       814550 IO-wait cpu ticks        10547 IRQ cpu ticks        21261 softirq cpu ticks            0 stolen cpu ticks       310215 pages paged in     14254652 pages paged out            0 pages swapped in            0 pages swapped out    288374745 interrupts    146680577 CPU context switches   1351868832 boot time       367291 forks说明:
这些信息的分别来自于/proc/meminfo,/proc/stat和/proc/vmstat。
实例5:查看磁盘的读/写
命令:
vmstat -d输出:
[root@localhost ~]# vmstat -ddisk- ------------reads------------ ------------writes----------- -----IO------       total merged sectors      ms  total merged sectors      ms    cur    secram0       0      0       0       0      0      0       0       0      0      0ram1       0      0       0       0      0      0       0       0      0      0ram2       0      0       0       0      0      0       0       0      0      0ram3       0      0       0       0      0      0       0       0      0      0ram4       0      0       0       0      0      0       0       0      0      0ram5       0      0       0       0      0      0       0       0      0      0ram6       0      0       0       0      0      0       0       0      0      0ram7       0      0       0       0      0      0       0       0      0      0ram8       0      0       0       0      0      0       0       0      0      0ram9       0      0       0       0      0      0       0       0      0      0ram10      0      0       0       0      0      0       0       0      0      0ram11      0      0       0       0      0      0       0       0      0      0ram12      0      0       0       0      0      0       0       0      0      0ram13      0      0       0       0      0      0       0       0      0      0ram14      0      0       0       0      0      0       0       0      0      0ram15      0      0       0       0      0      0       0       0      0      0sda    33381   6455  615407   63224 2068111 1495416 28508288 15990289      0  10491hdc        0      0       0       0      0      0       0       0      0      0fd0        0      0       0       0      0      0       0       0      0      0md0        0      0       0       0      0      0       0       0      0      0[root@localhost ~]#说明:
这些信息主要来自于/proc/diskstats.
merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作.
实例6:查看/dev/sda1磁盘的读/写
命令:
输出:
[root@SCF1129 ~]# df文件系统                 1K-块      已用      可用 已用% 挂载点/dev/sda3            1119336548  27642068 1034835500   3% /tmpfs                 32978376         0  32978376   0% /dev/shm/dev/sda1              1032088     59604    920056   7% /boot[root@SCF1129 ~]# vmstat -p /dev/sda1sda1          reads   read sectors  writes    requested writes               18607    4249978          6         48[root@SCF1129 ~]# vmstat -p /dev/sda3sda3          reads   read sectors  writes    requested writes              429350   35176268   28998789  980301488[root@SCF1129 ~]#说明:
这些信息主要来自于/proc/diskstats。
reads:来自于这个分区的读的次数。
read sectors:来自于这个分区的读扇区的次数。
writes:来自于这个分区的写的次数。
requested writes:来自于这个分区的写请求次数。
实例7:查看系统的 slab 信息
命令:
vmstat -m输出:
[root@localhost ~]# vmstat -mCache                       Num  Total   Size  Pagesip_conntrack_expect           0      0    136     28ip_conntrack                  3     13    304     13ip_fib_alias                 11     59     64     59ip_fib_hash                  11     59     64     59AF_VMCI                       0      0    960      4bio_map_info                100    105   1064      7dm_mpath                      0      0   1064      7jbd_4k                        0      0   4096      1dm_uevent                     0      0   2608      3dm_tio                        0      0     24    144dm_io                         0      0     48     77scsi_cmd_cache               10     10    384     10sgpool-128                   32     32   4096      1sgpool-64                    32     32   2048      2sgpool-32                    32     32   1024      4sgpool-16                    32     32    512      8sgpool-8                     45     45    256     15scsi_io_context               0      0    112     34ext3_inode_cache          51080  51105    760      5ext3_xattr                   36     88     88     44journal_handle               18    144     24    144journal_head                 56     80     96     40revoke_table                  4    202     16    202revoke_record                 0      0     32    112uhci_urb_priv                 0      0     56     67UNIX                         13     33    704     11flow_cache                    0      0    128     30msi_cache                    33     59     64     59cfq_ioc_pool                 14     90    128     30cfq_pool                     12     90    216     18crq_pool                     16     96     80     48deadline_drq                  0      0     80     48as_arq                        0      0     96     40mqueue_inode_cache            1      4    896      4isofs_inode_cache             0      0    608      6hugetlbfs_inode_cache         1      7    576      7Cache                       Num  Total   Size  Pagesext2_inode_cache              0      0    720      5ext2_xattr                    0      0     88     44dnotify_cache                 0      0     40     92dquot                         0      0    256     15eventpoll_pwq                 3     53     72     53eventpoll_epi                 3     20    192     20inotify_event_cache           0      0     40     92inotify_watch_cache           1     53     72     53kioctx                        0      0    320     12kiocb                         0      0    256     15fasync_cache                  0      0     24    144shmem_inode_cache           254    290    768      5posix_timers_cache            0      0    128     30uid_cache                     0      0    128     30ip_mrt_cache                  0      0    128     30tcp_bind_bucket               3    112     32    112inet_peer_cache               0      0    128     30secpath_cache                 0      0     64     59xfrm_dst_cache                0      0    384     10ip_dst_cache                  5     10    384     10arp_cache                     1     15    256     15RAW                           3      5    768      5UDP                           5     10    768      5tw_sock_TCP                   0      0    192     20request_sock_TCP              0      0    128     30TCP                           4      5   1600      5blkdev_ioc                   14    118     64     59blkdev_queue                 20     30   1576      5blkdev_requests              13     42    272     14biovec-256                    7      7   4096      1biovec-128                    7      8   2048      2biovec-64                     7      8   1024      4biovec-16                     7     15    256     15biovec-4                      7     59     64     59biovec-1                     23    202     16    202bio                         270    270    128     30utrace_engine_cache           0      0     64     59Cache                       Num  Total   Size  Pagesutrace_cache                  0      0     64     59sock_inode_cache             33     48    640      6skbuff_fclone_cache           7      7    512      7skbuff_head_cache           319    390    256     15file_lock_cache               1     22    176     22Acpi-Operand               4136   4248     64     59Acpi-ParseExt                 0      0     64     59Acpi-Parse                    0      0     40     92Acpi-State                    0      0     80     48Acpi-Namespace             2871   2912     32    112delayacct_cache              81    295     64     59taskstats_cache               4     53     72     53proc_inode_cache           1427   1440    592      6sigqueue                      0      0    160     24radix_tree_node           13166  13188    536      7bdev_cache                   23     24    832      4sysfs_dir_cache            5370   5412     88     44mnt_cache                    26     30    256     15inode_cache                2009   2009    560      7dentry_cache              60952  61020    216     18filp                        479   1305    256     15names_cache                   3      3   4096      1avc_node                     14     53     72     53selinux_inode_security      994   1200     80     48key_jar                       2     20    192     20idr_layer_cache              74     77    528      7buffer_head              164045 164800     96     40mm_struct                    51     56    896      4vm_area_struct             1142   1958    176     22fs_cache                     35    177     64     59files_cache                  36     55    768      5signal_cache                 72    162    832      9sighand_cache                68     84   2112      3task_struct                  76     80   1888      2anon_vma                    458    864     24    144pid                          83    295     64     59shared_policy_node            0      0     48     77Cache                       Num  Total   Size  Pagesnuma_policy                  37    144     24    144size-131072(DMA)              0      0 131072      1size-131072                   0      0 131072      1size-65536(DMA)               0      0  65536      1size-65536                    1      1  65536      1size-32768(DMA)               0      0  32768      1size-32768                    2      2  32768      1size-16384(DMA)               0      0  16384      1size-16384                    5      5  16384      1size-8192(DMA)                0      0   8192      1size-8192                     7      7   8192      1size-4096(DMA)                0      0   4096      1size-4096                   110    111   4096      1size-2048(DMA)                0      0   2048      2size-2048                   602    602   2048      2size-1024(DMA)                0      0   1024      4size-1024                   344    352   1024      4size-512(DMA)                 0      0    512      8size-512                    433    480    512      8size-256(DMA)                 0      0    256     15size-256                   1139   1155    256     15size-128(DMA)                 0      0    128     30size-64(DMA)                  0      0     64     59size-64                    5639   5782     64     59size-32(DMA)                  0      0     32    112size-128                    801    930    128     30size-32                    3005   3024     32    112kmem_cache                  137    137   2688      1这组信息来自于/proc/slabinfo。slab:由于内核会有许多小对象,这些对象构造销毁十分频繁,比如i-node,dentry,这些对象如果每次构建的时候就向内存要一个页(4kb),而其实只有几个字节,这样就会非常浪费,为了解决这个问题,就引入了一种新的机制来处理在同一个页框中如何分配小存储区,而slab可以对小对象进行分配,这样就不用为每一个对象分配页框,从而节省了空间,内核对一些小对象创建析构很频繁,slab对这些小对象进行缓冲,可以重复利用,减少内存分配次数。PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。


版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!

欢迎加入后端架构师交流群,在后台回复“学习”即可。

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。在这里,我为大家准备了一份2021年最新最全BAT等大厂Java面试经验总结。
别找了,想获取史上最简单的Java大厂面试题学习资料
扫下方二维码回复「面试」就好了


猜你还想看
阿里、腾讯、百度、华为、京东最新面试题汇集
SpringBoot库存管理系统,拿来学习真香

刘强东的代码水平到底有多牛? 网友:95年一个晚上赚5万!

对比安卓!鸿蒙OS 2.0流畅度实测:差距到底多大?

嘿,你在看吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值