LinuxForum.Fans
Тема

Нужно увеличить swap на рабочей системе с centos 6

Автор: topcyprus 20 сообщений 7391 просмотров
#219924

День добрый!

Мне нужно увеличить swap на рабочей системе с centos 6.

Я нашел несколько мануалов и вижу себе 2 варианта действий:
- расширить текущий своп-раздел
- создать новый раздел и отметить его как своп.

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

#219929

topcyprus, swap можно создать не на отдельном разделе, а просто в файле.
И это однозначно безопаснее и сервер простаивать не будет wink
P.S. Насколько это будет быстрее/медленнее «обычного» swap'а сказать не могу :o

#219931
Lupo Alberto написал:
topcyprus, swap можно создать не на отдельном разделе, а просто в файле.
И это однозначно безопаснее и сервер простаивать не будет wink
P.S. Насколько это будет быстрее/медленнее «обычного» swap'а сказать не могу :o

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

А у меня софтверный рейд на сервере, я так подумал, что вариант с созданием файла хуже, ведь получается, что диск будет синхронизировать этот своп-файл в рейде? Или не стоит беспокоиться?

#219941

Lupo Alberto, тут я согласен. Это будет не только безопасно, но и не замедлит систему.

topcyprus написал:
не стоит беспокоиться?

не стоит. Беспокойтесь, когда у вас своп активно используется. Это говорит или о глючных программах, или о нехватки памяти. В нормальном режиме своп практически не используется (в смысле, к нему мало обращений. Да и заполнен он не сильно). Своп потребуется в аварийных режимах. Но там уже не до быстродействия, скорее наоборот - пусть сервак хоть как-то ковыляет.

#219943
drBatty написал:
Lupo Alberto, тут я согласен. Это будет не только безопасно, но и не замедлит систему.
[quote=topcyprus]не стоит беспокоиться?

не стоит. Беспокойтесь, когда у вас своп активно используется. Это говорит или о глючных программах, или о нехватки памяти. В нормальном режиме своп практически не используется (в смысле, к нему мало обращений. Да и заполнен он не сильно). Своп потребуется в аварийных режимах. Но там уже не до быстродействия, скорее наоборот - пусть сервак хоть как-то ковыляет.[/quote]

Спасибо. Ну это экстренная мера, а то сервак зависал несколько раз, кончался своп.
Сейчас увеличил в помощью файла, буду изучать, что там творится. :(

#220005

topcyprus, попробуйте обновить программы, которые потребляют много памяти. Конечно не факт что это поможет, но если у вас нет сейчас других вариантов, то остаётся только этот...

PS: а своп любой очень сильно тормозит систему, где бы он не лежал. Потому, не думаю, что вы заметите разницу между свопом в файле и в разделе. Кстати, есть ещё такой вариант - своп на отдельном диске. Может это вам тоже поможет. Во всяком случае тут вероятность потери данных минимальна. (ну если вы только диски не перепутаете :D )

#220008
drBatty написал:
topcyprus, попробуйте обновить программы, которые потребляют много памяти. Конечно не факт что это поможет, но если у вас нет сейчас других вариантов, то остаётся только этот...

PS: а своп любой очень сильно тормозит систему, где бы он не лежал. Потому, не думаю, что вы заметите разницу между свопом в файле и в разделе. Кстати, есть ещё такой вариант - своп на отдельном диске. Может это вам тоже поможет. Во всяком случае тут вероятность потери данных минимальна. (ну если вы только диски не перепутаете :D )

ну у меня сервер на henzner поэтому вариант с диском неудобен, проще переехать на сервер помощнее. Наверное, так и сделаю.
сейчас вот полдня слежу за командой top - своп пока не задействован.

а что Вы имеете в виду - обновить программы? это yum update?

#220027
topcyprus написал:
а что Вы имеете в виду - обновить программы? это yum update?

да, наверное. Возможно ошибки в какой-то программе, она жрёт память, и своп забивается. Возможно, эту ошибку уже исправили.

topcyprus написал:
проще переехать на сервер помощнее. Наверное, так и сделаю.

если памяти просто не хватает - да, конечно.

#220261

так ну в общем последил я день за системой, ram занят примерно процентов на 80 судя по htop и всегда присутствует своп. он долго занимал 22 мегабайта потом потихоньку начал подрастать. дошел до 100 мегабайт за день. не снижался ощутимо, иногда чуть-чуть снижался но потом опять подрастал.

я подумал что это какие-то данные от mysql сервера кешируются, временные таблицы и тп. очень много процессов от майскл висело. я сделал service mysqld restart. своп сразу прыгнул в изначальные 22 мегабайта.

при этом днем я проверял профайлером mysql - никаких серьезных тяжелых запросов в системе нет. есть парочка slow queries но очень редко выполняются.

что посоветуете делать? Чем диагностировать утечку?

yum update сделал обновился только фтп, ничего серьезного.

пока что придумал поставить по крону перегрузку mysqld каждую ночь. и запланировать переезд на сервер с бОльшей озу (сейчас всего 1 гиг памяти).

#220262

topcyprus, вероятно, не совсем то, но... ещё можно увеличить процент доступной уменьшить процент оставшейся оперативной памяти прежде, чем начнутся обращения к swap'у.

#220272
Lupo Alberto написал:
topcyprus, вероятно, не совсем то, но... ещё можно увеличить процент доступной уменьшить процент оставшейся оперативной памяти прежде, чем начнутся обращения к swap'у.

Спасибо, хороший совет! Увеличил процент, теперь юзается 90% озу.

Скажите, а можно ли как-то поставить триггер на размер свопа? Чтобы в случае, если размер свопа > x, запускалась команда перезагрузки mysqld и httpd?

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

#220279
topcyprus написал:
Скажите, а можно ли как-то поставить триггер на размер свопа? Чтобы в случае, если размер свопа > x, запускалась команда перезагрузки mysqld и httpd?

легко. Свободное пространство узнайте так:
[console]$ sed -rn 's/^SwapFree:\s+([0-9]+)\s+\S+$/\1/p' /proc/meminfo [/console]
(хотя учтите, что в некоторых линуксах эта команда может работать не правильно)
размер в Кб. Я думаю вам не составит труда сравнивать это число с порогом каждые 5 минут.
Ещё почитайте эту старую, но годную статью: http://www.opennet.ru/base/sys/swap_create.txt.html
(некоторые вещи там неправильные, т.ч. относитесь критически - ссылку даю для ознакомления)

#220400
drBatty написал:
[quote=topcyprus]Скажите, а можно ли как-то поставить триггер на размер свопа? Чтобы в случае, если размер свопа > x, запускалась команда перезагрузки mysqld и httpd?

легко. Свободное пространство узнайте так:
[console]$ sed -rn 's/^SwapFree:\s+([0-9]+)\s+\S+$/\1/p' /proc/meminfo [/console]
(хотя учтите, что в некоторых линуксах эта команда может работать не правильно)
размер в Кб. Я думаю вам не составит труда сравнивать это число с порогом каждые 5 минут.
Ещё почитайте эту старую, но годную статью: http://www.opennet.ru/base/sys/swap_create.txt.html
(некоторые вещи там неправильные, т.ч. относитесь критически - ссылку даю для ознакомления)[/quote]

Спасибо! А можно еще раз нагло воспользоваться вашей образованностью и спросить ламовопрос, а как sed использовать в sh скрипте?

echo `sed "-rn \'s/^SwapFree:\s+([0-9]+)\s+\S+\$/\1/p\' /proc/meminfo"` - пишет "sed: invalid option -- ' '"

#220407

topcyprus,

text

awk '/SwapFree/ {print $2}' /proc/meminfo
#220408
text
lupo@gentoo-laptop ~ %  awk '/SwapFree/ {print $2}' /proc/meminfo
2079128
lupo@gentoo-laptop ~ % [ $(awk '/SwapFree/ {print $2}' /proc/meminfo) -le 3000000 ] && echo "Память есть" || echo "Шеф всё пропало"
Память есть
lupo@gentoo-laptop ~ % [ $(awk '/SwapFree/ {print $2}' /proc/meminfo) -le 1000000 ] && echo "Память есть" || echo "Шеф всё пропало" 
Шеф всё пропало
lupo@gentoo-laptop ~ %
#220410
topcyprus написал:
а как sed использовать в sh скрипте?

[console]$ SWAP=`sed -rn 's/^SwapFree:\s+([0-9]+)\s+\S+$/\1/p' /proc/meminfo`[/console]
потом куда надо
[console]$ echo $SWAP
622920
[/console]

#220412

[console]$ if (( $SWAP < 600000 )); then echo "мало"; fi
$ if (( $SWAP > 600000 )); then echo "много"; fi
много
[/console]

#220422

Ну спасибо большое! Подсказали всё что нужно :)

Я со своим никудышным опытом в написании скриптов соорудил такое

text

LIMIT_SWAP=1000000
[ $(awk '/SwapFree/ {print $2}' /proc/meminfo) -ge $LIMIT_SWAP ] && echo "OK" || 
    { 
    echo "Date: "$(date)", Restart, free swap = "`awk '/SwapFree/ {print $2}' /proc/meminfo`" Limit = "$LIMIT_SWAP
    echo "Date: "$(date)", Restart, free swap = "`awk '/SwapFree/ {print $2}' /proc/meminfo`" Limit = "$LIMIT_SWAP >> "restart_of_low_swap.log"
    service httpd restart
    service mysqld restart
    exit 1
    }
#220424
topcyprus написал:
text

echo "Date: "$(date)", Restart, free swap = "`awk '/SwapFree/ {print $2}' /proc/meminfo`" Limit = "$LIMIT_SWAP 
echo "Date: "$(date)", Restart, free swap = "`awk '/SwapFree/ {print $2}' /proc/meminfo`" Limit = "$LIMIT_SWAP >> "restart_of_low_swap.log"

Не до конца понял, зачем тут две команды echo (первая из них).

#220425

да, первую можно убрать. это для вывода на экран во время теста.

Войдите или зарегистрируйтесь, чтобы ответить.