LINUX.ORG.RU
ФорумAdmin

Как дать возможность работать админу?

 ,


0

2

Вчера столкнулся с весьма неприятной фичей на веб-сервере.
Понадобилось ночью срочно зайти на сайт, но сервер в это время занялся бекапами и прочими полезными делами.

Да так усиленно, что при многократных попытках зайти на сайт сервер регулярно выдавал ошибку 504 Gateway Time-out.
Типа «Я очень занят, зайдите позже».

Присмотрелся - один и процессов жрал аж 99%, и им оказался tar.
Понятно, что-то тарилось. Кильнул его.
Но тогда выполз exim, который жрал столько же, но килянию он не подавался.
Потом 98% жрал мускул, но его прибивать нельзя, развалится база.
Далее питон и прочая, прочая, прочая.

Забодало их килять, тем более что это почему-то ничего не давало.
Поэтому тупо перезагрузил сервак, потом еще раз, и наконец они все угомонились и я смог попасть на сайт.

Урок получил хороший, а теперь вопрос: как понизить активность этих процессов, чтобы они меньше кушали, и человек, т.е. админ, мог попасть на сайт пусть с некоторыми тормозами, но в любое время?

Посмотрел приоритеты задач, которые задаются командой 'nice', но это оказалось не то, приоритеты меняют только очередность выполнения задач.

Тогда как же решается эта проблема?

★★★★★

Тогда как же решается эта проблема?

Масштабированием. В данном случае, просто переехать на нормальный хостинг.

vvn_black ★★★★★
()

cgroups, cpu.shares, запихнуть sshd туда?

x3al ★★★★★
()

Понятно, что-то тарилось. Кильнул его.

Ну такой себе из вас админ. Можно другого?

PPP328 ★★★★★
()

но это оказалось не то, приоритеты меняют только очередность выполнения задач.

это где ты такое «посмотрел» ?

zaharov
()
Ответ на: комментарий от TomBOY

cpulimit, если машинка уже не справляется.

Сорри, совсем забыл сказать - проц вполне справлялся, а вот диск - нет.

Все эти проценты были определены в iotop.
Могу выложить скрин, если скажете куда.

chukcha ★★★★★
() автор топика

Первый вариант - именно дать работать админу. Написать скрипт, который будет запускать эти процессы в ручном режиме. Заходить раз в N-й период и запускать, когда не требуется выполнять никакие другие задачи.

Второй вариант - cgroups, контейнеры, разделение/ограничение ресурсов. Вынесение отдельных (критических) задач на отдельные мощности / виртуальные машины. Микросервисная архитектура и т.п.

atiradeon
()
Ответ на: комментарий от chukcha

Те же яйца, только в профиль.
Запускать процессы последовательно, а не параллельно.

TomBOY ★★
()
Ответ на: комментарий от atiradeon

Написать скрипт, который будет запускать эти процессы в ручном режиме. Заходить раз в N-й период и запускать, когда не требуется выполнять никакие другие задачи.

Это не подходит, потому что эти процессы должны работать ВСЕГДА - это же вебсайт.

Второй вариант - cgroups, контейнеры, разделение/ограничение ресурсов. Вынесение отдельных (критических)....

А это уже сложно. Неужели такая типичная и относительно простая по сути задача должна решаться столь сложными методами?
Сколько уже нашему Линуксу исполнилось лет? И что, до сих пор не предусмотрели нативного встроенного решения?

PS. На всякий случай, если кто пропустил -

Сорри, совсем забыл сказать - проц вполне справлялся, а вот диск - нет.
Все эти проценты были определены в iotop.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Сорри, совсем забыл сказать - проц вполне справлялся, а вот диск - нет.

Из простого: man pv или диск нормальный. Или вышесказанное.

atiradeon
()
Ответ на: комментарий от chukcha

Это не подходит, потому что эти процессы должны работать ВСЕГДА - это же вебсайт.

Чего? Бэкапы должны работать ежесекундно? Это как вообще?

atiradeon
()
Ответ на: комментарий от chukcha

