Использование VM

S0
На сайте с 24.06.2007
Offline
84
#41

PS Возможно большая часть нагрузки упала из-за допиливания nginx. Раньше он использовался только для передачи ответов от httpd, а теперь и статику раздает. Хотя думаю, что httpd был виноват и может действительно что-то клинило его - вот он и отжирал память.

N
На сайте с 06.05.2007
Offline
419
#42

stepan007, вместе с nginx вам решительно не нужно MaxClients 250. Это все тоже повлияет на использование памяти.

stepan007:
ну по идеи кеш акселератора не может быть вытеснен - к нему же постоянно должны идти обращения. Также установлен shm_ttl и shm_prune_period и еще tmpwatch есть, тоже чистит.

Вообще, я заметил, что вы неправильно понимаете механизм кеширования.

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

У вас действительно порядка нескольких Гб php-кода ? Зачем использовать php-cli ? это хостинг или что?

Почему решил использовать tmpfs, нашел статьи где рекомендуют все такое (php сессии, временные файлы mysql, кеши php акселератора) засунуть именно туда. Насчет mysql-slow, решил его сюда положить, чтобы уменьшить нагрузку на hdd, хотя думаю его вообще выключить (также в /dev/null отправляю логи exim, с недавнего времени отключил логи httpd).
Почему не сделал через shm - апач не стартует, если вписать shm_size более 1024МБ (1ГБ очень быстро заполнялся и я думал, что надо гораздо больше). Но сейчас стоит 4096МБ, хотя используется где-то до 1,5ГБ.

С тех пор как Одноклассники научили людей писать в интернете, они слишком легко пишут ерунду.

По крайней мере кеш eacelerator бессмысленно держать в tmpfs, если его можно поместить в память внутренними средствами. Логи, как правило, пишутся многими программами буферизировано и большой нагрузки не добавляют. Вы больше потеряете от отключения slow-log в mysql.


По поводу кешей, Вы уже советовали уменьшить key_buffer_size, может еще что-то уменьшу в my.cnf - попробовать можно, а там видно будет. Ну это уже ночью или завтра, т.к. бекап еще идет.

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

Кнопка вызова админа ()
M
На сайте с 16.09.2009
Offline
278
#43
Pilat:
Время сбора информации по свопу этим скриптом довольно большое

Это скрипт, в общем-то. На С будет побыстрее и top уже делает похожие по сложности вещи.

Тем более, смотреть одну строчку в /proc/<pid>/status.

stepan007:
Конфиг апача тоже прикрепил. Сейчас в среднем больше 200 free slots, а еще idle slots.

ListenBacklog 4 - вот ваша причина, господин аптимизатор :D Увеличьте backlog (верните умолчание!), уменьшите MaxClients.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
S0
На сайте с 24.06.2007
Offline
84
#44
netwind:
вместе с nginx вам решительно не нужно MaxClients 250. Это все тоже повлияет на использование памяти.

Таких нагрузок нету, вообще обычно используется 50 дочерних процессов (busy+idle). Поставил start и minspare 25, maxspare 50, serverlimit и maxclients 100, maxrequestperchild 250.

netwind:
Вообще, я заметил, что вы неправильно понимаете механизм кеширования.
В широком смысле кеширование это и 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сайтов.

netwind:
С тех пор как Одноклассники научили людей писать в интернете, они слишком легко пишут ерунду.
По крайней мере кеш eacelerator бессмысленно держать в tmpfs, если его можно поместить в память внутренними средствами. Логи, как правило, пишутся многими программами буферизировано и большой нагрузки не добавляют. Вы больше потеряете от отключения slow-log в mysql.

Лог mysql-slow оставил на /var/log/mysql-slow.log, только убрал log_quieries_without_indexes, теперь он не особо часто обновляется.

netwind:
такой длительный бекап неизбежно выносит все кеши. я уже обращал внимание на это в начале темы.

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

myhand:
ListenBacklog 4 - вот ваша причина, господин аптимизатор :D Увеличьте backlog (верните умолчание!), уменьшите MaxClients.

Я вроде даже не помню, чтобы менял это значение. А какое значение по умолчанию, стоит директадмин?

myhand,

