收藏

【free】 free -h 解读

2023-05-03  本文已影响0人  Bogon

对 free -h的输出做一个解读


# free -h

              total        used        free      shared  buff/cache  available

Mem:          251G        130G        2.4G        3.0G        118G        116G

Swap:          15G        15G          0B

image.png

这个输出是通过在Linux服务器上运行"free -h"命令得到的,它展示了服务器当前的内存使用情况。

总的来说,这个输出展示了服务器内存的使用情况和可用情况。

其中,used和buff/cache两项占用了大部分内存,说明服务器正在使用大量内存,而free和available两项则显示了服务器还有一定的可用内存,但是不足以满足大量的内存需求。

需要进一步分析服务器的内存使用情况,以决定是否需要增加内存或者优化内存使用效率。

此时,在该服务启动一个初始内存占用比较大的进程,启动失败是什么原因?

如果在这种情况下启动一个初始内存占用比较大的进程失败,可能是因为服务器上的内存已经被占用了很大一部分,而剩余的可用内存不足以满足新进程的内存需求,导致启动失败。

可能的解决方法包括:

  1. 优化服务器上正在运行的进程的内存使用效率,释放一些占用内存较多的进程,让出更多的内存空间。

  2. 增加服务器的内存,提高可用内存的容量,以满足新进程的内存需求。

  3. 调整新进程的内存使用策略,减少其初始内存占用量,以适应当前服务器内存使用情况。

需要根据具体情况进行分析和决策。

buff/cache 和 free 下的内存有什么区别?

在Linux系统中,buff/cache和free都是内存缓存,但它们的含义和用途略有不同。

buff/cache,也称为page cache,是Linux系统的文件缓存。
当文件被读取到内存中时,它们会被存储在page cache中,以便未来更快地访问它们。当需要释放内存时,系统会自动将page cache中的文件数据从内存中移除,以腾出更多的可用内存。因此,buff/cache占用的内存可以被视为系统为了提高文件读取性能而预留的缓存,可以被释放给其他进程使用。

free表示当前未被使用的内存。它包括系统为缓存预留的内存和未被其他进程占用的内存。这部分内存可以被分配给新的进程使用,因此free的值可以反映出系统当前可用内存的情况。

总的来说,buff/cache和free都是系统中未被占用的内存,但buff/cache占用的内存是为了提高文件读取性能而预留的缓存,可以被释放给其他进程使用,而free则是未被占用的内存,可以被分配给新的进程使用。

buff/cache 显示的内存, buff 和 cache 有什么区别和联系?

在Linux系统中,buff和cache都是指用于缓存数据的内存区域,它们的主要区别在于缓存的内容不同。

因此,buff和cache都是用于提高系统文件读写性能的缓存机制,它们的联系在于都是用于缓存数据的内存区域,但缓存的内容不同,buff缓存块设备的数据,cache缓存文件的数据。

在Linux系统中,buff和cache都是内存缓存的一部分,但它们具有不同的作用和特点。

buff(Buffer Cache)是用于缓存磁盘I/O数据的一种内存缓存。当磁盘数据被读取到内存中时,它们会被存储在buff中,以便未来更快地访问它们。当需要释放内存时,系统会自动将buff中的数据从内存中移除,以腾出更多的可用内存。buff通常用于缓存较小的数据块,如文件系统的元数据、目录项等。

cache(Page Cache)是用于缓存文件数据的一种内存缓存。当文件被读取到内存中时,它们会被存储在cache中,以便未来更快地访问它们。与buff不同的是,cache用于缓存较大的数据块,如文件内容等。当需要释放内存时,系统会自动将cache中的文件数据从内存中移除,以腾出更多的可用内存。

因此,buff和cache都是用于缓存数据的内存缓存,但它们所缓存的数据类型和大小不同。buff主要用于缓存磁盘I/O数据,而cache主要用于缓存文件数据。同时,由于buff和cache都是内存缓存,它们的释放也是相互关联的,当系统需要释放内存时,会同时考虑buff和cache中的数据,以便腾出更多的可用内存。

如何理解 available 下的内存?

在Linux系统中,available表示系统可用的内存总量,不包括已经被系统缓存或者保留的内存。具体来说,available指的是系统当前可用的空闲内存加上缓存的内存(包括buff/cache)和交换空间的内存。

在实际应用中,available的值比free更能反映系统可用的内存情况。因为free只考虑了系统当前空闲的内存,而没有考虑已经被缓存或者保留的内存。而available则考虑了缓存和交换空间的内存,可以更准确地反映系统的内存使用情况。

需要注意的是,available的值是根据当前系统内存使用情况计算得出的,因此随着系统内存使用的变化,available的值也会发生变化。

available 中包括了 swap 吗?

available中包括了交换空间(swap)的内存。
在Linux系统中,如果物理内存不足,系统会将一部分内存数据交换到交换空间中,以释放物理内存。当系统需要使用这些被交换出去的内存时,会将其重新换回物理内存中,这个过程被称为“换入(swap in)”和“换出(swap out)”。

因此,available的值包括了系统当前可用的空闲内存加上缓存的内存(包括buff/cache)和交换空间的内存,这个值可以反映系统当前可用的内存总量,不管是物理内存还是交换空间的内存。

swap已经被全部使用,做何解读?

上面的输出中,Swap: 15G,used: 15G,free: 0B,表示系统中15G的交换空间已经全部被使用,没有剩余的空间可用。这意味着系统当前物理内存已经无法满足应用程序的内存需求,因此系统将一部分内存数据交换到交换空间中,以释放物理内存。

当系统中的交换空间被全部使用时,系统的性能会受到影响,因为交换空间的使用需要涉及硬盘的读写操作,而硬盘的读写速度相对于内存来说非常慢,会导致系统的响应速度变慢。因此,当系统中的交换空间被大量使用时,需要考虑增加物理内存或者优化应用程序的内存使用方式,以避免系统的性能下降。

$ df -hT

Filesystem                        Type      Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root             xfs       300G   13G  288G   5% /
devtmpfs                          devtmpfs  126G     0  126G   0% /dev
tmpfs                             tmpfs     126G     0  126G   0% /dev/shm
tmpfs                             tmpfs     126G  4.0G  122G   4% /run
tmpfs                             tmpfs     126G     0  126G   0% /sys/fs/cgroup
/dev/sda2                         xfs       497M  164M  334M  33% /boot
/dev/sda1                         vfat      500M  9.8M  490M   2% /boot/efi
/dev/mapper/vg_data-lv_data       xfs        893G   92G  802G  11% /data
tmpfs                             tmpfs      26G   12K   26G   1% /run/user/42
tmpfs                             tmpfs      26G     0   26G   0% /run/user/1001
tmpfs                             tmpfs      26G     0   26G   0% /run/user/1003

$ free -h 
              total        used        free      shared  buff/cache   available
Mem:           251G        109G         43G        4.8G         98G        136G
Swap:           15G          0B         15G

可以看到,当存盘数据量远小于总内存时,根本就还用不到swap。

参考

Linux系统中的Page cache和Buffer cache
https://zhuanlan.zhihu.com/p/35277219
https://blog.51cto.com/ultrasql/1627647

Linux Page Cache调优在Kafka中的应用
https://zhuanlan.zhihu.com/p/190983603

Linux内存机制以及手动释放swap和buffer和cache
https://blog.51cto.com/wendashuai/2506103

解决Linux buffer/cache内存占用过高的办法
http://ziduhaoziweizhi.com/index.php/archives/107/

上一篇 下一篇

猜你喜欢

热点阅读