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

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

我经历了本文,其中解释了检查 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%

这对我来说表明我使用了 41% 的 RAM,这看起来相当高,因为服务器没有做太多事情。或者这个数字是否指的是 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     

这是最令人困惑的,因为摘要显示我总共使用了 604M 中的 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

你只需要理解内存概念

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

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

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

只要理解“buffers”和“Cached”都代表系统缓存的大小就足够了。它们根据内部 Linux 内核机制的要求动态增长或收缩。

在 Webhosting,他们使用以下 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

请检查上面的脚本并告诉我它是否正确显示。

答案2

很好的答案@RahulPatil。

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

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

通过ibm/developerworks/linux_memory

由于您的问题涉及无头服务器 - 我不确定 top 或 ps 实际上会有多少双重报告。

答案3

我担心我们可能会忽视显而易见的事情,因为这对我们大多数人来说都是“理所当然的”。

Jonah,如果我错了,请原谅我,但你的问题听起来好像你可能没有意识到所有这些值,特别是 CPU 使用率,通常会随着时间的推移而变化很大。

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

内存使用情况变化较慢,但 Linux 尝试通过运行“缓存”磁盘访问的进程来使用未主动使用的内存。例如,它尝试预测接下来需要从磁盘读取什么,例如读取一部分后可能是大文件的其余部分,并将其预加载到缓存中。一些内存使用值包括进程使用的内存以及用于缓存的内存。在已经运行了一段时间的系统上,两者加起来可能会达到 80-90% 或更多。

还要考虑您运行的用于显示使用情况的进程(例如 )top也使用 CPU 和内存。如果您编写一个带有循环的脚本来连续报告 CPU 使用情况,它几乎肯定会始终显示 100%,因为报告使用情况本身的行为(没有 sleep 引入一些延迟)使用了所有 CPU。

相关内容