这是一个关于 Unix 操作系统如何报告内存使用情况的规范问题。
类似问题:
我有运行Debian 6.0.6 Squeeze 的生产服务器
#uname -a
Linux debsrv 2.6.32-5-xen-amd64 #1 SMP Sun Sep 23 13:49:30 UTC 2012 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
每天cron以 root 身份执行备份脚本:
#crontab -e
0 5 * * * /root/sites_backup.sh > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
#nano /root/sites_backup.sh
Linux debsrv 2.6.32-5-xen-amd64 #1 SMP Sun Sep 23 13:49:30 UTC 2012 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
一切正常,但我注意到 Munin 的内存图显示备份后缓存和缓冲区的增加。
然后我只是下载备份文件并删除它们。删除后 Munin 的内存图将缓存和缓冲区返回到备份前的状态。
这是穆宁图: …
我们遇到了一个奇怪的行为,我们看到 CPU 利用率很高,但平均负载很低。
我们监控系统的以下图表可以最好地说明这种行为。

在大约 11:57,CPU 利用率从 25% 上升到 75%。平均负载没有显着变化。
我们运行的服务器有 12 个内核,每个内核有 2 个超线程。操作系统将其视为 24 个 CPU。
CPU 利用率数据是通过/usr/bin/mpstat 60 1每分钟运行一次来收集的。all行和%usr列的数据显示在上面的图表中。我确信这确实显示了每个 CPU 数据的平均值,而不是“堆叠”利用率。虽然我们在图表中看到 75% 的利用率,但我们看到一个进程显示在top.
平均负载数字取自/proc/loadavg每分钟。
uname -a 给出:
Linux ab04 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
Linux 发行版是 Red Hat Enterprise Linux Server release 6.3 (Santiago)
我们在机器上以相当高的负载运行几个 Java Web 应用程序,每台机器每秒 100 个请求。
如果我正确解释了 CPU 利用率数据,当我们有 75% 的 CPU 利用率时,这意味着我们的 …
我需要从 vmstat 中获取内存使用率,但我不太明白 vmstat 中显示的一些与内存相关的数字。
特别是,给定这样的输出
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 139728 45396 199128 1236360 1 2 4 622 3 1 51 4 43 2 0
Run Code Online (Sandbox Code Playgroud)
系统的总内存量是多少?是'swpd' + 'free' + 'buff' + 'cache',总共是1620612吗?
系统的可用内存量是多少?是否为 45396,如“免费”列中所示?
问题是它们不加起来,甚至看起来与“顶级”报告的内容不符。我与上面的 'vmstat's 几乎同时使用的 'top' 的输出是:
[...]
Mem: 4059616k total, 3965504k used, 94112k free, 200020k buffers
[...]
Run Code Online (Sandbox Code Playgroud)
所以......我假设'vmstat'中一定有我不知道的隐藏数字/选项?
为此,我需要使用 'vmstat' 而不是其他命令,因为这是要求的内容。
所以理想情况下,我想从 'vmstat' 实现的是内存使用百分比,如下所示:
<used_memory>/<total_memory> * …Run Code Online (Sandbox Code Playgroud) 以下是取自Apache 网站的示例服务器状态页面:
Current Time: Thursday, 01-May-2014 07:38:59 UTC
Restart Time: Friday, 11-Apr-2014 18:30:33 UTC
Parent Server Config. Generation: 27
Parent Server MPM Generation: 26
Server uptime: 19 days 13 hours 8 minutes 26 seconds
Server load: 4.90 5.10 5.39
Total accesses: 200912024 - Total Traffic: 24965.1 GB
CPU Usage: u5133.55 s2390.16 cu0 cs0 - .445% CPU load
119 requests/sec - 15.1 MB/second - 130.3 kB/request
351 requests currently being processed, 417 idle workers
Run Code Online (Sandbox Code Playgroud)
我需要了解其中的值Server load代表什么,因为文档 …
可能的重复:
如何了解 linux 服务器中的内存使用情况和平均负载
我已经准备了许多试图解释平均负载的文章。迄今为止,没有人能把它解释得足够好,以至于我的大脑能够理解它。
请有人用最简单的术语解释平均负载的含义,以便任何人都可以理解并使用它。
在高性能计算的背景下,是否存在合理/安全的 CPU 负载水平?
我理解的意思的平均负载在一般的服务器,但不知道会发生什么,建成并用于高性能计算服务器。
通常的约定是否load <= # of cores适用于这种环境?
鉴于我的系统特定详细信息,我很好奇,通常load >> # of cores每个节点:
节点的正常运行时间很长,CPU 使用率/负载通常很高。很少有硬件故障,尤其是 CPU,但我不知道在给定高负载的节点的整个生命周期中会发生什么。
示例top输出:
top - 14:12:53 up 4 days, 5:45, 1 user, load average: 313.33, 418.36, 522.87
Tasks: 501 total, 5 running, 496 sleeping, 0 stopped, 0 zombie
%Cpu(s): 33.5 us, 50.9 sy, 0.0 ni, 15.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 19650371+total, 46456320 …Run Code Online (Sandbox Code Playgroud) linux central-processing-unit cpu-usage high-load load-average
我们的 linux 服务器上有 4GB,但我们目前只能使用 ~1.8GB 用于我们的 java 服务器,这是下面列出的第一个 java 进程。(200 MB 是免费的,所以我们可以最大使用 1.6GB + 0.2GB)
当我们使用更多时,机器会崩溃。所以我们指定 -Xmx1600m 和 -XX:MaxPermSize=200m 将服务器 RAM 限制为 1.8GB。但是我们需要更多的内存!剩下的内存去哪儿了?
这是根据内存使用情况排序的 top 程序输出(通过大“M”):
Mem: 4083952k total, 3857856k used, 226096k free, 169320k buffers
Swap: 2104504k total, 176k used, 2104328k free, 1939080k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28155 root 16 0 1835m 1.6g 7848 S 2 40.5 47:36.26 java
19609 root 16 0 45996 7052 3148 S 0 0.2 14:35.97 httpd2-prefork …Run Code Online (Sandbox Code Playgroud) linux ×6
cpu-usage ×2
load-average ×2
memory ×2
unix ×2
apache-2.2 ×1
apache-2.4 ×1
high-load ×1
java ×1
memory-usage ×1
vmstat ×1