我使用的 Linux 服务器有 128GB 内存和 24 个核心。我使用 top 来查看它的使用情况。它的输出粘贴在帖子的末尾。这里有两个问题:
(1)我看到每个正在运行的进程都占用了很小的内存百分比(%MEM 不超过 0.2%,大多数只有 0.0%),但是总内存怎么几乎用完了,就像输出的第四行那样(“Mem:总计 130766620k,已使用 130161072k,可用 605548k,缓冲区 919300k”)?所有进程的内存使用百分比总和似乎不太可能达到 100%,不是吗?
(2)第一行的平均负载(“load average:14.04,14.02,14.00”)如何理解?
感谢致敬!
编辑:
谢谢!
我还非常喜欢根据内存使用的百分比听到一些粗略的数字来确定服务器是否负载过重,因为我曾经在不了解当前负载的情况下就把服务器塞满了。
交换是否被视为与内存几乎相同?例如,当内存和交换几乎大小相同时,如果内存几乎用完但交换仍然大部分可用,我是否可以将其视为内存 + 交换的使用百分比仍然不高并运行其他新进程?
您如何综合考虑 CPU 或内存(或内存 + 交换)的使用情况?如果其中一个或两个都达到过高水平,您会感到担心吗?
top输出:
$ 顶部
顶部 - 12:45:33 启动 19 天,23:11,18 个用户,平均负载:14.04、14.02、14.00 任务:总计 484 个,其中 12 个正在运行,472 个正在休眠,0 个已停止,0 个僵尸 CPU: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 1075 米 219 米 13 米 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 gatherData 6183 桑切斯 18 -2 1133 米 195 米 13 米 S 100 0.2 13676:04 MATLAB 6795 桑切斯 18 -2 1079 米 210 米 13 米 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
答案1
(1)我看到每个正在运行的进程都占用了很小的内存百分比(%MEM 不超过 0.2%,大多数只有 0.0%),但是总内存怎么几乎用完了,就像输出的第四行那样(“Mem:总计 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)第一行的平均负载(“load average:14.04,14.02,14.00”)如何理解?
这篇关于平均负载的文章使用了一个很好的流量类比,是迄今为止我发现的最好的一个:了解 Linux CPU 负载——什么时候应该担心?。就你的情况而言,正如人们指出的那样:
在多处理器系统中,负载与可用处理器核心数有关。单核系统上的“100% 利用率”标记为 1.00,双核系统上的“100% 利用率”标记为 2.00,四核系统上的“100% 利用率”标记为 4.00,等等。
因此,如果平均负载为 14.00 且有 24 个核心,您的服务器还远远没有达到过载的程度。
答案2
包括 Linux 在内的类 Unix 系统旨在尽可能高效地利用可用 RAM。一般来说,每 MB RAM 可以处于 3 种状态:
- 自由的
- 由进程使用
- 用于缓冲液
第三种状态仅用作临时空间,并计划在必要时重新分配,即程序的总可用内存实际上是 Free+UsedforBuffers。因此,您实际上不会看到缓冲区分配空间显示为分配给任何特定进程。
你的平均负载问题有点有趣,因为它很容易被误解。有关完整故事,请参阅此Linux期刊文章最好的总结是直接引用文章中的一句话,
负载平均计算最好被认为是 Linux 运行队列中标记为正在运行或不可中断的进程的移动平均值
意思是,你可以将平均负载视为 (正在运行的进程数)+(等待 IO 的进程数)。请记住,在任何给定时间,你都可以执行 $CORE 数量的进程,我认为你的平均负载 14 相当低。
答案3
从sar
手册页中:
平均负载计算为可运行进程数或 正在运行的任务(R 状态),以及不可中断的任务数 在指定的时间间隔内睡眠(D 状态)。
从uptime
手册页中:
系统负载平均值是指以下进程的平均数量: 处于可运行或不可中断状态。处于可运行状态的进程 正在使用 CPU 或正在等待使用 CPU。处于未启用状态的进程 可中断状态正在等待某些 I/O 访问,例如等待磁盘。 平均值是在三个时间间隔内取的。负载平均值 没有针对系统中的 CPU 数量进行标准化,因此负载平均值 1 表示单 CPU 系统始终处于加载状态,而在 4 CPU 系统意味着它有 75% 的时间处于空闲状态。
答案4
平均负载是个好东西。它能让你了解超过 100% 利用率后会发生什么,基本上是这样的:http://en.wikipedia.org/wiki/Load_%28computing%29