在Linux系统中,内存的两个关键指标是物理内存(Physical Memory)和交换空间(Swap)。理解这两个概念有助于更好地管理系统资源,优化性能,并确保系统的稳定性。
大家对于物理内存来说并不陌生,在我们身边非常多的设备都需要用到它,比如手机、计算机、广告大屏等等。物理内存在各种设备和系统中都发挥着重要作用,它直接影响系统的性能和运行速度。更大的物理内存可以容纳更多的程序和数据,从而减少对硬盘交换空间的需求,提高系统的响应速度和整体性能。
然而,交换空间Swap大家就变得陌生了,Swap是一种虚拟内存技术,它将硬盘的一部分空间虚拟成一部分内存,我们常称为虚拟内存。当系统的物理内存(RAM)不足时,操作系统会将一些物理内存数据移到Swap空间,从而释放物理内存以供其他进程使用。
通过将数据移到Swap空间,操作系统可以实现内存的虚拟扩展,尽管速度会比物理内存慢得多,但这仍然是一种有效的解决方案,可以帮助系统保持运行。然而,频繁地使用Swap会导致性能下降,因此最好还是保持足够的物理内存来避免过多的Swap使用。
free内存监控命令
free命令提供了一种简单的方式来查看系统内存使用情况,默认输出的内容是以千字节(KB)为单位,以下是一个free命令输出示例。
free命令常用的参数
free -h:以人类可读的格式显示内存信息(例如:以 KB、MB 或 GB 为单位)
free -m:以MB为单位显示内存信息
free -g:以GB为单位显示内存信息
-s <秒数>:以指定的时间间隔(以秒为单位)重复显示内存信息。例:free -h -s 3
-V:显示free命令的版本信息。
物理内存指标(Mem行)
**total(总内存大小):**这是系统中物理内存的总量。总内存计算公式:total = used + free + buffers + cache(buffers、cache就是buff/cache),以当前free命令输出内容为例,110400+1036196+636732=1783328。通过该公式计算的总内存total,可能会有些许数值的误差,这是因为Linux内核可能在后台进行一些内存管理操作,这些操作可能会在你运行free命令时发生,导致瞬间的内存使用变化。
**used(已用内存):**这是指系统当前正在使用的内存总量,包括正在运行的进程、系统服务所占用的内存和共享内存。计算公式为used = total - free - buffers - cache。
**free(未使用的内存):**这个值仅仅表示没有被分配给任何进程或用于缓冲、缓存的内存。通常这个值会比较低,因为Linux操作系统会尽量利用空闲内存进行缓冲和缓存,以提高系统性能。该数值仅能帮助你了解当前系统中完全空闲的内存量,但是它不能反映系统在需要时能够提供的内存总量。
**shared(共享内存):**指多个进程可以同时访问和使用的内存区域,共享内存通常用于进程间通信或共享相同的数据以减少内存使用。
示例
假设系统中有以下内存使用情况:
进程A使用了100 MB的内存,其中20 MB是共享内存,那么进程A独占的内存是100 MB - 20 MB = 80 MB。
进程B使用了150 MB的内存,其中20 MB是与进程A共享的内存,那么进程B独占的内存是150 MB - 20 MB = 130 MB。
进程B与进程A共享的内存是20 MB。
在这种情况下:
已用内存是 (80 + 130 + 20 = 230 ) MB。因为已用内存(used)统计包含了shared内存,共享内存是系统已用内存的一部分。理解这一点有助于更准确地评估系统的内存使用情况。
**buff/cache(缓冲和缓存):**这里的buff/cache指Buffer Cache+Page Cache两个数值的合并,缓冲和缓存可以显著的提高系统的I/O性能,因为访问内存的速度远远快于访问磁盘的速度,通过缓存常用数据,系统可以减少磁盘I/O操作,从而提高整体性能。当系统内存不足时,Linux内核会智能地管理这些缓存区,自动释放部分缓存,以满足其他进程的内存需求,这意味着buff/cache的内存并不是"浪费"的,即使它被标记为已使用,也可以在需要时被重新分配。
- Buffer Cache用于在数据被写入磁盘之前,它可以加快数据的写入速度,因为数据首先被写入内存中的缓冲区,而不是直接写入磁盘。
- Page Cache用于缓存从磁盘读取的文件数据到内存中,以便在需要时可以快速访问,而不必每次都从磁盘读取。这大大提高了文件访问的速度。
**available(可用的内存):**这个值综合考虑了当前的内存使用情况,包括缓存和缓冲区中的内存。它通过一种启发式算法计算出来,考虑了哪些内存块可以在需要时被回收,它是真正可用内存的总量。因为Linux系统的缓存机制,会将进程未使用的内存用于缓存,所以free和available的区别在于:
- free表示当前完全未被使用的内存,即没有被任何进程或用于缓存的内存。
- available则表示在不影响系统性能的情况下,实际可供新进程使用的内存。它不仅包括free内存,还包括可以通过释放缓存和缓冲区获得的内存。
此处大家可能所有疑问,available是不是free + buffers + cache呢?这种说法是为了简化解释,粗暴的可以这样认为,但是这样计算并不准确。
**举例:**我们通过上面的示例计算得出,1036196+636723>1380176,即free + buffers + cache 大于 available,这里差值可能包括一部分被系统保留的内存以及内存管理机制,所以不能简单地将这个差值理解为系统中"必须占用的内存"。
相比物理内存,Swap虚拟交换内存的指标确实更为直观。Swap空间是系统用于临时存储数据的区域,主要用于扩展物理内存的容量。以下是对Swap空间各项指标的详细说明:
total: 总的Swap空间,指系统中配置的所有Swap区域的总容量。
used: 已使用的Swap空间,表示当前已被占用的Swap容量。
free: 未使用的Swap空间,指当前未被占用的Swap容量,可以用于存储新的数据。
此外,Swap空间的使用情况可以反映系统的内存压力。过多的Swap使用可能会导致系统性能下降。因此,监控Swap空间的使用情况对于优化系统性能也很重要。
创建启用swap分区见:https://blog.whsir.com/post-6395.html