Перечитай еще раз, нет там ничего про «очередность выполнения задачи».

man nice

Сорри, совсем забыл сказать - проц вполне справлялся, а вот диск - нет.

man ionice

zaharov
()
Ответ на: комментарий от chukcha

Вы что-то странное говорите. У меня тоже есть сервак где хостится 4 интернет-магазина с общей суточной посещаемостью от 100 до 700к уникальных пользователей. На нем все по старинке, без контейнеров и т.п. Просто раз в сутки, когда наименьшая посещаемость запускаю вручную скрипт для создания полных бэкапов. И то это чтобы случай чего сильно не усложнить работу менеджеров. Для синхронизации изменений кодовой базы там обычно минимальные ресурсы требуются, от считанных секунд работы процессорного времени.

Чтобы бэкапы делались непрерывно - первый раз такое слышу. И какой же это диск нужно иметь? Перетирать данные как бы толк нулевой с такой частотой.

atiradeon
()
Ответ на: комментарий от chukcha

А это уже сложно. Неужели такая типичная и относительно простая по сути задача должна решаться столь сложными методами?
Сколько уже нашему Линуксу исполнилось лет? И что, до сих пор не предусмотрели нативного встроенного решения?

Cgroups это и есть современное нативное встроенное решение. Для таких случаев как твой его и запилили. Но вот искусственный интеллект, который будет сам всё конфигурировать, не запилили. Подразумевается что ты этот самый интеллект и есть. Осталось перестать жить прошлым, вкатиться в документацию, осилить и начать использовать.

Jameson ★★★★★
()

Потом 98% жрал мускул, но его прибивать нельзя, развалится база.

Если и БД постоянно грузит диск. Тут уже комплексный подход нужен. От оптимизации самого программного решения, EXPLAIN’ить запросы и смотреть почему так происходит, до распределения нагрузок по мощностям и выделения квот.

Ну и ревизию сервера делать обязательно, судя по вашим ответам, вы сами не знаете что там происходит на сервере в автоматическом режиме и нужно ли оно вообще.

atiradeon
()

cgroup. Вроде Лёня сделал так, чтобы можно было одной строчкой в юните включить ограничения для сервиса.

ox55ff ★★★★★
()
Ответ на: комментарий от chukcha

И что, до сих пор не предусмотрели нативного встроенного решения?

Предусмотрели ­- systemd, параметры CPUWeight/CPUQuota, MemoryHigh/MemoryMax, IOWeight/IOReadBandwidthMax/IOWriteBandwidthMax, IOReadIOPSMax/IOWriteIOPSMax.

Для подробностей читайте man systemd.resource-control.

ValdikSS ★★★★★
()
Ответ на: комментарий от atiradeon

Бэкапы должны работать ежесекундно?

Да не бекапы, а мускул. Бекап я еще могу кильнуть, а базу опасно.

Из простого: man pv или диск нормальный.

Да какой еще уже диск! И так стоит черный WD на 4 ТБ.
Не диск надо менять, а оптимизировать выполнение задач.

И сдается мне, что в этой статье написана полная чушь -

Например, если у нас есть один процесс, работающий с приоритетом 10, а другой процесс работающий с приоритетом 15, то в первую очередь будет выполняться процесс приоритетом 10, а уже после него, тот, где приоритет 15.

Если верить написанному, то выходит, что если бекап будет длиться 5 часов, то все остальные задачи будут стоять??
Чушь собачья!

На самом деле в любой многозадачной систему процессы работают по тикам, т.е. прерываниям, которые отводятся в разных количествах для разных приоритетов по разному.
Как-то так.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Включаю Вангу. Это вы за приоритетное планирование планировщика задач? Ну, правильно там все сказано. Задачи с высоким приоритетом выполняются первыми, с более низким - вторыми. Т.е. очень абстрагируя - за первый такт (естественно, не за такт, а для примера) отработают процессы у которых приоритет 10, за второй такт у которых 15 и т.д. Это если очень просто, там много факторов приоритизации, включая процессы «зомби», процессы занятые вводом-выводом и пр. Если глубоко копать в суть - я тоже здесь профан. Но по тексту цитаты (непонятно откуда) - там все верно написано.

Да не бекапы, а мускул. Бекап я еще могу кильнуть, а базу опасно.

Я по ОП так понял, что основной затык был в бэкапировании. Что там запускает остальное - непонятно. Наверняка тот же архиватор делает mysqldump или типа того. А может чего с оптимизацией самой базы или нагрузка на сайт критическая со вне идет. Как уже говорил:

Ну и ревизию сервера делать обязательно, судя по вашим ответам, вы сами не знаете что там происходит на сервере в автоматическом режиме и нужно ли оно вообще.

atiradeon
()
Ответ на: комментарий от chukcha

cgroups

И что, до сих пор не предусмотрели нативного встроенного решения?

Насколько я понимаю, cgroups и есть нативное встроенное решение специально для руления такими вещами в Linux.

P.S. А, уже ответили :)

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

Может, и так, только сам термин «контейнеризация» мне совсем не понравился.
Насколько понял, что сервер, который работал 10 лет, надо переделывать?
Ну его, я лучше с найсами поиграюсь ;-)

chukcha ★★★★★
() автор топика
Ответ на: комментарий от hobbit

В целом, для начала нужно прояснить, что вообще происходит на сервере. А ТС этого сам не знает. Например из этого:

Присмотрелся - один и процессов жрал аж 99%, и им оказался tar.
Понятно, что-то тарилось. Кильнул его.
Но тогда выполз exim, который жрал столько же, но килянию он не подавался.
Потом 98% жрал мускул, но его прибивать нельзя, развалится база.
Далее питон и прочая, прочая, прочая.

Можно сделать вывод, что работает некий сервис запускающий скрипт архивации, который запускает другие процессы последовательно.

  • ТС убивает tar - запускается архивация почты;
  • убивает exim - отрабатывает mysqldump;
  • и прочая, прочая, прочая.

Без понимания как отрабатывают процессы - ограничивать ресурсы непонятно каким именно образом. Без «разбора полетов» на самом сервере, ограничения ресурсов могут ухудшить ситуацию. Например, кривой скрипт на питоне, который дампит базу (вместо mysqldump). Может там гипервизор повыше стоит (ТС ничего об этом не писал), который лимитирует IO или банальные проблемы с дисковой системой, которые проявляются только под нагрузкой.

Вариантов масса. Нужна нормальная ревизия сервера. Потом можно решать, что делать дальше.

atiradeon
()
Ответ на: комментарий от atiradeon

Нужна нормальная ревизия сервера.

Самое смешное, что сам же этот сервер и настраивал :-)
И скрипт для бекапирования тоже.
Но за многие годы система настолько обросла всякими нужными фишками, что уже и сам не вспомню, где, чего и как.

Одно точно помню - что заоптимизировал его настолько всякими конфигами и кешами, настолько, что дальше уже некуда.
И вначале по сравнению с дефолтовыми настройками это очень помогло.

А перегруз диска объясняется просто - БД росла и достигла объема около 60 ГБ, и когда вместе встречаются бекап, мускул, почта и сфинкс - наступает полный абзац.

Раньше разнес бекап и некоторые другие задачи по времени, но это уже помогает мало, надо уменьшить процессорное время для некоторых из них.
Гипервизора - нет.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Раньше разнес бекап и некоторые другие задачи по времени, но это уже помогает мало, надо уменьшить процессорное время для некоторых из них.

Для каких? Такое чувство, что не вам нужно, а нужно выпытывать -)

А перегруз диска объясняется просто - БД росла и достигла объема около 60 ГБ, и когда вместе встречаются бекап, мускул, почта и сфинкс - наступает полный абзац.

