如何了解linux服务器的内存使用情况和平均负载

Tim*_*Tim 60 linux memory top load-average

我正在使用具有 128GB 内存和 24 个内核的 linux 服务器。我使用 top 来查看它使用了多少。它的输出粘贴在帖子的末尾。这里有两个问题:

(1) 我看到每个正在运行的进程占用的内存百分比非常小(%MEM 不超过 0.2%,大多数只有 0.0%),但是如何使用总内存几乎就像第四行输出( “内存:总共 130766620k,已使用 130161072k,605548k 空闲,919300k 缓冲区”)?所有进程的内存使用百分比总和似乎不太可能达到几乎 100%,不是吗?

(2)如何理解第一行的平均负载(“平均负载:14.04、14.02、14.00”)?

感谢致敬!

编辑:

谢谢!

我也很喜欢听一些基于已用内存百分比的粗略数字来确定服务器是否负载过重,因为我曾经成为一个在不了解当前负载的情况下塞满服务器的人。

交换被认为与内存几乎相同吗?比如当内存和swap大小差不多的时候,如果内存快用完了,但是swap还是大体空闲的,我是不是可以只看内存+swap的使用比例还不高,运行其他新的流程?

您如何同时考虑 CPU 或内存(或内存 + 交换)的使用情况?如果它们中的任何一个或两者都达到太高,您会担心吗?

顶部的输出?

$顶

 
top - 12:45:33 up 19 days, 23:11, 18 users, load average: 14.04, 14.02, 14.00
任务:总共 484 个,运行 12 个,睡眠 472 个,停止 0 个,僵尸 0 个
Cpu(s):36.7%us、19.7%sy、0.0%ni、43.6%id、0.0%wa、0.0%hi、0.0%si、0.0%st
内存:总共 130766620k,已使用 130161072k,605548k 空闲,919300k 缓冲区
交换:总共 63111312k,已使用 500556k,空闲 62610756k,缓存 124437752k

  PID 用户 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令
 6529 桑切斯 18 -2 1075m 219m 13m S 100 0.2 13760:23 MATLAB
13210 蒂莫西 18 -2 48336 37m 1216 R 100 0.0 3:56.75 荒谬
13888 蒂莫西 18 -2 48336 37m 1204 R 100 0.0 2:04.89 荒谬
14542 蒂莫西 18 -2 48336 37m 1196 R 100 0.0 1:08.34 荒谬
14544 蒂莫西 18 -2 2888 2076 400 R 100 0.0 1:06.14 收集数据
 6183 桑切斯 18 -2 1133m 195m 13m S 100 0.2 13676:04 MATLAB
 6795 桑切斯 18 -2 1079m 210m 13m S 100 0.2 13734:26 MATLAB
10178 蒂莫西 18 -2 48336 37m 1204 R 100 0.0 11:33.93 荒谬 
12438 蒂莫西 18 -2 48336 37m 1216 R 100 0.0 5:38.17 荒谬
13661 蒂莫西 18 -2 48336 37m 1216 R 100 0.0 2:44.13 荒谬
14098 蒂莫西 18 -2 48336 37m 1204 R 100 0.0 1:58.31 荒谬
14335 蒂莫西 18 -2 48336 37m 1196 R 100 0.0 1:08.93 荒谬
14765 蒂莫西 18 -2 48336 37m 1196 R 99 0.0 0:32.57 荒谬
13445 蒂莫西 18 -2 48336 37m 1216 R 99 0.0 3:01.37 荒谬
28990 根 20 0 0 0 0 S 2 0.0 65:50.21 pdflush
12141 tim 18 -2 19380 1660 1024 R 1 0.0 0:04.04 顶部
 1240 根 15 -5 0 0 0 S 0 0.0 16:07.11 kjournald
 9019 根 20 0 296m 4460 2616 S 0 0.0 82:19.51 kdm_greet
    1 根 20 0 4028 728 592 S 0 0.0 0:03.11 初始化
    2 根 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
    3 根 RT -5 0 0 0 S 0 0.0 0:01.01 迁移/0
    4 根 15 -5 0 0 0 S 0 0.0 0:08.13 ksoftirqd/0
    5 根 RT -5 0 0 0 S 0 0.0 0:00.00 看门狗/0
    6 根 RT -5 0 0 0 S 0 0.0 17:27.31 迁移/1
    7 根 15 -5 0 0 0 S 0 0.0 0:01.21 ksoftirqd/1
    8 根 RT -5 0 0 0 S 0 0.0 0:00.00 看门狗/1
    9 根 RT -5 0 0 0 S 0 0.0 10:02.56 迁移/2
   10 根 15 -5 0 0 0 S 0 0.0 0:00.34 ksoftirqd/2
   11 根 RT -5 0 0 0 S 0 0.0 0:00.00 看门狗/2
   12 根 RT -5 0 0 0 S 0 0.0 4:29.53 迁移/3
   13 根 15 -5 0 0 0 S 0 0.0 0:00.34 ksoftirqd/3

