我使用具有以下硬件的服务器:
CPU:AMD Ryzen 9 5950X 16 核
内存:128GB DDR4 ECC
NVMe SSD HD
我在那里安装了带有最新内核的 Ubuntu 18.04 LTS。没有面板,只有我的 php 应用程序所需的以下服务:
Nginx 1.19.10
Php7.4-fpm
Elasticsearch 7.11.2
RabbitMQ broker
Varnish 6.4.0
Redis cache
Percona mysql 8.0.22-13
我不会进一步详细介绍如何将服务器资源共享给这些服务。我会说,所有与 RAM 分离的服务都需要具有以下优先级:
Mysql
PHP FPM
NGINX
Varnish
Elasticsearch
and some little amount I need for Rabbit and Redis
在进一步监控该服务器约 2 个月后,现在流量相同(无显著变化),似乎我的 php 应用程序在重新启动服务器约 1 小时后运行得比服务器运行一周而没有重新启动时更顺畅、更快。
服务器运行大约 4-5 天后,RAM 在 htop 中从 128GB 增加到 40-45GB。从这一点开始,它就再也没有增加过。我从未见过超过 45GB 的填充率。此外,CPU 负载从未超过 4.00。
在最高指挥中我通常:
Tasks: 595 total, 1 running, 429 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.1 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 13196481+total, 44963736 free, 27595196 used, 59405888 buff/cache
KiB Swap: 71303160 total, 71303160 free, 0 used. 10288868+avail Mem
在 vmstat 10 4 中我现在有:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 44972896 6995364 52411440 0 0 9 37 12 12 2 0 98 0 0
1 0 0 44972676 6995400 52411536 0 0 0 296 1667 2226 3 1 96 0 0
1 0 0 44970704 6995400 52411544 0 0 0 558 1186 1610 2 0 98 0 0
1 0 0 44965440 6995400 52411540 0 0 0 52 986 1555 0 0 100 0 0
在 free -m 中我有
total used free shared buff/cache available
Mem: 128871 26809 44046 262 58015 100615
Swap: 69631 0 69631
我发现大部分 RAM 都用于缓存,这是我为 mysql、php-fpm 和 nginx 设置的。SWAP 几乎不用。在高峰期,我只看到顶部大约有 3.00M……我曾看到那里高达 6.00M
问题是,为什么这台服务器在缓存填满时表现得并不好,反而似乎表现相反?当 RAM 没有填满时,它似乎运行得更快。
ubuntu 设置中是否存在需要进一步调查的内容?
先感谢您!
答案1
依赖“手动”测试应该是第一步,但很容易出错。现在您必须深入挖掘并使用适当的工具进行调查以获取综合基准数据。
根据我的经验,我建议:
- 选择一些对您来说至关重要的指标并且您知道如何衡量它们(即页面加载时间,页面加载时间线,缓存命中率......)
- 选择合适的工具(见此处为执行基准测试的工具列表)
- 测量它们
- 更改配置
- 再次测量
- 恢复配置
- 重复此过程至少三次(以获得更好的效果)
这将为您提供足够的数据进行分析,并向我们展示更多详细信息以帮助您。使用当前设置并经过大量基准测试后,您应该会发现响应速度较慢。
看看Varnish 统计数据的解释,关于 mysql slowlog、varnish 日志(工作者、队列、等待工作者等)、Elasticsearch 的 Xms 和 Xmx 设置,检查 Rabbit 计数器(队列)等等。这应该会告诉您有关根本问题的更多信息。
在应用程序内实施 APM 之前的最后一个方法是检查所有使用的服务的上述所有指标。从我的角度来看,实施 APM 是不可避免的。