我正在使用具有 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 或内存(或内存 + 交换)的使用?如果它们中的任何一个达到太高或两者兼而有之,您会担心吗?
顶部输出:
$顶部
顶部 - 19 天 12:45:33,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 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 蒂姆 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
要查看您当前使用了多少内存,请运行
free -m
. 它将提供如下输出:顶行“使用”(1923)值几乎总是与顶行内存值(2012)几乎匹配。由于 Linux 喜欢使用任何空闲内存来缓存磁盘块 (515)。
要查看的关键使用数字是缓冲区/缓存行使用值 (1316)。这是您的应用程序当前使用的空间量。为获得最佳性能,此数字应小于您的总 (2012) 内存。为了防止内存不足错误,它需要小于总内存(2012)和交换空间(3153)。
如果您想快速查看有多少内存可用,请查看缓冲区/缓存行可用值 (695)。这是总内存(2012)-实际使用的(1316)。(2012 - 1316 = 696,不是 695,这只是一个四舍五入的问题)
这篇关于平均负载的文章使用了一个很好的流量类比,是迄今为止我发现的最好的一篇:了解 Linux CPU 负载 - 你什么时候应该担心?. 正如人们指出的那样,就您而言:
因此,平均负载为 14.00 和 24 个内核,您的服务器远未超载。
类 Unix 系统(包括 linux)旨在尽可能有效地利用可用 RAM。一般来说,每 MB RAM 可以处于 3 种状态:
第 3 个状态仅用作暂存空间,并打算在必要时重新分配,即程序的总可用内存实际上是 Free+UsedforBuffers。因此,您不会真正看到分配给任何特定进程的缓冲区分配空间。
您的平均负载问题更有趣,因为它很容易被误解。有关完整的故事,请参阅这篇linuxjournal 文章。最好的总结是直接引用文章,
这意味着,您可以将平均负载视为(正在运行的进程数)+(等待 IO 的进程数)。请记住,在任何给定时间,您都可以执行 $CORE 数量的进程,我会说 14 的平均负载非常低。
从
sar
手册页:从
uptime
手册页:top
基本上无用,通常在用户进程不需要时将大部分机器内存分配给各种用途。平均负载是一件好事。它可以让您了解超出 100% 利用率会发生什么,基本上:http ://en.wikipedia.org/wiki/Load_%28computing%29