如何理解Linux服务器的内存使用量和平均负载

我正在使用一个有128GB的内存和24核心的Linux服务器。 我使用top来查看它使用了多less。 它的输出粘贴在post的末尾。 这里有两个问题:

(1)我看到每个正在运行的进程占用了非常小的内存百分比(%MEM不超过0.2%,最多只有0.0%),但是总内存如何在第四行输出“Mem:130766620k total,130161072k used,605548k free,919300k buffers”)? 所有进程的内存使用百分比总和几乎不可能达到100%,不是吗?

(2)如何理解一线的平均负荷(“平均负荷:14.04,14.02,14.00”)?

感谢致敬!

编辑:

谢谢!

我也非常喜欢听听内存使用百分比的一些粗略的数字,以确定服务器是否负载过重,因为我曾经成为在不了解当前负载的情况下热衷于服务器的人。

swap与内存几乎一样吗? 例如,当内存和交换几乎相同的大小,如果内存几乎用完,但交换仍然很大程度上是免费的,我可以看到,如果内存+交换使用的百分比仍然不高,并运行其他新的stream程?

你如何一起考虑CPU或内存(或内存+交换)的使用? 如果他们中的任何一个达到太高,或者两者都有,你会担心吗?

顶部输出:

$顶部

 
顶部 -  12:45:33最多19天,23:11,18用户,平均负载: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
 Mem:130766620k共计,130161072k使用,605548k免费,919300k缓冲区
交换次数:63111312k total,500556k used,62610756k free,124437752k cache

   PID用户PR NI VIRT RES SHR S%CPU%MEM时间+命令
  6529桑切斯18 -2 1075米219米13米S 100 0.2 13760:23 MATLAB
 13210 timothy 18 -2 48336 37m 1216 R 100 0.0 3:56.75荒谬
 13888 timothy 18 -2 48336 37m 1204 R 100 0.0 2:04.89荒谬
 14542 timothy 18 -2 48336 37m 1196 R 100 0.0 1:08.34荒谬
 14544 timothy 18 -2 2888 2076 400 R 100 0.0 1:06.14 gatherData
  6183 sanchez 18 -2 1133m 195m 13m S 100 0.2 13676:04 MATLAB
  6795桑切斯18 -2 1079米210米13米S 100 0.2 13734:26 MATLAB
 10178 timothy 18 -2 48336 37m 1204 R 100 0.0 11:33.93荒谬 
 12438 timothy 18 -2 48336 37m 1216 R 100 0.0 5:38.17荒谬
 13661 timothy 18 -2 48336 37m 1216 R 100 0.0 2:44.13荒谬
 14098 timothy 18 -2 48336 37m 1204 R 100 0.0 1:58.31荒谬
 14335 timothy 18 -2 48336 37m 1196 R 100 0.0 1:08.93荒谬
 14765 timothy 18 -2 48336 37m 1196 R 99 0.0 0:32.57荒谬
 13445 timothy 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 top
  1240根15 -5 0 0 0 S 0 0.0 16:07.11被刊登
  9019根20 0 296米4460 2616 S 0 0.0 82:19.51 kdm_greet
     1 root 20 0 4028 728 592 S 0 0.0 0:03.11 init
     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)我看到每个正在运行的进程占用了非常小的内存百分比(%MEM不超过0.2%,最多只有0.0%),但是总内存如何在第四行输出“Mem:130766620k total,130161072k used,605548k free,919300k buffers”)? 所有进程的内存使用百分比总和几乎不可能达到100%,不是吗?

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

             caching总共使用的空闲共享缓冲区
 Mem:2012 1923 88 0 91 515
 -  / + buffers / cache:1316 695
交换:3153 256 2896

“used”(1923)值的第一行几乎总是与第一行的mem值(2012)几乎匹配。 由于Linux喜欢使用任何备用内存来caching磁盘块(515)。

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

如果您希望快速查看有多less内存空闲,请查看缓冲区/caching行空闲值(695)。 这是总内存(2012) – 实际使用(1316)。 (2012 – 1316 = 696,而不是695,这只是一个圆整的问题)

(2)如何理解一线的平均负荷(“平均负荷:14.04,14.02,14.00”)?

这篇关于load average的文章使用了一个很好的stream量类比,并且是迄今为止我发现的最好的一个: 了解Linux CPU负载 – 什么时候应该担心? 。 正如人们所指出的那样,

在多处理器系统上,负载是相对于可用处理器内核的数量而言的。 单核系统的“100%利用率”标记为1.00,双核为2.00,四核为4.00。

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

像包括linux在内的Unix一样,Unix的devise也是为了最有效地利用可用的RAM。 一般而言,RAM的每个MB可以有3个状态:

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

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

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

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

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

sar手册页:

       负载平均值以可运行或平均运行次数计算 
       运行任务(R状态)和不可中断的任务数量
       睡眠(D状态)超过指定的时间间隔。

uptime手册页:

       系统负载平均值是任一进程的平均数量
       处于可运行或不可中断的状态。 处于可运行状态的进程
       正在使用CPU或等待使用CPU。 一个不受约束的过程,
       可摧毁状态正在等待一些I / O访问,例如等待磁盘。
       平均值是在三个时间间隔内进行的。 加载平均值
       由于系统中CPU的数量没有规范化,所以加载aver-
        1的年龄意味着一个CPU系统一直加载,而一个4
        CPU系统就意味着它有75%的时间处于闲置状态。
  1. Linux已经有一段时间了,它的内存pipe理方式使得top基本上没有用处,当用户进程不需要的时候,通常会将大部分机器的内存分配给各种用途。
  2. 平均负载是运行或等待运行的进程的平均数量。 它通常与系统延迟/响应性有很强的负相关性,所以您希望它尽可能低。 因为你的每个CPU都可以在任何时候运行,但是你在14时似乎performance的很好。

平均负载是一件好事。 它可以让你理解100%利用率以后会发生什么,基本上: http : //en.wikipedia.org/wiki/Load_%28computing%29