Настройка-оптимизация VPS сервера
1.
GodZiLLa 30.11.2025 / 09:36
Любой сервер нуждается в оптимизации под нагрузки, и настройки нового сервера обычно по умолчанию, но не выдерживают даже малейших нагрузок.
Например у меня, при
4 ядрах процессора и
8 Гб оперативки, даже от малого трафика и запросов по крону, уходило в ошибку по тайм-ауту и нагружало процессор до 90-100%.
Решил сделать немного оптимизации. Первым делом включаем кеш Redis, как самый оптимальный. Затем настраиваем Opcache, nginx, php-fpm и кеширование mysql. Все примеры под мою конфигурацию.
В
backend так (пулы и opcache):
pm = ondemand
pm.max_children = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 2
pm.max_requests = 1000
php_admin_value[date.timezone] = "Europe/Moscow"
php_admin_value[display_errors] = "off"
php_admin_value[log_errors] = "On"
php_admin_value[mail.add_x_header] = "On"
php_admin_value[max_execution_time] = "600"
php_admin_value[max_input_vars] = "10000"
php_admin_value[opcache.blacklist_filename] = "/opt/opcache-blacklists/opcache-*.blacklist"
php_admin_value[opcache.max_accelerated_files] = "300000"
php_admin_value[memory_limit] = "2048M"
php_admin_value[opcache.enable_cli] = "0"
php_admin_value[opcache.interned_strings_buffer] = "512M"
php_admin_value[opcache.memory_consumption] = "1024M"
php_admin_value[output_buffering] = "4096"
php_admin_value[post_max_size] = "100M"
Изменения в Nginx Config
/etc/nginx/nginx.conf
в http{..} секцию
http {
#...
fastcgi_read_timeout 600;
#...
}
2.
GodZiLLa 30.11.2025 / 11:07
Кеширование в MySql
VDS с 8 ГБ RAM, SSD
# Память
innodb_buffer_pool_size = 5G
innodb_buffer_pool_instances = 2
# Флаш и I/O
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000
innodb_io_capacity_max = 6000
innodb_flush_neighbors = 0
innodb_adaptive_flushing = 1
innodb_lru_scan_depth = 2048
Вроде всё, что вспомнил по настройкам, если что вспомню дополнительно, добавлю.
По результату, нагрузка на процессор уменьшилась, работа в озу увеличилась из-за кеша, но уже стало работать бодрее и в основном пропала ошибка по тайм-ауту при запросах на сайты, но не до конца.
По крону, есть некоторые тяжёлые запросы, если на бегете отрабатывают без проблем, то на моём vps вылетает такой запрос в ошибку
A timeout occurred Error code 524
И хотя лимит выставлен на 600 секунд, то есть 10 минут, а сам запрос занимает 2-3 минуты, то всё равно ошибка по лимиту тайм-аута.
Вот и не пойму, где то ещё есть чего настроить ?
3.
Александр 01.12.2025 / 09:56
GodZiLLa, а в логах что пишет? Там ведь инфо должно быть, что за проблема. Также если VPS у тебя в локации РФ, то CF замедляются все запросы out/in от него. Это особенно касается облаков, которые подключены к ТСПУ.
попробуй крон запускать не через NGINX/APACHE/CURL. Т.е. не по http. Только придется полные пути (от home) в файле скрипта прописывать (например к БД). Ну и в крон /usr/local/bin/php -q /home/admin/site.com/cron.php
Из терминала попробуй сначала запустить из командной строки. Какие у тебя пути к php, не знаю.
Подключение к БД тоже через 127.0.0.1 или localhost.
4.
GodZiLLa 01.12.2025 / 13:00
Александр, d логах вообще по этой проблеме ничего, нет ошибок.
А сам файл для крона, не подразумевает другого способа запуска, только по https.
Да и на простом хостинге бегета этот запуск отрабатывает без проблем, а на сервере нет.
Нужно искать, где то ещё по таймауту ограничение видимо, а где, не понятно, вроде везде выправил.
5.
WapStyle 02.12.2025 / 16:26
при 4 ядрах процессора и 8 Гб оперативки
чёто на богатом =D
что у тебя за проект что положило такой конфиг?
6.
GodZiLLa 02.12.2025 / 17:45
чёто на богатом =D
что у тебя за проект что положило такой конфиг?
Три сайта со специфическим контентом )
Но не про это, а то, что запрос к скрипту больше двух минут не проходит.
Нужно больше информации, где на vps можно ещё настроить тайм-аут, кроме указанных в самом начале )
7.
/7o/loTeH4I1k 03.12.2025 / 07:19
524 выдаёт не сервер, а браузер, когда не успевает получить ответ за требуемое время.
Нужно определить какую нагрузку даёт скрипт запускаемый через cron, и ограничить (понизить приоритет этих процессов) эту нагрузку (nice для cpu, ionice для дисков)
и ещё обрати внимание на настройки fpm, это для тестовых серверов пойдёт, для продакшена точно нет, и сейчас объясню почему:
; запускает процессы только по требованию, в продакшене принято performance, оно держит какое-то кол-во процессов всегда готовыми. Но это можно не менять
pm = ondemand
; Этим ты ограничиваешь кол-во процессов до 2, если один занят (скриптом крона, например), отработает второй, но и он может оказаться занят, и вот тогда будут 503 и 524. Посмотри сколько оперативы занимает один процесс, и сделай их штук 5 хотя-бы, лучше 10 (отталкиваясь от оперативы)
pm.max_children = 2
; тут ты устанавливаешь минимум 1 свободный процесс и максимум 2. Я бы сделал 2 и 3, что-бы хотя-бы один всегда был готов принять запрос и не дабавлял доп.время на его старт
pm.min_spare_servers = 1
pm.max_spare_servers = 2
; этим ты перезапускаешь каждый процесс после 1000 запросов к нему, тут норм.
pm.max_requests = 1000
pm.max_children точно стоит увеличить, это образует затык, если оба процесса заняты - все запросы будут ждать их освобождения, что ты и наблюдаешь в виде ошибки 524
При минимальных размерах RAM я делаю следующие настройки (для тех же тестовых серверов)
pm.start_servers = 1 ; * 50MB = Min RAM
pm.max_children = 5 ; * 50MB = Max RAM
pm.min_spare_servers = 1
pm.max_spare_servers = 3
8.
/7o/loTeH4I1k 03.12.2025 / 13:55
Совсем забыл, вместо
pm = ondemand
лучше сделать
pm = dynamic
. Это что-то между ondemand и static.
В
ondemand на сколько я помню свободные процессы вообще не содержатся, каждый раз тратится время на старт процесса, но и оператива не расходуется попусту.
В
static всегда нужное кол-во процессов висит и ждёт запросов, максимально быстро приступают к их обработке, но все они занимают место в оперативной памяти.
Ну и
dynamic держит некоторое кол-во процессов в запасе что-бы запуск процессов для новых запросов был менее заметен на времени отклика
9.
GodZiLLa 03.12.2025 / 14:04
/7o/loTeH4I1k, если ограничить работу скрипта, выполняемого через крон, то он не будет толком выполняться, как и сейчас делает, из-за ошибки по тайм-ауту. И странно, на бегете, на простом хосте, этот же запрос без проблем выполняется, а здесь на vps, что только ни делал, более 2х минут не работает, а надо хотя бы 3-4 минуты и он отработает. Запрос конечно тяжёлый, спасибо Дознету ). Оптимизации никакой ).
А настройки, какие только ни делал, не помогает. Сейчас уже так:
pm = dynamic
pm.max_children = 36
;pm.process_idle_timeout = 300s
pm.start_servers = 12
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 1000
Пробовал и dynamic, и ondemand, ситуация не меняется. Где то стоит ограничение на две минуты.
Нашёл в одном месте, /etc/nginx/conf.d, там в одном файле есть такие настройки
proxy_read_timeout 120s;
proxy_connect_timeout 120s;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
client_body_timeout 120s;
send_timeout 120s;
Как раз по две минуты ограничение, но исправить не даёт.
Вот это
pm.process_idle_timeout = 300s
делал на ondemand, так как рекомендуют эту строку вместо этих
pm.start_servers = 12
pm.min_spare_servers = 8
pm.max_spare_servers = 24
Хотя делал по разному, и вместе, и по очереди, результат один и тот же.
10.
/7o/loTeH4I1k 03.12.2025 / 14:13
GodZiLLa, в php.ini нет ограничения? Я был уверен, что дело в pm.max_spare_servers и нехватке свободных процессов
GodZiLLa, а что значит "исправить не даёт" в nginx? Возможно последние две директивы и ограничивают, остальные по идее только на проксированные запросы должны действовать
11.
GodZiLLa 03.12.2025 / 14:29
GodZiLLa, в php.ini нет ограничения? Я был уверен, что дело в pm.max_spare_servers и нехватке свободных процессов
Что самое интересное, php.ini вообще пустой, а конфиг задаётся в backend, настройки php-fpm nginx
GodZiLLa, а что значит "исправить не даёт" в nginx? Возможно последние две директивы и ограничивают, остальные по идее только на проксированные запросы должны действовать
Не сохраняется файл, выбивает, что обрыв соединения, и так несколько раз. Видимо защищён от записи и контролируется фастпанелью.
12.
/7o/loTeH4I1k 03.12.2025 / 14:43
GodZiLLa, попробуй через SSH
13.
GodZiLLa 03.12.2025 / 14:52
/7o/loTeH4I1k, удалось заменить
proxy_read_timeout 300s;
proxy_connect_timeout 300s;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
client_body_timeout 300s;
send_timeout 300s; но проблема не исчезла, так же 2 минуты.
Сейчас попробую nginx перезапустить, но уже нет надежды, что поможет.
Походу ещё где то ограничение висит.
14.
/7o/loTeH4I1k 03.12.2025 / 14:55
А ошибка так же 524? Cloudflare используется? php-fpm перезапускал же?
Если это проявляется только конкретно при запуске долгого скрипта, а сайт работает через Cloudflare, то наверное стоит сделать так, что-бы скрипт запускался напрямую, а не через CF.
Для этого в /etc/hosts нужно вписать IP сервера и домен (что-бы домен внутри сервера не резольвился на cloudflare, а запросы шли напрямую).
Не отчаивайся, чудес не бывает, всё решаемо, главное найти причину.
15.
GodZiLLa 03.12.2025 / 15:05
А ошибка так же 524? Cloudflare используется? php-fpm перезапускал же?
Да, по всем пунктам
Если это проявляется только конкретно при запуске долгого скрипта, а сайт работает через Cloudflare, то наверное стоит сделать так, что-бы скрипт запускался напрямую, а не через CF.
Для этого в /etc/hosts нужно вписать IP сервера и домен (что-бы домен внутри сервера не резольвился на cloudflare, а запросы шли напрямую).
Я крон запускаю с другого сервера, мне так удобнее ) Да и в браузере выполняю иногда, для проверки.
Не отчаивайся, чудес не бывает, всё решаемо, главное найти причину.
Да, конечно. Вот тлько найти причину пока не могу)
Уже пробовал только что в /opt/php82/etc/php-fpm.d в файле www.conf.default раскоментировал строку request_terminate_timeout = 300, там был ноль, выставил 300, не помогло )
16.
/7o/loTeH4I1k 03.12.2025 / 15:10
GodZiLLa, Попробуй временно отключить cloudflare. Если без него всё будет ок, то скорее всего это никак не обойти и это лимит на самом CF. Тогда придётся всё-таки как-то делать запуск в обход промежуточных прокси.
www.conf.default скорее всего не подключается и никак не участвует в конфигурации, ибо в php-fpm.conf обычно такая конструкция:
include=etc/php-fpm.d/*.conf
17.
GodZiLLa 03.12.2025 / 16:08
/7o/loTeH4I1k, да, именно так и сделал. Один поддомен сделал без прокси и запрос сделал через него. и ограничение в 2 минуты победилось )
Но сам запрос очень долгий и тяжёлый, конечно бы в идеале, скриптописателю его в нормальный вид привести, но он говорит, что у него всё норм )
А у меня этот запрос уже почти 10 минут висит, и скорее всего упрётся опять в лимит, но теперь уже 10 минут )
О, слава тебе Господи !!! )))
Выполнился запрос. Очень долго висел, но доработал. Оказывается всему проблемой был клауд, а я тут все конфиги перелопатил ))
18.
/7o/loTeH4I1k 03.12.2025 / 16:23
GodZiLLa, ну вот, причина уже есть, осталось придумать обходной путь. Я бы в этой ситуации рассмотрел запуск изнутри сервера, скорее всего препятствий для этого не много. а отслеживать выполнение можно с помощью лога
19.
GodZiLLa 03.12.2025 / 16:32
/7o/loTeH4I1k, пока сделал на поддомене без прокси, вроде работает, ещё понаблюдаю.
Просто где дальше ковырять, чтоб клауд обходить по http - не знаю. Наверное сильно заморочиться надо.
Хотя что то читал, что в клауде можно сделать некоторые настройки, но на бесплатном аккаунте наверное нет таких.
20.
/7o/loTeH4I1k 03.12.2025 / 17:07
GodZiLLa, пишут, что на тарифе интерпрайз 600 секунд таймаут. Так же пишут, что на бесплатном 100
21.
Александр 03.12.2025 / 21:16
Если сервер в РФ, то CF замедляется как и другие ДЦ Европы. Пора уж знать об этом, с 21 августа 2025 началось.
22.
GodZiLLa 03.12.2025 / 21:24
Если сервер в РФ, то CF замедляется как и другие ДЦ Европы. Пора уж знать об этом, с 21 августа 2025 началось.
Это здесь не причём, этот запрос и раньше так себя вёл, до всех замедлений и на другом сервере с впс. А вот на бегете, даже с клаудом, этот запрос отрабатывает без проблем, у них видать настройки по высшему разряду )
GodZiLLa, пишут, что на тарифе интерпрайз 600 секунд таймаут. Так же пишут, что на бесплатном 100
Сегодня копошил поисковик и там выдало инфу, что есть настройки на клауде, которыми можно выставить как надо, но не нашёл, где эти настройки )
23.
/7o/loTeH4I1k 03.12.2025 / 21:27
GodZiLLa, скорее всего на тарифе интерпрайз. С трудом могу представить ситуацию, когда CDN даёт задавать какие угодно таймауты. Кол-во соединений всё равно конечно, и если все 9999 таймауты сделают, будет беда)
24.
Александр 03.12.2025 / 21:35
Тогда через поддомен, без проксирования. Других вариантов нет на бесплатном тарифе.
25.
GodZiLLa 04.12.2025 / 09:26
GodZiLLa, скорее всего на тарифе интерпрайз. С трудом могу представить ситуацию, когда CDN даёт задавать какие угодно таймауты. Кол-во соединений всё равно конечно, и если все 9999 таймауты сделают, будет беда)
Возможно )
Тогда через поддомен, без проксирования. Других вариантов нет на бесплатном тарифе.
Да, пока так и сделал. Но вроде это не панацея. Ещё чуть понаблюдаю. Вроде таки есть ещё проблемка )
26.
/7o/loTeH4I1k 04.12.2025 / 09:54
Ещё чуть понаблюдаю. Вроде таки есть ещё проблемка )
Если будут новые вводные, я постараюсь помочь решить проблемы, главное не забыть сюда заходить

Если что, я в тг-чате визави с ником "Местный дурачок", готов оказать любую помощь по linux как консультативную, так и деятельную
27.
GodZiLLa 04.12.2025 / 15:40
Если будут новые вводные, я постараюсь помочь решить проблемы, главное не забыть сюда заходить Если что, я в тг-чате визави с ником "Местный дурачок", готов оказать любую помощь по linux как консультативную, так и деятельную
Спасибо )
Сейчас пока проверяю. На двух сайтах отработало, а на одном 502 ошибка. Нужно поискать разницу в настройках. Там для каждого сайта разные php и видимо что то не усмотрел-пропустил в настройках одной из версий )
28.
ART994 24.12.2025 / 08:55
есть ли для fastpanel решения?
29.
GodZiLLa 24.12.2025 / 10:53
есть ли для fastpanel решения?
Все эти решения и сделаны на фастпанели )
Только в каждом случае нужно под своё железо параметры делать. В первых постах конфиги под 4 ядра и 8 оперативы.
30.
ART994 24.12.2025 / 15:29
GodZiLLa, у меня точно такие же параметры. сейчас сделаю проверю. спасибо
31.
GodZiLLa 25.12.2025 / 08:56
ART994, да пожалуйста.
Но эти настройки в основном, и возможно могут быть какие то доработки.
И ещё, параметры распределены, с учётом трёх сайтов на данном железе, для одного возможны другие параметры.
32.
ART994 25.12.2025 / 09:49
GodZiLLa, какие параметры вы изменили в итоге, которые работают стабильно на этом железе?
33.
GodZiLLa 25.12.2025 / 12:55
GodZiLLa, какие параметры вы изменили в итоге, которые работают стабильно на этом железе?
Смотря что именно вам нужно и на какое железо и на сколько сайтов.
Что изменил, есть в самых первых постах, потом в других, небольшие корректировки.
Например ondemand изменил на dynamic, да и остальные параметры для работы трёх сайтов, поэтому между ними распределены ресурсы, в основном для кеша.
Сейчас так для одного сайта из трёх, в конфиге nginx
34.
ART994 25.12.2025 / 15:32
GodZiLLa, у меня тоже 3 сайта пока на сервере, но разные движки и тематики. и только dle подтупливает.
35.
GodZiLLa 25.12.2025 / 15:53
ART994, Прежде саму дле нужно оптимизировать, посмотри в настройках, раздел оптимизация. Повыключай всё лишнее, а потом уже и сервер настраивай. Да и в чём подтупливает то ? Причины разные могут быть.
И ещё режим работы сервера какой? Апач, или frp-fpm nginx ?
36.
ART994 25.12.2025 / 16:01
GodZiLLa, fastcgi, это из за того что 40тыс. новостей. когда мало было быстро грузило.
37.
GodZiLLa 25.12.2025 / 16:42
GodZiLLa, fastcgi, это из за того что 40тыс. новостей. когда мало было быстро грузило.
У меня по 70+ кило новостей, на каждом, и нормально.
Дело не в колличестве новостей, а сколько активных онлайн, именно из-за них и нагрузка, в том числе и от ботов, и из них некоторые вообще не нужны. Нужно посмотреть в логах, кто нагружает сайт запросами, лишних блокировать, реальных пользователей и поисковики оставить.
38.
ART994 25.12.2025 / 17:40
GodZiLLa, пользователей еще нет. это из за новостей
39.
GodZiLLa 26.12.2025 / 12:14
ART994, как это связано на техническом уровне ? )
40.
Skyworker 28.12.2025 / 06:50
У меня по 70+ кило новостей, на каждом, и нормально.
Дело не в колличестве новостей, а сколько активных онлайн, именно из-за них и нагрузка, в том числе и от ботов, и из них некоторые вообще не нужны. Нужно посмотреть в логах, кто нагружает сайт запросами, лишних блокировать, реальных пользователей и поисковики оставить.
Да, через апач блочить ботов быстрее удобней, но, говорят, что на nginx сайты работают в целом быстрее, если все правильно настроить. Как вариант для ускорения сайта можно Redis поставить, он будет кешировать запросы в оперативку и быстро оттуда отдавать контент пользователям сайта, намного быстрее чем из БД, которая на диске.
41.
GodZiLLa 29.12.2025 / 07:51
Skyworker, да, redis+nginx+оптимизация кеширование
URL:
https://visavi.net/topics/44984