Я использую сервер с этим оборудованием:
Cpu: AMD Ryzen 9 5950X 16 ядер
Ram: 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 дней работы сервера оперативная память увеличивается до 40-45GB в верхней части 128GB. И с этого момента она никогда не увеличивается. Я никогда не видел более чем 45GB заполнения. Также загрузка процессора никогда не превышает 4.00.
В команде top у меня обычно:
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 практически не используется. В top peaks я вижу около 3.00M в top only.... Я видел там до 6.00M
Вопрос в том, почему этот сервер вместо того, чтобы вести себя лучше с заполненными кэшами, делает все наоборот? Когда RAM не заполнена, кажется, что он работает быстрее.
Есть ли что-то в настройках ubuntu, что требует дальнейшего изучения?
Заранее спасибо!
Полагаться на "ручные" тесты должно быть первым шагом, но это чревато ошибками. Теперь вам нужно копнуть глубже и провести исследование, используя соответствующие инструменты для получения синтетических эталонных данных.
Из своего опыта я бы посоветовал:
Это даст вам достаточно данных для анализа и покажет нам больше деталей, чтобы помочь вам. При текущих настройках и после интенсивного бенчмарка вы должны заметить более медленный отклик.
Посмотрите на статистику Varnish в интерпретации, на mysql slowlog, журнал varnish (рабочие, очереди, ожидающие рабочие и т.д.), настройки Xms и Xmx для Elasticsearch, проверьте счетчики Rabbit (очереди) и многое другое. Это должно рассказать вам больше о корне проблемы.
Последнее средство перед внедрением APM внутри приложения - проверить все метрики, упомянутые выше, для всех используемых сервисов. С моей точки зрения, внедрение APM будет неизбежным.