小智 56

(1) 我看到每个正在运行的进程占用的内存百分比非常小(%MEM 不超过 0.2%,大多数只有 0.0%),但是如何使用总内存几乎就像第四行输出( “内存:总共 130766620k,已使用 130161072k,605548k 空闲,919300k 缓冲区”)?所有进程的内存使用百分比总和似乎不太可能达到几乎 100%,不是吗?

要查看您当前使用的内存量,请运行free -m。它将提供如下输出:

             缓存的已用空闲共享缓冲区总数
电话:2012 1923 88 0 91 515
-/+ 缓冲区/缓存:1316 695
掉期:3153 256 2896

顶行的“used”(1923)值几乎总是与顶行的 mem 值(2012)相匹配。由于 Linux 喜欢使用任何空闲内存来缓存磁盘块 (515)。

要查看的关键使用数字是缓冲区/缓存行使用值 (1316)。这是您的应用程序当前使用的空间量。为获得最佳性能,此数字应小于您的总 (2012) 内存。为了防止内存不足错误,它需要小于总内存 (2012) 和交换空间 (3153)。

如果您想快速查看有多少内存可用,请查看缓冲区/缓存行空闲值 (695)。这是总内存 (2012) - 实际使用 (1316)。(2012 - 1316 = 696,不是 695,这只是一个四舍五入的问题)

(2)如何理解第一行的平均负载(“平均负载:14.04、14.02、14.00”)?

这篇关于平均负载的文章使用了一个很好的流量类比,是我迄今为止发现的最好的类比:了解 Linux CPU 负载 - 您什么时候应该担心?. 在你的情况下,正如人们指出的那样:

在多处理器系统上,负载与可用处理器内核的数量有关。“100% 利用率”标记是单核系统上的 1.00、双核上的 2.00、四核上的 4.00,等等。

因此,平均负载为 14.00 和 24 个内核,您的服务器远未过载。


Sco*_*ack 17

类 Unix 系统(包括 linux)旨在最有效地使用可用 RAM。一般而言,每 MB RAM 可以处于 3 种状态:

  1. 自由
  2. 被进程使用
  3. 用于缓冲器

第 3 种状态仅用作暂存空间,并打算在必要时重新分配,即您的程序可用总内存实际上是 Free+UsedforBuffers。因此,您不会真正看到缓冲区分配的空间显示为分配给任何特定进程。

您的平均负载问题更有趣,因为它很容易被误解。有关完整故事,请参阅这篇linuxjournal 文章。最好的总结是直接引用文章,

负载平均计算最好被认为是 Linux 运行队列中标记为 running 或 uninterruptible 的进程的移动平均值

意思是,您可以将平均负载视为(正在运行的进程数)+(等待 IO 的进程数)。请记住,在任何给定时间,您都可以执行 $CORE 数量的进程,我会说您的平均负载为 14 是相当低的。

  • 负载只是一个指标。作为一般规则,负载大于内核数是一件坏事。通常,使用高百分比的内存是一件坏事。这不是一个二进制值,你可以说“这么多就好了”。如果内存不足,则没有足够的内存来运行更多进程。如果你没有用完,你有很多。这在很大程度上取决于您的具体情况。 (2认同)