AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 38065
Accepted
His
His
Asked: 2009-07-09 18:07:28 +0800 CST2009-07-09 18:07:28 +0800 CST 2009-07-09 18:07:28 +0800 CST

如何使用 vmstat 获取 % 内存使用率?

  • 772

我需要从 vmstat 获取以 % 为单位的内存使用情况,但我不太了解 vmstat 中显示的与内存相关的一些数字。

特别是,给定这样的输出

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 139728  45396 199128 1236360    1    2     4   622    3    1 51  4 43  2  0

系统的总内存量是多少?是 'swpd' + 'free' + 'buff' + 'cache',一共是 1620612?

系统的可用内存量是多少?是 45396,显示在“免费”列中吗?

问题是他们没有加起来甚至看起来接近“顶部”报告的内容。我与上面的“vmstat”大约同时使用的“top”的输出是:

[...]
Mem:   4059616k total,  3965504k used,    94112k free,   200020k buffers
[...]

所以...我假设'vmstat'中必须有我不知道的隐藏数字/选项?

为此,我需要使用“vmstat”而不是其他命令,因为这是要求的内容。

所以理想情况下,我想从“vmstat”实现的是内存使用百分比,如:

<used_memory>/<total_memory> * 100%.

谢谢!

linux memory vmstat
  • 4 4 个回答
  • 51506 Views

4 个回答

  • Voted
  1. Best Answer
    Evan Anderson
    2009-07-09T18:30:19+08:002009-07-09T18:30:19+08:00

    您正在寻找的是“免费”的输出:

    $ free
                 total       used       free     shared    buffers     cached
    Mem:        775556     759456      16100          0      22132     592484
    -/+ buffers/cache:     144840     630716
    Swap:       500344      21972     478372
    

    这是一个游览:

    这是一个带有 768MB 物理 RAM 和 500344KB 交换分区的盒子。

    759456KB 已“使用”(第二列,顶行)。在这个“已用”内存中,23132KB 是缓冲区(第 5 列,顶行),592484KB(第 6 列,顶行)是高速缓存,剩下 144840KB(第 2 列,第 2 行)物理内存正在被活动进程使用。

    当您考虑缓冲区和高速缓存使用的内存可用于进程时,剩下 630716KB(第 3 列,第 2 行)物理内存可用。

    正如我所说,交换分区是 500344KB(第一列,底行)。交换文件的 21972KB(第 2 列,底行)正在使用中,剩余 478372KB(第 3 列,底行)空闲。

    因此,您对可用内存百分比的定义取决于您是否计算缓冲区和缓存,以及是否计算交换。

    这应该足以让您继续计算您认为合适的百分比。


    这是 top 和 free 的输出:

    $ top -n1 | grep "used," ; free
    Mem:    775556k total,   751472k used,    24084k free,    20776k buffers
    Swap:   500344k total,    21972k used,   478372k free,   586648k cached
    
                 total       used       free     shared    buffers     cached
    Mem:        775556     751344      24212          0      20776     586648
    -/+ buffers/cache:     143920     631636
    Swap:       500344      21972     478372
    

    您可以看到 top 和 free 是如何达成一致的(尽管有一点不同——这是一台多用户机器,并且 top 和 free 程序的内存使用情况都反映在其中)。


    调用 vmstate 时添加一个“-s”,您将看到几乎相同的输出,只是形式不同:

    $ vmstat -s ; free
           775556  total memory
           759920  used memory
           674680  active memory
            18440  inactive memory
            15636  free memory
            21892  buffer memory
           594372  swap cache
           500344  total swap
            21972  used swap
           478372  free swap
           ... output truncated ...
    
                 total       used       free     shared    buffers     cached
    Mem:        775556     759920      15636          0      21892     594372
    -/+ buffers/cache:     143656     631900
    Swap:       500344      21972     478372
    

    您可以看到 vmstat 将所有相同的数字显示为空闲。

    • 21
  2. Chienchi Lo
    2016-08-17T14:51:03+08:002016-08-17T14:51:03+08:00

    我和你有同样的问题并想出一个公式

    vmstat -s | awk  ' $0 ~ /total memory/ {total=$1 } $0 ~/free memory/ {free=$1} $0 ~/buffer memory/ {buffer=$1} $0 ~/cache/ {cache=$1} END{print (total-free-buffer-cache)/total*100}'
    

    我已经在 procps-ng 3.3.10 的 vmstat 版本和 procps-ng 3.3.9 的 vmstat 上对其进行了测试

    • 2
  3. Aaron Bush
    2009-07-09T18:28:48+08:002009-07-09T18:28:48+08:00

    我建议您通读这本 IBM 红皮书“Linux 性能和调优指南”(http://www.redbooks.ibm.com/abstracts/redp4285.html?Open)。它包含许多命令返回的数据的详细信息,应该对您有所帮助。

    我通常在 Linux 中使用“free”命令或“cat /proc/meminfo”。

    • 1
  4. agc
    2019-05-15T01:34:17+08:002019-05-15T01:34:17+08:00

    这是一个POSIX shell 函数,它将所需的百分比向下舍入到最接近的整数(出于脚本目的,这可能更有用,因为POSIX shell 算术比较测试仅适用于整数):

    # Vmstat (derived) Used Ram Percent
    vurp() { vmstat -s | { read a b ; read c d ; echo $((100*$c/$a)) ; } ; }
    vurp
    

    输出(在我的系统上):

    12
    

    同样的事情,与free:

    furp() { free | { read z; read a b c d; echo $((100*$c/$b)) ; } }
    
    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve