![两台相同的服务器,其中一台的 CPU 负载为 2 倍](https://linux22.com/image/655552/%E4%B8%A4%E5%8F%B0%E7%9B%B8%E5%90%8C%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%8C%E5%85%B6%E4%B8%AD%E4%B8%80%E5%8F%B0%E7%9A%84%20CPU%20%E8%B4%9F%E8%BD%BD%E4%B8%BA%202%20%E5%80%8D.png)
Http 请求在两台服务器上各占一半。服务器运行的是 FreeBSD 9.2,它们的硬件、软件和应用程序配置完全相同。但其中一台服务器的 CPU 负载是 2 倍。在流量高峰期间,这一事实会导致“有缺陷”的服务器出现 LA 问题。
两个服务器都设置了 nginx+php-fpm+redis+memcached+mysql,除此之外没有其他设置。没有运行任何 cron 等。
CPU: 24.9% user, 0.0% nice, 8.1% system, 0.0% interrupt, 66.9% idle
CPU: 12.7% user, 0.0% nice, 3.4% system, 0.0% interrupt, 83.9% idle
vmstat 1
对于有缺陷的服务器
procs memory page disk faults cpu
r b w avm fre flt re pi po fr sr mf0 in sy cs us sy id
44 0 0 78511M 3775M 92 0 0 0 93 9 0 27 82 37 12 5 83
14 0 0 78539M 3768M 3612 0 0 0 2320 0 94 4019 290766 59170 32 42 26
10 0 0 78544M 3763M 1019 0 0 0 544 0 127 4054 267760 36825 26 8 67
11 0 0 78540M 3758M 2156 0 0 0 2106 0 218 4045 272843 37923 28 8 64
9 0 0 78544M 3759M 601 0 0 0 1412 0 55 4067 279558 37887 26 9 65
9 0 0 78548M 3753M 1835 0 0 0 414 0 79 4042 273963 37264 26 9 65
11 0 0 78548M 3754M 1036 0 0 0 2934 0 199 4078 262876 36150 25 7 68
9 0 0 78548M 3759M 295 0 0 0 2408 0 44 3781 249391 32801 25 7 68
15 1 0 78548M 3758M 2158 0 0 0 2628 0 100 3816 250708 33943 25 7 68
12 0 0 78552M 3754M 1506 0 0 0 1637 0 113 3965 269543 36864 28 8 64
9 0 0 78564M 3746M 2288 0 0 0 620 0 102 3974 256959 34928 26 8 67
13 0 0 78568M 3745M 689 0 0 0 939 0 75 3992 272804 36572 25 9 66
13 0 0 78568M 3744M 239 0 0 0 2084 0 44 4040 273036 36631 26 8 65
8 0 0 78479M 3752M 2279 0 0 0 5177 0 128 3955 263155 36118 27 9 64
9 0 0 78475M 3752M 496 6 0 0 1085 0 172 3954 256552 34906 25 8 67
15 0 0 78475M 3754M 263 0 0 0 2016 0 178 3870 254864 35432 25 8 67
vmstat 1
为良好的服务器
procs memory page disk faults cpu
r b w avm fre flt re pi po fr sr mf0 in sy cs us sy id
1 0 6 78873M 4870M 153 2 0 0 54 61 0 48 48 136 6 1 93
6 0 6 78865M 4871M 755 0 0 0 1839 0 126 3588 254715 30931 13 3 84
7 0 6 78873M 4868M 715 0 0 0 3750 0 76 3453 240474 28698 11 4 85
6 0 6 78869M 4867M 404 0 0 0 1793 0 165 3419 232270 27453 12 3 85
5 0 6 78877M 4867M 213 0 0 0 845 0 276 3793 261560 31747 13 3 84
4 0 6 78877M 4866M 602 0 0 0 830 0 157 3539 249173 29895 12 4 84
5 1 6 78881M 4858M 1762 0 0 0 1639 0 93 3586 256812 30538 12 4 84
4 0 6 78890M 4851M 1757 0 0 0 90059 0 88 3651 267225 32082 13 3 83
4 0 6 78890M 4845M 836 0 0 0 12182 0 202 3822 259947 31564 12 4 85
5 0 6 78894M 4842M 726 0 0 0 906 0 314 3665 247476 30474 12 3 85
5 0 6 78898M 4832M 638 0 0 0 288 0 258 3698 252603 31849 13 3 84
5 0 6 78902M 4818M 1231 0 0 0 1992 0 460 3815 247440 31429 12 3 84
9 0 6 78902M 4808M 23 0 0 0 152 0 596 4121 252113 31974 12 3 85
6 0 6 78902M 4804M 1050 1 0 0 885 0 206 3810 265230 32513 13 4 83
我们可以在procs.r
和proces.w
列中看到一些有趣的东西。有缺陷的服务器根本没有w
进程,但进程数量却更多r
。我该如何解释这一点?我应该获取哪些指标来弄清楚发生了什么?
答案1
在我看来,其中一个负载更多,也许你平均分配了请求数,但“有缺陷”的那个请求要求更多,它有更多正在运行的进程和更多页面错误。使用 vmstat 检查它们此时实际提供的服务。