Ок. Если правильно понял - основная нагрузка при бэкапе БД идет, которым занимается самописный скрипт. Уже что-то.

  1. Если при обычной работе сайта нет большой нагрузки (60 ГБ не прям сильно много на среднем сервере), все ок с индексами и запросами (реляционными связями) - на другую ноду (сервер/контейнер) её выносить не нужно. В обратном случае - нужно.

  2. Сколько изменений происходит в БД в течении суток? Бэкапить все данные не нужно, тем более такой объем. Тот же mysqldump может и в отдельные таблицы, и в лимит записей, и в то и другое. Делаете основной бэкап, например, раз в месяц, а изменяемые данные ежедневно в формате dd_mm_yy.sql. Раз в месяц их архивируете и кладете к полному бэкапу БД.

В общем, переписывайте «скрипт для бекапирования».

atiradeon
()

Понятно, что-то тарилось. Кильнул его.

Но тогда выполз exim, который жрал столько же, но килянию он не подавался.

Забодало их килять, тем более что это почему-то ничего не давало.

Поэтому тупо перезагрузил сервак,

потом еще раз

Ахаха, что ты делаешь, прекрати)

Урок получил хороший

как понизить активность этих процессов

чтобы они меньше кушали

и человек, т.е. админ

Это один из тех постов, которые не прекращают доставлять

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Кстати, то, что тар кушает 99% io, это норма, так и должно быть)

Для него может быть и норма, но мне бы хотелось умерить его аппетит.
Архиваторы имеют такую возможность (выбор степени сжатия), а tar, увы, нет

chukcha ★★★★★
() автор топика
Ответ на: комментарий от goingUp

Да. Только вряд ли он делает tar -cf archive.tar *. Это же бэкапы, по умолчанию сжимать нужно. Если tar, то tar -cvzf archive.tar.gz * обычно, а это совсем другая история.

Хз, так вроде для таких задач никто не делает, даже не задумывался. Ну, так-то да - первый вариант IO будет грузить сильно.

atiradeon
()
Ответ на: комментарий от chukcha

Так вы что реально без сжатия архивируете? Это раньше вроде смысл для ленточных накопителей имело, а сейчас и не знаю.

Архиваторы имеют такую возможность (выбор степени сжатия), а tar, увы, нет

Так опция, -z, например, указывает просто-напросто использовать gzip. По умолчанию у него степь сжатия 6 вроде.

Можно так, к примеру, сделать:

