根据 vmstat,我的 Linux 服务器(2xCore2 Duo 2.5 GHz)每秒持续进行大约 20k 次上下文切换。
# vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
2 0 7292 249472 82340 2291972 0 0 0 0 0 0 7 13 79 0
0 0 7292 251808 82344 2291968 0 0 0 184 24 20090 1 1 99 0
0 0 7292 251876 82344 2291968 0 0 0 83 17 20157 1 0 …Run Code Online (Sandbox Code Playgroud) performance-monitoring kernel performance-tuning vmstat context-switch
我希望了解我在(对我们而言)负载较重的 Web 服务器上看到的一些服务器性能问题。环境如下:
我们看到的行为是,网络通常感觉是响应式的,但开始处理请求会有轻微的延迟——有时是几分之一秒,有时是我们高峰使用时间的 2-3 秒。服务器上的实际负载报告为非常高 - 通常为 10.xx 或 20.xx,如top. 此外,在这些时间(甚至vi)在服务器上运行其他东西非常慢,所以负载肯定在那里。奇怪的是 Apache 仍然非常敏感,除了最初的延迟。
我们使用 prefork 将 Apache 配置如下:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
Run Code Online (Sandbox Code Playgroud)
和 KeepAlive 为:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Run Code Online (Sandbox Code Playgroud)
查看服务器状态页面,即使在这些负载很重的时候,我们也很少达到客户端上限,通常处理 80-100 个请求,其中许多请求处于保持活动状态。这告诉我将初始请求缓慢排除为“等待处理程序”,但我可能错了。
Amazon 的 CloudWatch 监控告诉我,即使我们的操作系统报告的负载大于 15,我们的实例 CPU 利用率也在 75-80% 之间。
示例输出top:
top - 15:47:06 up 31 days, 1:38, 8 users, load average: 11.46, …Run Code Online (Sandbox Code Playgroud) 考虑以下五台机器(名为 c、h、j、s 和 u)及其各自的vmstat 1输出。
鉴于来自 vmstat 输出的信息:
我正在尝试学习如何获得解释 vmstat 输出的直观感觉。
机器c:
# vmstat 1
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 4 9456 10692 304020 0 0 193 92 310 131 7 1 80 11 2
2 0 4 10212 10676 303020 0 0 412 40 1265 514 11 0 80 8 2
1 1 4 …Run Code Online (Sandbox Code Playgroud) 我需要从 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) 我遇到了一个场景,我看到服务器负载很高(有时超过 20 或 30)并且 CPU 使用率非常低(98% 空闲)。我想知道这些等待状态是否作为 NFS 文件系统连接的一部分出现。这是我在 VMStat 中看到的
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 1 0 1298784 0 0 0 0 16 5 0 9 1 1 97 2 0
0 1 0 1308016 0 0 0 0 0 0 0 3882 4 3 80 13 0
0 1 0 1307960 0 0 0 0 120 0 0 2960 …Run Code Online (Sandbox Code Playgroud) 正如许多人在 StackExchange 和其他地方所说的那样,Linux 的典型内核/mmu 页面大小是 4 KiB。我已经确认我的操作系统/架构(RHEL 6.6,Intel Xeon E5-2690)就是这种情况。
现在,除其他外,该vmstat -s命令报告“页面调入”和“页面调出”,它们是在启动时从 0 开始的计数器。我已经确认,在任何给定的时刻,这些值都与在pgpgin和pgpgout条目中找到的值完全相等/proc/vmstat(vmstat 命令是否从/proc/vmstat?)。其他命令,特别是sar -B报告pgpgin/s和pgpgout/s作为特定时间间隔内每秒调入/调出的 Kibibytes。
在最近的测试中,我看到pgpgin/s和pgpgout/s来自 sar 的值也完全对应于从 vmstat 值计算出的特定时间间隔的速率。这使我得出结论,vmstat 报告大小为 1 KiB 的页面的值。因此, 的pgpgin/out值/proc/vmstat是自启动以来调入/调出的 KiB 数。
我的问题是:
pages paged in/out”,而不是“ KiBs paged in/out”。这令人困惑。我想监视四台机器上的可用内存,每台机器都运行 Windows Server 2003 R2 SP2 64 位。每个盒子有 31.7GB 的 RAM。我想定期运行一个命令行工具,这样我就可以收集输出,然后用它制作图表。
我使用 Cygwin 定期运行了一些测试并收集了 vmstat 输出。我看到这样的数字:
0 0 1235228 4194303 0 0 0 0 0 0 4652 3089 1 5 94 0
0 0 1235228 4194303 0 0 0 0 0 0 4718 7591 5 4 91 0
0 0 1235228 4194303 0 0 0 0 0 0 5027 7816 5 4 92 0
0 0 1235228 4194303 0 0 0 0 0 0 4886 7099 3 3 93 0 …Run Code Online (Sandbox Code Playgroud) windows-server-2003 performance-monitoring vmstat diagnostic memory-usage
我有一个生产服务器,它在运行vmstat -f. 关于可用于帮助找出分叉起源的步骤的任何建议?
vmstat -f 1
6650796 forks
Run Code Online (Sandbox Code Playgroud)
编辑:
[~]$ ./forks.sh
Forks in last 2 seconds: 20
Forks in last 2 seconds: 40
Forks in last 2 seconds: 58
Forks in last 2 seconds: 9
Forks in last 2 seconds: 6
Forks in last 2 seconds: 28
Forks in last 2 seconds: 8
Forks in last 2 seconds: 10
Forks in last 2 seconds: 15
Forks in last 2 seconds: 9
Run Code Online (Sandbox Code Playgroud) 在解释非零 vmstat“si/so”值方面有哪些有用的经验法则?什么时候这些值“正常”,什么时候它们表明内存情况有问题?
在一般情况下,这个问题当然很难回答,但我正在寻找经验法则而不是确切的规则。
vmstat ×9
linux ×6
memory ×2
amazon-ec2 ×1
apache-2.2 ×1
centos ×1
debian ×1
diagnostic ×1
kernel ×1
memory-usage ×1
nfs ×1
paging ×1
vps ×1