内存状态查看命令memstat、free

memstat

memstat可以帮你查看每个共享库的内存占用

 

运行 memstat -w 即可列出当前所有共享库的信息:

memstat -w

如果不加 -w 参数,memstat 会把过长的信息截断到 80 列。

 

第一列为内存占用,随后的数字是使用这个共享库进程的 PID,最后是共享库的完整路径,可以看到,不少共享库后面有很多 PID,表示这个共享库被多个进程所共享。

你可以在 /etc/memstat.conf 中配置执行文件的目录,memstat 只会调查这些目录下的可执行文件共享库信息。

如果你想查看那个共享库占用的内存最多,只需要用 sort 过滤一下:

memstat -w | sort -rn

 

调用效果:

 

 

帮助菜单:

 

/proc/meminfo

查看RAM使用情况最简单的方法是通过/proc/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。/proc/meminfo列出了所有你想了解的内存的使用情况。进程的内存使用信息也可以通过/proc/<pid>/statm 和 /proc/<pid>/status 来查看。

$ cat /proc/meminfo

 

free

free指令会显示内存的使用情况,包括物理内存,虚拟的交换文件内存,共享内存区段,以及内核缓冲区内存等。

语法

free [-bkmotV][-s <间隔秒数>]

参数说明:

-b  以Byte为单位显示内存使用情况。

-k  以KB为单位显示内存使用情况。

-m  以MB为单位显示内存使用情况。

-h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:

-o  不显示缓冲区调节列。

-s<间隔秒数>  持续观察内存使用状况。

-t  显示内存总和列。

-V  显示版本信息。

 

调用效果:

名称

代表的内容

total

总量

used

已使用的

free

空闲的

shared

共享的,在linux里面有很多共享内存,比如一个libc库,很多程序调用,但实际只存一份

buffers/cache

缓存,可回收

 

buff/cache

先来提一个问题: buffer 和 cache 应该是两种类型的内存,但是 free 命令为什么会把它们放在一起呢?

也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。

 

在 Linux 的内存管理中,这里的 buffer 指 Linux 内存的: Buffer cache 。这里的 cache 指 Linux 内存中的: Page cache 。翻译成中文可以叫做缓冲区缓存 和 页面缓存。

在历史上,它们一个( buffer )被用来当成对 io 设备写的缓存,而另一个( cache )被用来当作对 io 设备的读缓存,这里的 io 设备,主要指的是块设备文件和文件系统上的普通文件。

但是现在,它们的意义已经不一样了。

在当前的内核中, page cache 顾名思义就是针对内存页的缓存,说白了就是,如果有内存是以 page 进行分配管理的,都可以使用 page cache 作为其缓存来管理使用。

当然,不是所有的内存都是以页( page )进行管理的,也有很多是针对块( block )进行管理的,这部分内存使用如果要用到 cache 功能,则都集中到 buffer cache 中来使用。(从这个角度出发,是不是 buffer cache 改名叫做 block cache 更好?)然而,也不是所有块( block )都有固定长度,系统上块的长度主要是根据所使用的块设备决定的,而页长度在 X86 上无论是 32 位还是 64 位都是 4k 。

 

buffer 在操作系统中指 buffer cache, 中文一般翻译为 "缓冲区"。要理解缓冲区,必须明确另外两个概念:"扇区" 和 "块"。扇区是设备的最小寻址单元,也叫 "硬扇区" 或 "设备块"。块是操作系统中文件系统的最小寻址单元,也叫 "文件块" 或 "I/O 块"。每个块包含一个或多个扇区,但大小不能超过一个页面,所以一个页可以容纳一个或多个内存中的块。当一个块被调入内存时,它要存储在一个缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的表示(下图来自互联网):

注意,buffer cache 只有块的概念而没有文件的概念,它只是把磁盘上的块直接搬到内存中而不关心块中究竟存放的是什么格式的文件。

cache 在操作系统中指 page cache,中文一般翻译为 "页高速缓存"。页高速缓存是内核实现的磁盘缓存。它主要用来减少对磁盘的 I/O 操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。页高速缓存缓存的是内存页面。缓存中的页来自对普通文件、块设备文件(这个指的就是 buffer cache 呀)和内存映射文件的读写。

