百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux系统中查看内存信息的方法有哪些?

wxin55 2024-10-30 04:36 9 浏览 0 评论

在Linux系统中,查看内存信息是管理系统性能和调优的重要环节之一。通过不同的命令,可以获取内存的使用情况、进程占用等详细信息,从而有效地分析和优化系统资源的分配。以下是几种常见的查看内存信息的方法,并结合对每个命令的详细解释与内存管理原理的分析。

一、使用free命令查看内存信息

示例:

free

输出说明:

              total        used        free      shared  buff/cache   available
Mem:        16352964     8303280     2385964      369008     5663748     7488496
Swap:       16777212      104824    16672388

解释:

  • total: 系统中的总物理内存。
  • used: 已使用的内存,包括应用程序和操作系统内核使用的内存。
  • free: 当前未使用的内存。
  • shared: 共享内存,主要用于进程间通信。
  • buff/cache: 用于缓存文件系统数据的内存。
  • available: 可供应用程序使用的内存,它是通过对 free命令的优化算法计算出来的,更为精确。

原理:

在Linux系统中,操作系统会尽可能多地使用空闲内存来缓存文件、目录等,以提高系统的读取效率。当其他程序需要内存时,Linux会根据需要释放缓存。因此,free命令中显示的 free内存可能较少,而 available值才是实际可用内存的准确反映。


二、使用top命令监控内存使用

示例:

top

解释:

top 命令可以实时显示系统中各个进程的资源使用情况,其中包括内存使用。按 M键,可以按照内存占用进行排序,方便管理员识别出内存使用量较大的进程。

输出说明:

%MEM  VIRT      RES     SHR   S  CPU%   MEM%  TIME+   COMMAND
  3.1  454.0m   52.0m  7.3m  S   0.0    1.5   0:01.22  firefox
  2.9  538.0m   49.6m  4.9m  S   0.0    1.4   0:02.32  gnome-shell
  • %MEM: 进程占用的物理内存比例。
  • VIRT: 进程的虚拟内存大小。
  • RES: 进程使用的物理内存量(即驻留集大小)。
  • SHR: 共享内存的大小。
  • COMMAND: 进程名。

原理:

在多任务操作系统中,Linux会分配物理内存和虚拟内存。VIRT表示进程总共申请的内存,而 RES代表真正占用的物理内存。进程会申请更多的虚拟内存以应对未来需要,但未必全都使用。因此,物理内存中的实际使用量由 RES字段反映。


三、使用htop命令(交互式视图)

示例:

htop

解释:

htop命令类似于 top,但提供了一个更丰富的交互式界面,且易于使用。它可以直观地显示CPU、内存、交换分区的使用情况,还支持鼠标操作,可以通过颜色和图形化显示,让用户快速识别出内存使用高的进程。

输出说明:

  • Memory Bar: 图形化显示内存使用情况,颜色区分应用程序使用的内存、缓存和缓冲区。
  • Swap Bar: 显示交换分区的使用情况。
  • 进程详细信息:包括进程ID(PID)、用户、CPU使用率、内存使用率等。

原理:

htop的运行原理类似 top,但 htop支持更直观的排序和筛选功能,尤其是在大规模系统监控中表现更为优异。通过图形化显示内存使用情况,管理员可以一目了然地识别出哪个进程消耗了最多的资源,甚至可以在 htop界面中直接终止进程。


四、使用cat /proc/meminfo查看详细的内存信息

示例:

cat /proc/meminfo

输出说明:

MemTotal:        16352964 kB
MemFree:          2385964 kB
Buffers:           466484 kB
Cached:           4193260 kB
SwapCached:         13660 kB
Active:           8543340 kB
Inactive:         4382764 kB
...

解释:

/proc/meminfo是一个虚拟文件,包含了内存的详细信息。它不仅显示物理内存和虚拟内存的使用情况,还包括缓冲区、缓存、活动内存、非活动内存等。

  • MemTotal: 系统的总内存。
  • MemFree: 当前未使用的内存。
  • Buffers: 用于缓冲块设备的数据。
  • Cached: 已缓存的文件系统数据。
  • Active: 正在使用或最近使用的内存。
  • Inactive: 最近未使用的内存,可能会被交换。

原理:

/proc/meminfo文件提供了内存管理的底层信息。Linux系统通过将内存分为活动和非活动部分,有效管理内存资源。活动内存指的是近期频繁使用的内存,而非活动内存则可以在需要时被交换或释放。


五、结合内存管理原理的解释表

项目

含义

说明

Total Memory

总内存

系统中安装的物理内存总量。

Used Memory

已使用内存

当前被操作系统及进程占用的内存。

Free Memory

空闲内存

目前尚未使用的内存。

Buffers/Cache

缓冲区/缓存

用于缓存数据的内存,系统可根据需要释放这些内存。

Available Memory

可用内存

系统可以调度给进程使用的内存,这个值比Free更准确。

Swap Memory

交换分区内存

当物理内存不足时,系统将部分数据存储到交换分区中。

Shared Memory

共享内存

进程间共享的内存。

Active Memory

活动内存

目前正在被使用或最近被使用的内存,通常不会被交换出去。

Inactive Memory

非活动内存

最近未使用的内存,可能被系统交换或释放。

Cached Memory

缓存的内存

文件系统缓存,以加速文件读取操作。


六、内存查看命令的对比分析

命令

简单度

适用场景

输出信息

可交互性

安装需求

free

简单查看系统内存状态

显示系统总内存、可用内存、缓存等

top

监控进程内存和CPU占用情况

实时显示进程的资源占用情况

htop

图形化监控系统资源占用

图形化显示内存、CPU使用情况

需要安装

cat /proc/meminfo

获取详细的内存使用信息

包含丰富的内存使用细节信息


通过以上方法,Linux系统管理员可以从不同角度查看系统内存的使用情况。对于简单的内存使用查询,free命令提供了基础的系统信息。而 top和 htop命令则能够动态监控系统的内存使用,帮助管理员快速找到资源消耗较大的进程。对于详细分析,cat /proc/meminfo则提供了底层的内存管理信息。

相关推荐

ES6中 Promise的使用场景?(es6promise用法例子)

一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...

JavaScript 对 Promise 并发的处理方法

Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...

Promise的九大方法(promise的实例方法)

1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...

360前端一面~面试题解析(360前端开发面试题)

1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...

前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?

Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...

最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式

看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...

前端分享-Promise可以中途取消啦(promise可以取消吗)

传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...

手写 Promise(手写输入法 中文)

前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...

什么是 Promise.allSettled()!新手老手都要会?

Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...

前端面试-关于Promise解析与高频面试题示范

Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...

宇宙厂:为什么前端离不开 Promise.withResolvers() ?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...

Promise 新增了一个超实用的 API!

在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...

一次搞懂 Promise 异步处理(promise 异步顺序执行)

PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...

Promise 核心机制详解(promise机制的实现原理)

一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...

javascript——Promise(js实现promise)

1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...

取消回复欢迎 发表评论: