linux与内存相关的命令

Posted wxzhe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux与内存相关的命令相关的知识,希望对你有一定的参考价值。

使用这个命令之前需要先理解什么是虚拟内存?有关虚拟内存这里推荐几片博客:

https://blog.csdn.net/qq_38410730/article/details/81036768

https://www.cnblogs.com/aaronax/p/5645246.html

上面两片博客第一篇博客解释的很详细,但我绝对第二篇博客可能更容易理解吧,因为没有太涉及底层的东西。

vmstat命令:

[[email protected] ~]# 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.
[[email protected] ~]# 

命令输出介绍:

[[email protected] ~]# 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    
[[email protected] ~]# 

#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的数量
[[email protected] ~]# 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 [[email protected] ~]#
#显示forkl多少个进程
[[email protected] ~]# vmstat -f 57205 forks [[email protected] ~]# vmstat -f 57206 forks

查看内存使用的详细信息,这些信息的分别是来自于/proc/meminfo, /proc/stat 和  /proc/vmstat

技术图片
[[email protected] ~]# 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

[[email protected] ~]# 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
[[email protected] ~]# 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
[[email protected] ~]# 

#merged :表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作。

free命令

free用来查看系统内存的实际使用情况,有关系统内存的使用有几个算式:

[[email protected] ~]# 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
[[email protected] ~]# 

#这里面的几个英文的意思不再说明

介绍这个命令的时候,总是会有一些公式,但是我感觉这些公式计算貌似不是那么准确。

#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支持动态输出,后面加上间隔的秒数。

[[email protected] ~]# 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

 

以上是关于linux与内存相关的命令的主要内容,如果未能解决你的问题,请参考以下文章

linux进程相关命令

20170915 linux系统管理培训

linux-命令-pmap相关

Linux netstat命令详解

linux下如何查看文件夹大小?硬盘使用情况?内存使用情况?

如何使用模块化代码片段中的LeakCanary检测内存泄漏?