1

День добрый!

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

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

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

2

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

Был, был и весь вышел...

3

Lupo Alberto пишет:

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

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

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

4

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

topcyprus пишет:

не стоит беспокоиться?

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

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

5

drBatty пишет:

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

topcyprus пишет:

не стоит беспокоиться?

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

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

6 (09.01.2012 15:23:00 отредактировано drBatty)

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

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

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

7 (09.01.2012 15:26:36 отредактировано topcyprus)

drBatty пишет:

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

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

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

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

8

topcyprus пишет:

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

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

topcyprus пишет:

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

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

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

9 (10.01.2012 01:34:14 отредактировано topcyprus)

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

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

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

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

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

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

10

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

Был, был и весь вышел...

11 (10.01.2012 04:35:12 отредактировано topcyprus)

Lupo Alberto пишет:

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

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

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

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

12

topcyprus пишет:

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

легко. Свободное пространство узнайте так:

 Консоль:
$ sed -rn 's/^SwapFree:\s+([0-9]+)\s+\S+$/\1/p' /proc/meminfo

(хотя учтите, что в некоторых линуксах эта команда может работать не правильно)
размер в Кб. Я думаю вам не составит труда сравнивать это число с порогом каждые 5 минут.
Ещё почитайте эту старую, но годную статью: http://www.opennet.ru/base/sys/swap_create.txt.html
(некоторые вещи там неправильные, т.ч. относитесь критически - ссылку даю для ознакомления)

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

13

drBatty пишет:
topcyprus пишет:

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

легко. Свободное пространство узнайте так:

 Консоль:
$ sed -rn 's/^SwapFree:\s+([0-9]+)\s+\S+$/\1/p' /proc/meminfo

(хотя учтите, что в некоторых линуксах эта команда может работать не правильно)
размер в Кб. Я думаю вам не составит труда сравнивать это число с порогом каждые 5 минут.
Ещё почитайте эту старую, но годную статью: http://www.opennet.ru/base/sys/swap_create.txt.html
(некоторые вещи там неправильные, т.ч. относитесь критически - ссылку даю для ознакомления)

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

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

14

topcyprus,

awk '/SwapFree/ {print $2}' /proc/meminfo
Был, был и весь вышел...

15

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 ~ %
Был, был и весь вышел...

16

topcyprus пишет:

а как sed использовать в sh скрипте?

 Консоль:
$ SWAP=`sed -rn 's/^SwapFree:\s+([0-9]+)\s+\S+$/\1/p' /proc/meminfo`

потом куда надо
 Консоль:
$ echo $SWAP
622920

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

17

 Консоль:
$ if (( $SWAP < 600000 )); then echo "мало"; fi
$ if (( $SWAP > 600000 )); then echo "много"; fi
много

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

18

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

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

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
    }

19

topcyprus пишет:


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 (первая из них).

Был, был и весь вышел...

20

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