- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
PS Возможно большая часть нагрузки упала из-за допиливания nginx. Раньше он использовался только для передачи ответов от httpd, а теперь и статику раздает. Хотя думаю, что httpd был виноват и может действительно что-то клинило его - вот он и отжирал память.
stepan007, вместе с nginx вам решительно не нужно MaxClients 250. Это все тоже повлияет на использование памяти.
ну по идеи кеш акселератора не может быть вытеснен - к нему же постоянно должны идти обращения. Также установлен shm_ttl и shm_prune_period и еще tmpwatch есть, тоже чистит.
Вообще, я заметил, что вы неправильно понимаете механизм кеширования.
В широком смысле кеширование это и key_buffer у mysql и кеш eaccelerator. вы пытаетесь сделать кеш такого размера чтобы поместились все данные, но это не нужно и невыгодно, так как приводит к перерасходу памяти и свопингу как у вас.
У вас действительно порядка нескольких Гб php-кода ? Зачем использовать php-cli ? это хостинг или что?
Почему не сделал через shm - апач не стартует, если вписать shm_size более 1024МБ (1ГБ очень быстро заполнялся и я думал, что надо гораздо больше). Но сейчас стоит 4096МБ, хотя используется где-то до 1,5ГБ.
С тех пор как Одноклассники научили людей писать в интернете, они слишком легко пишут ерунду.
По крайней мере кеш eacelerator бессмысленно держать в tmpfs, если его можно поместить в память внутренними средствами. Логи, как правило, пишутся многими программами буферизировано и большой нагрузки не добавляют. Вы больше потеряете от отключения slow-log в mysql.
По поводу кешей, Вы уже советовали уменьшить key_buffer_size, может еще что-то уменьшу в my.cnf - попробовать можно, а там видно будет. Ну это уже ночью или завтра, т.к. бекап еще идет.
такой длительный бекап неизбежно выносит все кеши. я уже обращал внимание на это в начале темы.
Время сбора информации по свопу этим скриптом довольно большое
Это скрипт, в общем-то. На С будет побыстрее и top уже делает похожие по сложности вещи.
Тем более, смотреть одну строчку в /proc/<pid>/status.
Конфиг апача тоже прикрепил. Сейчас в среднем больше 200 free slots, а еще idle slots.
ListenBacklog 4 - вот ваша причина, господин аптимизатор :D Увеличьте backlog (верните умолчание!), уменьшите MaxClients.
вместе с nginx вам решительно не нужно MaxClients 250. Это все тоже повлияет на использование памяти.
Таких нагрузок нету, вообще обычно используется 50 дочерних процессов (busy+idle). Поставил start и minspare 25, maxspare 50, serverlimit и maxclients 100, maxrequestperchild 250.
Вообще, я заметил, что вы неправильно понимаете механизм кеширования.
В широком смысле кеширование это и key_buffer у mysql и кеш eaccelerator. вы пытаетесь сделать кеш такого размера чтобы поместились все данные, но это не нужно и невыгодно, так как приводит к перерасходу памяти и свопингу как у вас.
У вас действительно порядка нескольких Гб php-кода ? Зачем использовать php-cli ? это хостинг или что?
Вообще я пытался закешировать mysql, т.к. при том же рестарте сервиса - это очень узкое место на сервере. Раньше удавалось держать все данные mysql в кеше и проблем в работе сервера не было, и медленных запросов было меньше. Сейчас рестарт mysql равносилен дауну сервера минут на 15, пока он закеширует файлы и все станет нормально.
Eaccelerator вообще поставил чисто попробовать, раньше его не было - возможно, стоит его вообще убрать, или сделать на 128-256-512-1024МБ (тогда и tmpfs точно не нужен) - чтобы не отнимал / не сильно отнимал ОЗУ. Что подскажите, как поступить?
Также, тот же mysqltuner и tuning-primer советуют ставить key_buffer_size 6ГБ, больше 1/4 ОЗУ не советует, но этого вроде пока достаточно. Вообще можно попробовать key_buffer_size вообще убрать и по идеи система сама закеширует нужные ей индексы и таблицы, и в данном случае в ОЗУ не будут висеть индексы от неиспользуемых БД (которые туда попадают при оптимизации БД или при ежедневном дампе БД). Может стоит попробовать или это глупо?
Сколько ГБ php-кода я не знаю. PHP-CLI стоит в директадмине, поэтому он и используется. Да, это хостинг с небольшим количеством клиентов, на сервере более 200сайтов.
С тех пор как Одноклассники научили людей писать в интернете, они слишком легко пишут ерунду.
По крайней мере кеш eacelerator бессмысленно держать в tmpfs, если его можно поместить в память внутренними средствами. Логи, как правило, пишутся многими программами буферизировано и большой нагрузки не добавляют. Вы больше потеряете от отключения slow-log в mysql.
Лог mysql-slow оставил на /var/log/mysql-slow.log, только убрал log_quieries_without_indexes, теперь он не особо часто обновляется.
такой длительный бекап неизбежно выносит все кеши. я уже обращал внимание на это в начале темы.
Ну это да, но все равно бекапы надо делать. И даже если платить за решения, которые проводят бекапинг на стороне бекап-сервера - все равно кеши пострадают, т.к. будет интенсивное чтение файлов.
ListenBacklog 4 - вот ваша причина, господин аптимизатор :D Увеличьте backlog (верните умолчание!), уменьшите MaxClients.
Я вроде даже не помню, чтобы менял это значение. А какое значение по умолчанию, стоит директадмин?
myhand,
Сервер все равно свопится, хотя на данный момент это не отражается на производительности. В swap было до 1,5ГБ, сейчас 0,5ГБ. Исправленный Вами скрипт все также обрабатывается без ошибок и выводит:
Swap usage[kB] Process[PID]
============================
============================
Overall swap used: 0 kB
Ну это да, но все равно бекапы надо делать. И даже если платить за решения, которые проводят бекапинг на стороне бекап-сервера - все равно кеши пострадают, т.к. будет интенсивное чтение файлов.
Какое такое "интенсивное чтение"? inotify всякие давно в ядре есть.
Я вроде даже не помню, чтобы менял это значение. А какое значение по умолчанию, стоит директадмин?
Без понятия, если честно. Значение по-умолчанию в апаче - что-то типа 511. Не помню сходу дистрибутива, который его бы менял.
Сервер все равно свопится, хотя на данный момент это не отражается на производительности. В swap было до 1,5ГБ, сейчас 0,5ГБ. Исправленный Вами скрипт все также обрабатывается без ошибок и выводит:Overall swap used: 0 kB
А покажите вывод простых
myhand,
Поставил в httpd backlog 511.
[root@server /]# grep Swap /proc/meminfo
SwapCached: 55404 kB
SwapTotal: 12691308 kB
SwapFree: 12635904 kB
[root@server /]# awk '/^Swap/{s=s+$2}END{print s}' /proc/*/smaps
0
Таких нагрузок нету, вообще обычно используется 50 дочерних процессов (busy+idle). Поставил start и minspare 25, maxspare 50, serverlimit и maxclients 100, maxrequestperchild 250.
Вот именно : нагрузок нет, но предельное значение вы выставляете избыточно большое. Иногда, по разным причинам число апачей может резко увеличиться. Предельное значение MaxClients это защита от инвалидации кеша файлов ОС. Вот 50-60 и поставьте.
Ну это да, но все равно бекапы надо делать. И даже если платить за решения, которые проводят бекапинг на стороне бекап-сервера - все равно кеши пострадают, т.к. будет интенсивное чтение файлов.
Можно выбрать такой скрипт бекапа, который кеш не затрагивает вообще.
Хотя, если сделать простой и достаточно медленный бекап, то данные будут успевать "влетать назад" в кеш и все тоже пройдет плавно.
Сейчас рестарт mysql равносилен дауну сервера минут на 15, пока он закеширует файлы и все станет нормально.
можете попробовать при загрузке mysql исполнять операторы LOAD INDEX INTO CACHE, но на хостинге неизвестных сайтов это целая проблема, выбрать горячие индексы. Опять палка о двух концах: они загрузят в память вообще все части индексов, в том числе и не нужные. Обычно никто не рестартит mysql. Я бы в вашем случае потерпел.
Вообще можно попробовать key_buffer_size вообще убрать и по идеи система сама закеширует нужные ей индексы и таблицы, и в данном случае в ОЗУ не будут висеть индексы от неиспользуемых БД (которые туда попадают при оптимизации БД или при ежедневном дампе БД). Может стоит попробовать или это глупо?
Да, это глупо. Mysql точно лучше ОС знает какие файлы ему кешировать внутри себя. Индексы почти всегда приоритетнее данных.
я за то, чтобы попробовать кеш небольшого размера - 512мб. Но это только предположение.
А можно увидеть полный конфиг от eaccelerator? Какой был и какой сейчас, если меняли. Кстати, вы помните про control.php?
myhand,
Поставил в httpd backlog 511.
Просто уберите директиву - останется умолчание.
[root@server /]# grep Swap /proc/meminfo
SwapCached: 55404 kB
SwapTotal: 12691308 kB
SwapFree: 12635904 kB
[root@server /]# awk '/^Swap/{s=s+$2}END{print s}' /proc/*/smaps
0
А есть-ли мальчик вообще (т.е. своп)? 🤪
Поле Swap: в файлах smaps имеется для centos (я уже на это вам указывал). Вряд-ли там неверная информация. Искать сервер с ненулевым свопом под centos или делать искусственные тесты - мне лень. Тем не менее...
Смотрите. У вас: SwapTotal-SwapFree=55404=SwapCached
Вот мой пример, где точно есть своп (это debian 6):
Видим, что у меня SwapTotal-SwapFree=207500!=SwapCached. И разность между "Overall swap used" и SwapCached как раз около 207500 (не точно, т.к. между запусками команд был лаг).
still also is in the swapfile (if memory is needed it
doesn't need to be swapped out AGAIN because it is already
in the swapfile. This saves I/O)
netwind, myhand,
Подкорректировал httpd maxclients, listen backlog и php.ini для eaccelerator (512МБ и убрал запись в tmpfs, теперь в ОЗУ и на HDD).
netwind,
Насчет бекапа надо изучать rsync - у меня им переносятся дампы баз, с установленными nice, ionice и опцией --bandwith-limit. А полный бекап делается стандартными средствами директадмина.
Рестартить мускул я б тоже не стал, но его надо как-то настроить на максимальную производительность - а для этого надо рестартить и ждать 1-2дня.
myhand,
Насчет swap, получается оно раз закинуло в swap, потом забрало информацию обратно в ОЗУ и в swap'е просто держит, авось пригодится:) Прикрепил график swap. Получается, трогать вообще не нужно - оно раз когда сгружает тормозит и все, а я напрасно после делаю swapoff и swapon (опять тормозит), после оно опять сгружает часть в swap (опять тормозит) ну и т.д.
tls,
Прикрепил оба конфига.