tar cvf - /home/chuckcha/* | gzip -9 -> archive.tar.gz

или

export GZIP=-9
tar cvzf archive.tar.gz /home/chuckcha/*

Все можно.

Тогда понято, почему у вас IO такой даже при tar. Но это и других причин не отменяет, с той же БД.

atiradeon
()
Ответ на: комментарий от atiradeon

tar cvf - /home/chuckcha/* | gzip -9 -> archive.tar.gz

tar cvf - /home/chuckcha/* | gzip -9 > archive.tar.gz

Удачи вам всем в этом нелегком испытании :) Спать пойду. Понятно, что ничего не понято.

atiradeon
()
Ответ на: комментарий от atiradeon

Да. Только вряд ли он делает tar -cf archive.tar *. Это же бэкапы, по умолчанию сжимать нужно

Нет, только тарю. И даже это занимает 4-5 часов.
А если еще и сжимать, то это даже не ночь займет, это будет длится вообще неизвестно сколько дней.

Для каких? Такое чувство, что не вам нужно, а нужно выпытывать -)

Уж извините, я не умею прогнозировать ваши вопросы ;-)

chukcha ★★★★★
() автор топика

Почитал тред. Мда, деградировавший админ (который сам не знает, что у него происходит, киляет все подряд и не может это объяснить) - это выглядит очень грустно…

zemidius
()
Ответ на: комментарий от atiradeon

Нужна нормальная ревизия сервера.

Я вот тоже не понимаю, что там у ТС твориться если добавление одного потока на чтение и одного на запись у него кладет сервак. Вариантов много, от хард давно попрощался и работает на честном слове, до оно и так еле вывозит.

anc ★★★★★
()
Ответ на: комментарий от chukcha

И так стоит черный WD на 4 ТБ.

А перегруз диска объясняется просто - БД росла и достигла объема около 60 ГБ

60 гигабайт на одиночном hdd - это плохо и для сервера и для бэкапа.

zemidius
()

Понятно, что-то тарилось. Кильнул его.

И ты правда думаешь, что это нормальное решение?

Zhbert ★★★★★
()
Ответ на: комментарий от chukcha

Нет, только тарю. И даже это занимает 4-5 часов. А если еще и сжимать, то это даже не ночь займет, это будет длится вообще неизвестно сколько дней.

В твоем случае (99% IO), сжатие может значительно ускорить процесс, если у тебя не атом или целерон вместо процессора, если твои данные жмутся хотябы в 2-3 раза, то таким образом ты уменьшишь нагрузку на диск в соответствующее количество раз.

zaharov
()
Последнее исправление: zaharov (всего исправлений: 1)

Admin walked into a bar

Видит, что-то тарится, кильнул.

Чисто анекдот.

WitcherGeralt ★★
()
Ответ на: комментарий от chukcha

до сих пор не предусмотрели нативного встроенного решения?

Здрасте-приехали, cgroup-ы и контейнеры в ядре уже черти сколько времени! Куда уж более нативно?

Pinkbyte ★★★★★
()
Ответ на: комментарий от chukcha

Нет, только тарю. И даже это занимает 4-5 часов.

Наоборот, время уменьшится. У вас же в диске «затык», если он захлебывается - сжатие снизит IO и ускорит процесс. Вообще, такое подозрение, что с самим диском что-то не то. Как будь-то он под нагрузкой греется и начинает тупить, как один из вариантов.

История, конечно, анекдотичная. Тред надо где-то закрепить :)

atiradeon
()
Ответ на: комментарий от zemidius

а если оно еще и бэкапится с помощью mysqldump, тогда 504 на сайте может быть тупо из-за залоченных таблиц во время дампа. В общем и целом все плохо.

keir ★★
()

Я не вижу сервера о проблемах с которым ТС пишет.

База не помещается в оперативку (ну и что что она 60 Гб, добейте оперативки до 128 Гб или больше) что просто неприлично.

Затык по дисковым операциям - а один диск имеющийся в наличии никак не является дисковой подсистемой для нормального сервера. 8 (восемь) Х 12 Gb/s SAS SSD в RAID-60 с чего начинается самый простой сервер.

suffix ★★
()
Ответ на: комментарий от keir

mysqldump умеет и без блокировки. Но в целом, все 60GB постоянно бекапить - подход неверный и бессмысленный.

atiradeon
()
Ответ на: комментарий от suffix

8 (восемь) Х 12 Gb/s SAS SSD в RAID-60 с чего начинается самый простой сервер.

А вот и представители газпрома пожаловали.

anc ★★★★★
()
Ответ на: комментарий от anc

В твоем случае (99% IO), сжатие может значительно ускорить процесс,

По многим причинам сумлеваюсь, конечно, но стоит попробовать.
А вдруг вы правы?

А вот и представители газпрома пожаловали.

anc Класс! Ваша юморная реплика мне очень понравилась, респект!

К остальным это тоже относится, которые чуть что, предлагают диск менять, оперативку в 6 раз увеличить и прочее.

Это мой личный сервер, и на такие апдейты у меня банально нет средств.
Головой думайте, а не апдейтами.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

К остальным это тоже относится, которые чуть что, предлагают диск менять, оперативку в 6 раз увеличить и прочее.

Согласен. Ящитаю, нужно просто поменять админа.

LamerOk ★★★★★
()
Ответ на: комментарий от romanlinux

Нах нам бэкапы. Кильнуть все…..

Понимаете, когда срочно нужно срочно зайти на сайт, чтобы получить там очень важную на данный момент информацию, не до бекапов.
Я бы в этот момент действительно кильнул бы все, лишь бы это помогло ее получить.

Но вам, похоже, этого не понять, потому что как и все читатели, вы стартовый пост не читаете, только последние.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от romanlinux

ТС пишет про случай в процессе разбора проблемы. Так что «смех-то гуевый».

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.