• Решено yessoftmk

    (@yessoftmk)


    Добрый день!

    Подскажите пожалуйста, как понять сколько в среднем ОЗУ необходимо для одного сайта визитки? Ранее я думал что плагин квери монитор показывает сколько сайт потребляет ОЗУ — https://i.imgur.com/7Es3vWr.png

    У меня ВПС убунту 16 ГБ ОЗУ. Размещено 50 малопосещаемых сайтов визиток (не помойки, на всех минимум плагинов) и пару вукомерц магазинов. На магазинах мемкеш, индексы в таблицах. Все сайты работают через клаудфлаер — нестроен кеш, СДН, защита от ботов, хотлинков, на всех сайтах (через клаудфлаер) по ASN отсечены диджитал окен, ОВН и прочие провайдеры с которых как правило боты лезут. Т е сделано все, чтобы меньше сервер дергать.

    Столкнулся с тем, что не хватает ОЗУ:

    В системном логе каждые пару часов такая ошибка:

    May 12 05:33:09 ubuntu-16gb-hel1-1 kernel: [10247461.304018] out_of_memory+0x106/0x2e0 + May 12 05:33:09 ubuntu-16gb-hel1-1 kernel: [10247461.306012] Out of memory: Killed process 149455 (mysqld) total-vm:5195348kB, anon-rss:2267652kB, file-rss:0kB, shmem-rss:0kB, UID:114 pgtables:5072kB oom_score_adj:0

    в логе СУБД : 2024-05-09T11:36:17.944193Z 1 [Note] [MY-012551] [InnoDB] Database was not shutdown normally! 2024-05-09T11:36:17.944201Z 1 [Note] [MY-012552] [InnoDB] Starting crash recovery. 2024-05-09T11:36:17.945640Z 1 [Note] [MY-013086] [InnoDB] Starting to parse redo log at lsn = 100297297003, whereas checkpoint_lsn = 100297297013 and start_lsn = 100297296896 2024-05-09T11:36:17.945666Z 1 [Note] [MY-012550] [InnoDB] Doing recovery: scanned up to log sequence number 100297297013 2024-05-09T11:36:17.958026Z 1 [Note] [MY-013083] [InnoDB] Log background threads

    Вот такие настройки СУБД — https://i.imgur.com/Vaf0JiC.png

    Еще разные показали проверял — https://i.imgur.com/mcINUVE.png

    Смотрел нагрузку на СУБД — https://i.imgur.com/7qNWPLv.png

    Статистика запросов — https://i.imgur.com/QrGP5nm.png

    Думал может коннекты залипают или просто много коннектов — https://i.imgur.com/RVCtl2f.png

    Коннекты к самой субд — https://i.imgur.com/gbrIRQg.png

    Наблюдал в течении времени за ОЗУ — https://i.imgur.com/DN9LXCo.png и так — https://i.imgur.com/9pjRrz7.png

    Вот такая ситуация +- одинаково всегда.

    И вот тут интересную инфо нашел — https://i.imgur.com/hinMCu8.png Открыто 4000 таблиц.

    Подскажите правильно ли я понимаю, что сайтов многовато, и даже если они мало посещаемые, сервак держит таблицы вордпресса в памяти и этой памяти (16 гиг, ну минус на саму ОС, — фаст панель и прочее ПО) не хватает на 50 сайтов.

    Как тогда понять сколько одному сайту ВП необходимо ОЗУ? И как можно с терминала конкретный сайт на ОЗУ профилировать…. чтобы найти виновника, может один сайт конкретно виноват.

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Yui

    (@fierevere)

    永子

    на ВП надо, как вы сами намерили 32-40 Мб на запрос, желательно применять OpCache, из кучи мелких сайтов желательно сделать сеть сайтов, тогда и в кеш скриптов все поместится и таблиц будет гораздо меньше. Тем более сайты-визитки из пары страниц.

    memcached мало используется, наверное не для всех сайтов настроен,
    он в 2-3 раза снижает число запросов.

    Но у вас проблема не в WP, у вас MySQL все сжирает, настраивайте сервер СУБД, количество потоков, максимум открытых таблиц, кеширование таблиц, и вам с этим не на форум WP даже скорее всего

    ps: можно начать с запуска mysqltuner (должен быть в дистрибутиве, отдельным пакетом), он возьмет статистику работы mysqld (чем дольше тот проработал — тем лучше) и предложит оптимальную конфигурацию

    • Ответ изменён 2 месяца назад пользователем Yui.
    • Ответ изменён 2 месяца назад пользователем Yui.
    Автор yessoftmk

    (@yessoftmk)

    Спасибо за ответ.

    настраивайте сервер СУБД

    да, mysqltuner  выдал рекомендации, их и применил, это с его рекомендаций — https://i.imgur.com/RSelI9h.png

    количество потоков

    Вы имеете в виду max_connections? Это значение мониторил, то что по дефолту с головой пока хватает.

    Я тут еще с утилитой atop баловался, она показывает что пхп 75% ОЗУ забирает https://i.imgur.com/ljqYtSW.png



    Модератор Yui

    (@fierevere)

    永子

    а у вас php-fpm или php как CGI используется?
    atop вам кажет что «php» это CLI php, который с консоли запустили или из задания cron или иным образом через exec/system итп

    надо найти откуда это запускается и что это вообще такое

    Автор yessoftmk

    (@yessoftmk)

    Я когда выбирал, то нагуглил что FastCGI самый быстрый, исключительно он и работает.

    CLI php, который с консоли запустили или из задания cron или иным образом через exec/system итп

    ага, забыл у меня штук пять телеграм ботов есть, и там 5 кронов настроенных в FastPanel, вызываются. Значит проверю что там они вызывает, потому что один бот с достаточно большим количеством подписчиков. Хотя кроны работают через команду /usr/bin/wget…

    Я еще newrelic поставил, пока ничего критичного не вижу — https://i.imgur.com/uYySYui.png жаль только не могу пока плагин завести его на самом тяжелом магазине, пишет — https://i.imgur.com/2yxYMik.png
    разбираюсь

    • Ответ изменён 2 месяца назад пользователем yessoftmk.

    Решилось так:

    1) перенес с ВДС 4 вукомерц магазина
    2) оставшимся критичным магазинам и не банальным визиткам поставил REDIS вместо мемкеша.
    3) Добавил на ВДС своп, благодаря ему видать память в ноль не расходуется, а просто сбрасывается в своп лишнее.

    Неделя работы — не одной ошибки по нехватки памяти

    https://i.imgur.com/LaEPKk9.png


    по процессам изменений никаких — https://i.imgur.com/5ppBD62.png

    • Ответ изменён 1 месяц, 3 недели назад пользователем yessoftmk.

    @yessoftmk с редисом осторожнее… у меня был случай, когда у него съехала крыша, и он начал лог ошибок производить со скоростью гигабайт в минуту

Просмотр 6 ответов — с 1 по 6 (всего 6)