页高速缓存对普通文件的缓存我们可以这样理解:当内核要读一个文件(比如 /etc/hosts)时,它会先检查这个文件的数据是不是已经在页高速缓存中了。如果在,就放弃访问磁盘,直接从内存中读取。这个行为称为缓存命中。如果数据不在缓存中,就是未命中缓存,此时内核就要调度块 I/O 操作从磁盘去读取数据。然后内核将读来的数据放入页高速缓存中。这种缓存的目标是文件系统可以识别的文件(比如 /etc/hosts)。

页高速缓存对块设备文件的缓存就是我们在前面介绍的 buffer cahce。因为独立的磁盘块通过缓冲区也被存入了页高速缓存(缓冲区最终是由页高速缓存来承载的)。

到这里我们应该搞清楚了:无论是缓冲区还是页高速缓存,它们的实现方式都是一样的。缓冲区只不过是一种概念上比较特殊的页高速缓存罢了。

那么为什么 free 命令不直接称为 cache 而非要写成 buff/cache? 这是因为缓冲区和页高速缓存的实现并非天生就是统一的。在 linux 内核 2.4 中才将它们统一。更早的内核中有两个独立的磁盘缓存:页高速缓存和缓冲区高速缓存。前者缓存页面,后者缓存缓冲区。当你知道了这些故事之后,输出中列的名称可能已经不再重要了。

free 与 available

在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?

free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available  = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。

交换空间(swap space)

swap space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap 分区也可以是 swap 文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。

现在的机器一般都不太缺内存,如果系统默认还是使用了 swap 是不是会拖累系统的性能?理论上是的,但实际上可能性并不是很大。并且内核提供了一个叫做 swappiness 的参数,用于配置需要将内存中不常用的数据移到 swap 中去的紧迫程度。这个参数的取值范围是 0~100,0 告诉内核尽可能的不要将内存数据移到 swap 中,也即只有在迫不得已的情况下才这么做,而 100 告诉内核只要有可能,尽量的将内存中不常访问的数据移到 swap 中。在 ubuntu 系统中,swappiness 的默认值是 60。如果我们觉着内存充足,可以在 /etc/sysctl.conf 文件中设置 swappiness:

vm.swappiness=10

如果系统的内存不足,则需要根据物理内存的大小来设置交换空间的大小。具体的策略网上有很丰富的资料,这里笔者不再赘述。

 

 

参考:

https://www.runoob.com/linux/linux-comm-free.html

https://www.cnblogs.com/ultranms/p/9254160.html

https://blog.csdn.net/ouyang_peng/article/details/84292776

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在QNX系统中,可以使用很多不同的命令查看设备内存大小。其中最常用的命令是vmstatmemstat和top。这些命令可以告诉我们整个系统的内存使用情况以及每个进程的内存使用情况。同时也可以使用一些特定的命令查看某个特定设备的内存大小。 首先,我们需要了解一下在QNX系统中设备内存的概念。在QNX系统中,设备内存通常是指设备所占用的内存空间,包括CPU内存和物理内存。对于一个设备而言,他的内存大小和其工作功能息息相关。某些设备可能只需要占用很小的一部分内存,而某些大型设备则需要大量的内存来存储数据和指令。 为了查看QNX设备的内存大小,可以使用QNX Neutrino的内存管理工具。该工具提供了一些重要的命令,包括vmstatmemstat和top。下面将简单介绍这三个命令的用法。 vmstat命令用于监测系统内存使用和处理器活动情况。要使用该命令,只需在命令行中输入“vmstat”即可。该命令将返回系统当前的内存使用情况以及CPU的活动情况。 memstat命令用于显示QNX系统的内存使用情况和系统内存区域的详细信息。要使用该命令,只需在命令行中输入“memstat”即可。该命令将返回系统当前的内存使用情况,包括内存总量、可用内存、缓存和虚拟内存等方面的详细信息。 top命令用于监测QNX系统中各个进程的CPU和内存活动情况。通过该命令,用户可以了解系统中各个进程的当前状态以及占用资源的情况。要使用该命令,只需在命令行中输入“top”即可。 除了以上三个命令,还可以使用cat /proc/meminfo命令查看内存信息并了解设备内存的使用情况。 总之,在QNX系统中,可以使用多种不同的命令查看设备内存大小。用户可以根据自己的需要选择最合适的命令进行监测。同时在使用这些命令时,还需要注意分析返回的数据,以便确定设备内存使用情况是否正常。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值