Linux中用free命令查看内存占用情况

本文详细介绍了Linux系统中使用free命令查看内存使用情况的方法,并解析了内存各组成部分的意义,包括物理内存、缓存、交换空间等,帮助理解Linux内存管理机制。

free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。

1命令格式:

free [参数]

2命令功能:

free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略

3命令参数:

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

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

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

-g   以GB为单位显示内存使用情况。 

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

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

-t  显示内存总和列。 

-V  显示版本信息。 

4使用实例:

实例1:显示内存使用情况

命令:

free

free -g

free -m

输出:

[root@SF1150 service]# free

                total              used              free                   shared    buffers       cached

Mem:      32940112   30841684    2098428          0              4545340   11363424

-/+ buffers/cache:       14932920   18007192

Swap:     32764556   1944984      30819572

[root@SF1150 service]# free -g

                    total       used       free     shared    buffers     cached

Mem:            31         29          2          0              4               10

-/+ buffers/cache:     14         17

Swap:           31          1           29

[root@SF1150 service]# free -m

                   total          used         free            shared    buffers     cached

Mem:         32168      30119       2048          0             4438        11097

-/+ buffers/cache:      14583      17584

Swap:        31996      1899         30097

说明:

下面是对这些数值的解释:

total:总计物理内存的大小。

used:已使用多大。

free:可用有多少。

Shared:多个进程共享的内存总额。

Buffers/cached:磁盘缓存的大小。

(-buffers/cache) used内存数:指的第一部分Mem行中的used - buffers - cached
(+buffers/cache) free内存数: 指的第一部分Mem行中的free + buffers + cached
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

第四行是交换分区SWAP的,也就是我们通常所说的虚拟内存。

区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是2098428KB,已用内存是30841684KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.

第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。

如本机情况的可用内存为:

18007156=2098428KB+4545340KB+11363424KB

接下来解释什么时候内存会被交换,以及按什么方交换。 

当可用内存少于额定值的时候,就会开会进行交换.如何看额定值: 

命令:

cat /proc/meminfo 

输出:

[root@SF1150 service]# cat /proc/meminfo

MemTotal:     32940112 kB

MemFree:       2096700 kB

Buffers:       4545340 kB

Cached:       11364056 kB

SwapCached:    1896080 kB

Active:       22739776 kB

Inactive:      7427836 kB

HighTotal:           0 kB

HighFree:            0 kB

LowTotal:     32940112 kB

LowFree:       2096700 kB

SwapTotal:    32764556 kB

SwapFree:     30819572 kB

Dirty:             164 kB

Writeback:           0 kB

AnonPages:    14153592 kB

Mapped:          20748 kB

Slab:           590232 kB

PageTables:      34200 kB

NFS_Unstable:        0 kB

Bounce:              0 kB

CommitLimit:  49234612 kB

Committed_AS: 23247544 kB

VmallocTotal: 34359738367 kB

VmallocUsed:    278840 kB

VmallocChunk: 34359459371 kB

HugePages_Total:     0HugePages_Free:      0HugePages_Rsvd:      0Hugepagesize:     2048 kB

交换将通过三个途径来减少系统中使用的物理页面的个数:  

1.减少缓冲与页面cache的大小, 

2.将系统V类型的内存页面交换出去,  

3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。 

事实上,少量地使用swap是不是影响到系统性能的。

那buffers和cached都是缓存,两者有什么区别呢?

为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。

磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的。

Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,因为Buffer Cache就是缓存磁盘块的。但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。

Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。

简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。

所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.

如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。

实例2:以总和的形式显示内存的使用信息

命令:

 free -t 

输出:

[root@SF1150 service]#  free -t 

             total       used       free     shared    buffers     cached

Mem:      32940112   30845024    2095088          0    4545340   11364324

-/+ buffers/cache:   14935360   18004752Swap:     32764556    1944984   30819572Total:    65704668   32790008   32914660[root@SF1150 service]#

说明:

实例3:周期性的查询内存使用信息

命令:

free -s 10

输出:

[root@SF1150 service]#  free -s 10

             total       used       free     shared    buffers     cached

Mem:      32940112   30844528    2095584          0    4545340   11364380

-/+ buffers/cache:   14934808   18005304Swap:     32764556    1944984   30819572

             total       used       free     shared    buffers     cached

Mem:      32940112   30843932    2096180          0    4545340   11364388

-/+ buffers/cache:   14934204   18005908Swap:     32764556    1944984   30819572

说明:

10s 执行一次命令

 

<think> 首先,用户的问题是:“我想查找在Linux系统中查看当前已使用内存的方法 请问Linux系统查看当前已使用内存的方法”。这直接询问如何在Linux系统中查看当前已使用的内存。 从系统级指令中,我需要注意: - 所有行内数学表达式必须使用$...$格式(但这里可能不需要数学)。 - 独立公式用$$...$$(同样,可能不适用)。 - LaTeX语法正确(在回答中用LaTeX标记数学,但问题不涉及)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户提供了三个引用: - 引用[1]:关于free命令查看内存使用情况- 引用[2]:详细解释了top命令free命令- 引用[3]:讨论了du、df等,但用户明确说“并不是用户真正的需求”,并指示参考上一次的问题和我的回答。用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 用户提到的“上一次的问题”可能是指这个对话的上下文。在这个聊天中,用户的上一条消息就是这个查询,所以没有直接的“上一次回答”。但用户说“参考用户上一次的问题和你的回答”,可能意味着在这个聊天历史中,如果有之前的互动,但在这个特定对话中,这是用户的第一条消息(除了系统指令)。 回顾整个上下文: - 系统指令是给定的。 - 然后用户提供了引用和问题。 - 在用户消息中,用户说“请尽可能多的参考用户上一次的问题和你的回答”,但在这个线程中,没有先前的用户问题或我的回答。所以,我应该基于提供的引用和问题本身回答。 用户的需求是:查看Linux系统中当前已使用内存的方法。 从引用中: - 引用[1]提到free命令- 引用[2]详细描述了top和free命令- 引用[3]主要是关于磁盘使用,但提到du、df等,与内存关系不大,用户说不是真正需求。 所以,专注于free和top命令。 关键方法: 1. 使用free命令:它可以显示内存使用情况,包括已使用的内存。 2. 使用top命令:它可以实时显示进程信息,包括内存使用。 在回答中,我需要: - 结构清晰,逐步解释。 - 使用中文。 - 生成相关问题。 - 在引用段落末尾添加引用标识。 参考示例回答的结构: - 有一个标题或简介。 - 然后解释步骤。 - 可能包括代码片段(但这里是命令)。 - 最后生成相关问题。 对于引用标识:在回答中,当我引用或基于提供的引用时,添加[^1], [^2], [^3]。例如,提到free命令时引用[^1]和[^2]。 步骤: 1. 介绍方法:Linux系统中查看当前已使用内存的常用方法是通过free或top命令。 2. 详细解释free命令- 命令free -m(以MB显示) - 输出包含total, used, free, shared, buff/cache, available等字段。 - used显示已使用内存大小。 3. 详细解释top命令- 运行top,然后查看内存行(通常是第四行)。 - 显示物理内存总量、已使用量、空闲量等。 4. 其他方法:如ps命令或htop(如果用户知道),但专注于主要方法。 5. 确保语言中文。 生成相关问题: - 类似于示例:3个相关问题。 - 例如: 1. 如何解释free命令的输出? 2. top命令内存使用信息的含义是什么? 3. 如何监控内存使用以检测内存泄漏? 添加引用: - 当提到free命令时,添加[^1]和[^2]。 - 当提到top命令时,添加[^2]。 完整回答结构: - 开头:直接回答。 - 主体:分步解释方法。 - 结尾:生成相关问题。 </think> ### Linux系统查看当前已使用内存的方法 在Linux系统中,查看当前已使用内存是系统管理和故障排查的常见任务。常用方法包括使用`free`和`top`命令,这些工具可以直接显示物理内存的已使用量(used memory)。下面我将逐步解释这些方法,确保回答清晰可靠。所有命令均在终端中运行。 #### 步骤1: 使用`free`命令查看已使用内存 `free`命令查看内存使用情况的标准工具,它能快速显示系统内存总量、已使用量、空闲量等信息。输出中的**used**字段直接表示当前已使用内存(单位为KiB或MB)。 - **操作步骤**:直接在终端输入命令: ```bash free -m # 以MB为单位显示,便于阅读 ``` 示例输出: ``` total used free shared buff/cache available Mem: 7824 2468 3146 32 2209 4615 Swap: 2047 0 2047 ``` - **解释**: - `total`: 物理内存总量(例如7824MB)。 - `used`: **当前已使用内存**(例如2468MB),这是用户关注的核心数据。 - `free`: 空闲内存- `buff/cache`: 缓存和缓冲区占用内存(通常可回收)。 - `available`: 系统可用内存(包括可回收缓存)。 - **优点**: 命令简单,输出直观,适用于快速检查内存消耗[^1][^2]。 #### 步骤2: 使用`top`命令实时监控已使用内存 `top`命令提供实时进程监控,它不仅显示内存使用情况,还包括CPU、进程等详细信息。内存信息通常在输出的第四行(**Mem**行),其中**used**字段表示当前已使用内存- **操作步骤**: 1. 在终端输入命令: ```bash top ``` 2. 查看输出(按`q`退出): ``` top - 12:30:25 up 20:18, 1 user, load average: 0.05, 0.10, 0.15 Tasks: 83 total, 1 running, 82 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.5 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 8008.6 total, 2468.9 used, 3146.1 free, 4615.5 buff/cache MiB Swap: 2047.0 total, 0.0 used, 2047.0 free ...(进程列表) ``` - **解释**: - **MiB Mem行**: - `used`: **当前已使用内存**(例如2468.9MiB)。 - `free`: 空闲内存- `buff/cache`: 缓存和缓冲区(类似`free`命令)。 - **优点**: 实时更新,适合监控内存变化和进程级消耗;按`Shift+M`可基于内存使用排序进程[^2]。 #### 其他方法简要说明 - **`ps`命令**: 结合选项可查看特定进程的内存使用,但不直接显示系统级已使用内存总和。例如: ```bash ps aux --sort -rss | head # 按内存使用排序显示顶部进程 ``` 这有助于定位高内存进程,但不提供全局视图[^2]。 - **`htop`工具**: 更友好的交互式界面(需安装),显示类似`top`的内存信息。 - **GUI工具**: 如GNOME System Monitor,适合桌面用户,但命令行方法更通用。 **注意事项**: - `used`字段包括应用程序和内核使用的内存,但不包括缓存(`buff/cache`),缓存可被回收,因此`available`字段更能反映实际可用内存- 如果内存使用异常(如内存泄漏),可结合`free`和`top`分析高频进程[^1][^3]。 - 所有命令在大多数Linux发行版(如Ubuntu、CentOS)中内置,无需额外安装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值