使用这个命令之前需要先理解什么是虚拟内存?有关虚拟内存这里推荐几片博客:
https://blog.csdn.net/qq_38410730/article/details/81036768
https://www.cnblogs.com/aaronax/p/5645246.html
上面两片博客第一篇博客解释的很详细,但我绝对第二篇博客可能更容易理解吧,因为没有太涉及底层的东西。
vmstat命令:
[root@test2 ~]# vmstat -h usage: vmstat [-V] [-n] [delay [count]] -V prints version. -n causes the headers not to be reprinted regularly. #不定期打印标题【暂时不太理解】 -a print inactive/active page stats. #显示活跃/不活跃的页信息 -d prints disk statistics #显示磁盘的统计信息 -D prints disk table #显示磁盘表,按输出显示就是统计 “-d”时的信息的汇总 -p prints disk partition statistics #显示指定分区的新 -s prints vm table #显示虚拟内存表 -m prints slabinfo #显示slabinfo信息,https://www.cnblogs.com/tolimit/p/4566189.html-t add timestamp to output #在输出的时候添加时间 -S unit size #指定单位 delay is the delay between updates in seconds. unit size k:1000 K:1024 m:1000000 M:1048576 (default is K) count is the number of updates. [root@test2 ~]#
命令输出介绍:
[root@test2 ~]# vmstat 1 2 #后面的数字表示1秒打印一次,输出两次 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 2479976 400388 4635404 0 0 7 12 0 0 0 0 100 0 0 0 0 0 2479968 400388 4635404 0 0 0 0 96 115 0 0 100 0 0 [root@test2 ~]# #vmstat命令输出分为6大部分,分别解释如下:proc: 与进程相关
- r: 表示正在运行的进程数量
- b: 正在阻塞等待进程数量。
memory: 与内存相关
- swpd:表示使用虚拟内存的大小
- free:可用内存的大小。【物理内存】
- buff:用作缓冲的内存大小。
- cache:用作缓存的内存大小
swap: 与虚拟内存相关
- si: 每秒从交换区到内存中的大小
- so: 每秒从内存到交换区的大小
io: 与io操作相关的
- bi: 每秒读取的块数。
- bo: 每秒写入的块数。
system:
- in: 每秒中断数量,包括时钟中断。
- cs:表示每秒产生的 上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的
数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一
个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函
数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
cpu:
- us :表示用户进程消耗的CPU时间百分比,us值越高,说明用户进程消耗CPU时间越多,如果长期大于50%,则需要考虑优化程序或者算法
- sy :表示系统内核进程消耗的CPU时间百分比,一般来说us+sy应该小于80%,如果大于80%,说明可能存在CPU瓶颈
- id :表示CPU处在空间状态的时间百分比
- wa :表示IO等待所占用的CPU时间百分比,wa值越高,说明I/O等待越严重,根据经验wa的参考值为20%,如果超过20%,说明I/O等待严重,引起I/O等待的原因可能是磁盘大量随
机读写造成的,也可能是磁盘或者监控器的贷款瓶颈(主要是块操作)造成的
- st :【暂时未查到?】
#显示活跃/非活跃的内存,但是在memory统计中少了buffer与cache的数量[root@test2 ~]# vmstat -a procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free inact active si so bi bo in cs us sy id wa st 1 0 0 2480092 3248940 2003188 0 0 7 12 0 0 0 0 100 0 0 [root@test2 ~]#
#显示forkl多少个进程[root@test2 ~]# vmstat -f 57205 forks [root@test2 ~]# vmstat -f 57206 forks
查看内存使用的详细信息,这些信息的分别是来自于/proc/meminfo, /proc/stat 和 /proc/vmstat
[root@test2 ~]# vmstat -s 8061288 total memory 5581312 used memory 2003136 active memory 3248940 inactive memory 2479976 free memory 400388 buffer memory 4635404 swap cache 262140 total swap 0 used swap 262140 free swap 2564729 non-nice user cpu ticks 80 nice user cpu ticks 1198070 system cpu ticks 3001649879 idle cpu ticks 899817 IO-wait cpu ticks 538 IRQ cpu ticks 75907 softirq cpu ticks 727048 stolen cpu ticks 197029138 pages paged in 365733042 pages paged out 0 pages swapped in 0 pages swapped out 864505151 interrupts 1253326562 CPU context switches 1543454840 boot time 57207 forks
vmstat -s
查看磁盘的读写:这些信息主要来自于 /proc/diskstats
[root@test2 ~]# vmstat -d disk- ------------reads------------ ------------writes----------- -----IO------ total merged sectors ms total merged sectors ms cur sec ram0 0 0 0 0 0 0 0 0 0 0 ram1 0 0 0 0 0 0 0 0 0 0 ram2 0 0 0 0 0 0 0 0 0 0 ram3 0 0 0 0 0 0 0 0 0 0 ram4 0 0 0 0 0 0 0 0 0 0 ram5 0 0 0 0 0 0 0 0 0 0 ram6 0 0 0 0 0 0 0 0 0 0 ram7 0 0 0 0 0 0 0 0 0 0 ram8 0 0 0 0 0 0 0 0 0 0 ram9 0 0 0 0 0 0 0 0 0 0 ram10 0 0 0 0 0 0 0 0 0 0 ram11 0 0 0 0 0 0 0 0 0 0 ram12 0 0 0 0 0 0 0 0 0 0 ram13 0 0 0 0 0 0 0 0 0 0 ram14 0 0 0 0 0 0 0 0 0 0 ram15 0 0 0 0 0 0 0 0 0 0 loop0 0 0 0 0 0 0 0 0 0 0 loop1 0 0 0 0 0 0 0 0 0 0 loop2 0 0 0 0 0 0 0 0 0 0 loop3 0 0 0 0 0 0 0 0 0 0 loop4 0 0 0 0 0 0 0 0 0 0 loop5 0 0 0 0 0 0 0 0 0 0 loop6 0 0 0 0 0 0 0 0 0 0 loop7 0 0 0 0 0 0 0 0 0 0 vda 91045 17027 14561564 471341 2162428 8151181 82493360 42481096 0 3692 vdb 963898 8548 339997410 6303150 2330718 47219706 399897152 254295683 0 7429 vdc 155657 1269 39496870 1068779 587058 36520794 249075892 47830809 0 2421 sr0 0 0 0 0 0 0 0 0 0 0 [root@test2 ~]# vmstat -D 28 disks 4 partitions 1210600 total reads 26844 merged reads 394055844 read sectors 7843270 milli reading 5080204 writes 91891681 merged writes 731466404 written sectors 344607588 milli writing 0 inprogress IO 13542 milli spent IO [root@test2 ~]# #merged :表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作。
free命令
free用来查看系统内存的实际使用情况,有关系统内存的使用有几个算式:
[root@test2 ~]# free -m #1: total used free shared buffers cached #2:Mem: 7872 5450 2421 0 391 4526 #3:-/+ buffers/cache: 532 7339 #4:Swap: 255 0 255 [root@test2 ~]# #这里面的几个英文的意思不再说明
介绍这个命令的时候,总是会有一些公式,但是我感觉这些公式计算貌似不是那么准确。
#4: 表示的交换分区的数量,也就是虚拟内存的数量: total=used+free
#2:表示从操作系统层面上看对内存的统计: buffers表示被os buff的数量,cached表示被oscache的数量。shared已经被删除,结果总是0.
A buffer is something that has yet to be "written" to disk. #表示写缓冲 A cache is something that has been "read" from the disk and stored for later use. #表示读缓存 也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。在linux系统中为了提高io的读性能,一般cached的数据要比buff大得多。 被系统缓存的内存可以释放,后面会说明:#关于free的一片博客
#3:关于第三行的结果,感觉都说不太清,暂时先空着。
free命令的读取值是从cat /proc/meminfo中读取的,free命令常用的选项就是“-m”,还有一个选项-s支持动态输出,后面加上间隔的秒数。
[root@test2 ~]# free -s 2 total used free shared buffers cached Mem: 8061288 5581320 2479968 188 400388 4635408 -/+ buffers/cache: 545524 7515764 Swap: 262140 0 262140 total used free shared buffers cached Mem: 8061288 5581320 2479968 188 400388 4635408 -/+ buffers/cache: 545524 7515764 Swap: 262140 0 262140
原文地址:https://www.cnblogs.com/wxzhe/p/10425752.html