经过研究,仍然对监视RAM使用情况感到困惑


10

我仔细阅读了这篇文章,其中介绍了各种检查RAM使用率的方法。但是,我无法调和不同的方法,也不知道哪种方法正确。

首次登录时,会看到如下屏幕:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

这向我表明我正在使用我的RAM的41%,这似乎很高,因为服务器工作不多。还是那个数字是指RAM以外的东西?

接下来,我尝试该free -m方法:

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

根据文章中的说明图,这意味着我有130MB的已用RAM和459MB的可用RAM,这表明我正在使用约22%的RAM。

接下来我运行top

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

这是最令人困惑的,因为摘要显示我总共使用了604MG的525MG,但是当使用“ m”交互式命令按顶部内存排序时,顶部进程仅使用0.3%的内存?

最后,该ps命令似乎也显示很少的内存使用情况:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

我希望有人纠正我造成这些明显冲突的任何误解。

谢谢!

编辑拉胡尔

的输出cat /proc/meminfo

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB

#1)在顶部由存储器排序的命令不是,它的中号。#2)要查看所有进程,请尝试** ps ax -o command,rss **; 您所跑的只是显示您自己的。
2013年

也请更新我们的输出cat /proc/meminfo
Rahul Patil


@tink,感谢您的解释。我想ps ax -o rss | awk '{ sum+=$1} END {print sum}'刚才和153156.
乔纳

@ RahulPatil,OP已更新。请注意,正在运行的进程可能与原始编号略有不同,但相差不远。另外,我为您得到的结果似乎与上面评论中我得到的结果不符。这些仅相隔几分钟。
约拿(Jonah)2013年

Answers:


8

您只需要了解记忆概念

根据/ proc / meminfo的输出,您只需要注意以下几点:

缓冲区:-缓冲区是尚未“写入”到磁盘的东西。它表示有多少RAM专用于缓存磁盘块。“缓存”类似于“缓冲区”,只是这一次它缓存文件读取中的页面

缓存:-缓存是从磁盘“读取”并存储以备后用的东西。通常,您可以将缓存区域视为另一个“空闲” RAM,因为如果应用程序需要更多内存,它将逐渐缩小。

足以理解“缓冲区”和“缓存”都代表系统缓存的大小。它们根据内部Linux内核机制的要求动态地增长或缩小。

在虚拟主机上,它们确实使用以下cmd :(主要在cron中配置)缓存清除:

sync && echo 3 > /proc/sys/vm/drop_caches

报价链接

编辑一个需求,即每个用户的内存使用情况

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

请检查上面的脚本,并让我知道,是否正确显示。


谢谢拉胡尔。最后一个问题。由于free -m没有提供查看每个用户使用的内存的方法,因此确定特定用户正在消耗多少实际RAM的准确方法是什么?例如,当监视共享服务器上自己的内存使用时,就会出现这种情况。
约拿(Jonah)

@Jonah我已更新..请检查并让我知道
Rahul Patil

该脚本无法正常工作。.但我正在尝试尽快更新
Rahul Patil

@Jonah感谢您接受我的回复。.但是对MichaelHampton表示真正的感谢...
Rahul Patil

2

好的答案@RahulPatil。

关于ps或top的另一点考虑如下

此工具[exmap]比ps或top更准确,因为它考虑了多个应用程序正在使用的共享库。例如,如果两个应用程序使用相同的共享库(占用1MB内存),则ps将显示两个应用程序使用1MB的额外内存,而exmap更正确地显示每个应用程序使用500 KB的内存。更高的准确性对于评估桌面环境(例如KDE和GNOME)尤其重要,因为桌面环境大量使用了应用程序之间共享的库。

通过ibm / developerworks / linux_memory

由于您的问题是针对无头服务器的-我不确定top或ps实际将有多少个重复报告。


0

我担心我们可能会忽略明显的东西,因为对我们大多数人来说,这是“当然的”。

乔纳,如果我错了,请原谅我,但您的问题听起来好像您可能尚未意识到所有这些值(尤其是CPU使用率)之间的差异通常会相差很大。

随着新进程的启动,CPU使用率可能会立即从一位数上升到100%,但很快(希望)降到50%以下的范围。

内存使用的变化速度较慢,但​​是Linux通过运行进程来“缓存”磁盘访问,从而尝试使用未处于活动状态的内存。例如,它试图预测接下来需要从磁盘读取的内容,例如在读取一部分之后可能要读取的大文件的其余部分,然后将其预加载到缓存中。一些内存使用值包括进程使用的内存以及用于缓存的内存。在已经运行了一段时间的系统上,两者的总和可能达到80-90%或更高。

也请考虑您运行以显示使用情况的过程,例如top,也会占用CPU和内存。如果编写带有循环的脚本来连续报告CPU使用情况,则几乎可以肯定会显示100%,因为报告使用情况本身的行为(不sleep 引发任何 延迟)使用了所有CPU。


Doc,感谢您的想法,但这不是问题所在
约拿书(Jonah)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.