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


57

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

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

(2)如何理解第一行的平均负载(“平均负载: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(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 collectData
 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 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 migration / 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 migration / 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 migration / 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 migration / 3
   13根15 -5 0 0 0 S 0 0.0 0:00.34 ksoftirqd / 3

2
看到此有关内存的好答案。 serverfault.com/questions/38065/#38074
Zoredache

这个答案大约平均负载(或简单总结这个长期读的细节)。
Nickolay

Answers:


56

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

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

             已使用的可用共享缓冲区总数
内存:2012 1923 88 0 91515
-/ +缓冲区/缓存:1316 695
掉期:3153 256 2896

首行“已使用”(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核,您的服务器绝不会过载。


17

Unix之类的系统(包括linux)旨在尽可能有效地利用可用的RAM。一般来说,RAM的每个MB可以处于3种状态:

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

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

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

最好将负载平均计算视为Linux运行队列中标记为正在运行或不可中断的进程的移动平均值。

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


谢谢!被视为重负载且最好不要运行新进程的已使用内存(或内存+交换)百分比是多少?您同时查看内存还是内存+交换?使用的交换是否显示在顶部实际使用的交换大小?关于CPU平均负载,您是否通过“平均负载/核心数”来衡量实际负载?您认为服务器负载沉重多少?谢谢并恭祝安康!
蒂姆(Tim)

2
负载只是一个指标。通常,大于核心的负载是一件坏事。通常,使用大量内存是一件坏事。您可以说“这很好”不是二进制值。如果RAM不足,则没有足够的资源来运行更多进程。如果您没有用完,那么您就足够了。这在很大程度上取决于您的具体情况。
Cian

4

sar手册页:

       平均负载计算为可运行次数或 
       正在运行的任务(R状态)以及不间断的任务数
       在指定的时间间隔内睡眠(D状态)。

uptime手册页:

       系统平均负载是指
       处于可运行或不可中断状态。处于可运行状态的进程
       正在使用CPU或正在等待使用CPU。虚假的过程
       可中断状态正在等待某些I / O访问,例如,等待磁盘。
       在三个时间间隔内取平均值。平均负载
       没有针对系统中的CPU数量进行标准化,因此平均负载
       年龄为1表示在4上始终装载单个CPU系统
       CPU系统意味着它有75%的时间处于空闲状态。

3
  1. Linux已有一段时间了,其内存管理方式使得这行top基本上没有用,通常在用户进程不需要它时,将大部分机器内存分配给各种用途。
  2. 平均负载是正在运行或正在等待运行的平均进程数。它通常与系统延迟/响应能力之间具有很强的负相关性,因此您希望它尽可能低。但是,由于每个CPU都可以在任何给定时间运行某些东西,因此您似乎在14点时表现不错。

谢谢!关于1,您是说某些进程没有出现在顶部,而是占用了大量内存吗?还是关于内存的输出的第四行(“内存:总计130766620k,已使用130161072k,空闲605548k,919300k缓冲区”)具有误导性,我应该查看上面和本例中所有进程所使用的内存百分比之和我可以安全地运行一些新的消耗内存的进程吗?
蒂姆(Tim)

2
正如其他答案所指出的那样,应将平均负载与处理器数量进行比较,因此在24核系统上,平均负载不是14。在单核系统上有点像14/24 = 0.58。
David Z

@Tim:我是说后者。
混沌

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.