Сервер все равно свопится, хотя на данный момент это не отражается на производительности. В swap было до 1,5ГБ, сейчас 0,5ГБ. Исправленный Вами скрипт все также обрабатывается без ошибок и выводит:

Swap usage[kB] Process[PID]

============================

============================

Overall swap used: 0 kB

M
На сайте с 16.09.2009
Offline
278
#45
stepan007:
Ну это да, но все равно бекапы надо делать. И даже если платить за решения, которые проводят бекапинг на стороне бекап-сервера - все равно кеши пострадают, т.к. будет интенсивное чтение файлов.

Какое такое "интенсивное чтение"? inotify всякие давно в ядре есть.

stepan007:
Я вроде даже не помню, чтобы менял это значение. А какое значение по умолчанию, стоит директадмин?

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

stepan007:
Сервер все равно свопится, хотя на данный момент это не отражается на производительности. В swap было до 1,5ГБ, сейчас 0,5ГБ. Исправленный Вами скрипт все также обрабатывается без ошибок и выводит:Overall swap used: 0 kB

А покажите вывод простых

grep Swap /proc/meminfo

awk '/^Swap/{s=s+$2}END{print s}' /proc/*/smaps
S0
На сайте с 24.06.2007
Offline
84
#46

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

N
На сайте с 06.05.2007
Offline
419
#47
stepan007:
Таких нагрузок нету, вообще обычно используется 50 дочерних процессов (busy+idle). Поставил start и minspare 25, maxspare 50, serverlimit и maxclients 100, maxrequestperchild 250.

Вот именно : нагрузок нет, но предельное значение вы выставляете избыточно большое. Иногда, по разным причинам число апачей может резко увеличиться. Предельное значение MaxClients это защита от инвалидации кеша файлов ОС. Вот 50-60 и поставьте.

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

Можно выбрать такой скрипт бекапа, который кеш не затрагивает вообще.

Хотя, если сделать простой и достаточно медленный бекап, то данные будут успевать "влетать назад" в кеш и все тоже пройдет плавно.

stepan007:
Сейчас рестарт mysql равносилен дауну сервера минут на 15, пока он закеширует файлы и все станет нормально.

можете попробовать при загрузке mysql исполнять операторы LOAD INDEX INTO CACHE, но на хостинге неизвестных сайтов это целая проблема, выбрать горячие индексы. Опять палка о двух концах: они загрузят в память вообще все части индексов, в том числе и не нужные. Обычно никто не рестартит mysql. Я бы в вашем случае потерпел.

stepan007:
Вообще можно попробовать key_buffer_size вообще убрать и по идеи система сама закеширует нужные ей индексы и таблицы, и в данном случае в ОЗУ не будут висеть индексы от неиспользуемых БД (которые туда попадают при оптимизации БД или при ежедневном дампе БД). Может стоит попробовать или это глупо?

Да, это глупо. Mysql точно лучше ОС знает какие файлы ему кешировать внутри себя. Индексы почти всегда приоритетнее данных.

Eaccelerator вообще поставил чисто попробовать.Что подскажите, как поступить?

я за то, чтобы попробовать кеш небольшого размера - 512мб. Но это только предположение.

T
На сайте с 09.12.2011
Offline
55
tls
#48

А можно увидеть полный конфиг от eaccelerator? Какой был и какой сейчас, если меняли. Кстати, вы помните про control.php?

M
На сайте с 16.09.2009
Offline
278
#49
stepan007:
myhand,
Поставил в httpd backlog 511.

Просто уберите директиву - останется умолчание.

stepan007:
[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):

# grep Swap /proc/meminfo 

SwapCached: 42400 kB
SwapTotal: 6176760 kB
SwapFree: 5969260 kB

# sh a1.sh |tail -1
Overall swap used: 257820 kB

Видим, что у меня SwapTotal-SwapFree=207500!=SwapCached. И разность между "Overall swap used" и SwapCached как раз около 207500 (не точно, т.к. между запусками команд был лаг).

SwapCached: Memory that once was swapped out, is swapped back in but
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)
S0
На сайте с 24.06.2007
Offline
84
#50

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,

Прикрепил оба конфига.

png Snap_2012.01.23_21h36m20s_001.png
txt eaccel_old.txt
txt eaccel_new.txt

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий