все что связано с моей работой
Главная » Unix » Проблемы и работа со Swap разделом

Проблемы и работа со Swap разделом

Сегодня утром обнаружил в отчетах работы сервера такое:

+pid 1809 (mysqld), uid 88, was killed: out of swap space 
+swap_pager_getswapspace(16): failed 
+swap_pager_getswapspace(16): failed 
... 
+swap_pager_getswapspace(11): failed 
+swap_pager_getswapspace(2): failed 
+pid 7569 (httpd), uid 80, was killed: out of swap space 
+pid 7568 (httpd), uid 80, was killed: out of swap space 
+swap_pager_getswapspace(16): failed 
+swap_pager_getswapspace(16): failed 
+swap_pager_getswapspace(16): failed 
... 

Как раз вчера вечером ковырялся с сайтом, смотрел какие программы в Ubuntu можно использовать для работы с WordPress-ом и тестировал новую тему, тормозило жутко, часто сервер “не отвечал” вообще. Не скажу что я прям очень сильно нагружал сайт, ну с 3х браузеров и еще пару программ, ну одновременно максимум 3 запроса было и это я один, а если как планировалось 11 поселений… Ну с apache и mysql-ом будем особо разбираться… А сейчас встал вопрос: увеличить своп чтоб избежать подобных неприятностей в будущем, т.к. при установке под своп было выделено 512М. Установлено  в системе 256М, а сегодняшний опыт показал что для сервера правило своп=mem*2 не работает. И никакой опыт предыдущих лет не показатель, там вообще пень 233 был с 64М на борту и работало все кстати.

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

Самое простое решение это добавить в систему винт и в начале сделать раздел и указать ему тип “своп”. Делать можно чем угодно от “гуишного” sysinstall и меню Configuration до “пальчиков” fdisk + bsdlabel.

Но у нас есть ограничение: на винте нет “не используемого” места – значит будем создавать своп в файле.

Внимание! Для FreeBSD обязательно в ядре должна быть включена поддержка md — “Memory disks”.

Первым делом надо создать собственно сам файл на 1 гиг:

test#dd if=/dev/zero of=/home/swap bs=1024 count=1048576
1048576+0 records in
1048576+0 records out
1073741824 bytes transferred in 22.419346 secs (47893539 bytes/sec)

Файл лежит в /home потому что у меня там много свободного места, count задается в килобайтах (!!!) 1048576 – 1Гиг. Выставляем правильные права доступа:

# chmod 0600 /home/swap

А вот дальше … реализация в Linux-ах и FreeBSD отличается. Для FreeBSD надо создать Мем-диск и спроецировать его на наш файл:

# mdconfig -a -t vnode -f /home/swap -u 0
  • -a – подключить диск, создается устройство /dev/mdХ и подключается к системе
  • -t vnode – указывает тип диска, в нашем случае это vnode, т.е. файл указанный в опции –f
  • -f – имя файла, который подключаем
  • -u – опция не обязательная, она указывает “номер” устройства, т.е. в записи /dev/mdХ это Х. Не уверен что это как-то влияет на производительность свопа, скорее это надо если ваша программа/скрипт используют конкретное устройство

Для Linux надо “создать своп” чтоб ядро записало туда свою служебную информацию:

$mkswap /home/swap

Дальше для обеих систем опять все одинаково: надо включить созданный нами своп, для FreeBSD мы включаем диск:

swapon /dev/md0

а для Linux файл:

swapon /home/swap

Если теперь сделать swapinfo, то видим старый раздел и наш новый подключенный своп:

# swapinfo -h
Device          1K-blocks     Used    Avail Capacity
/dev/ad0s1b        524288     106M     406M    21%
/dev/md0          1048576     1.8M     1.0G     0%
Total             1572864     108M     1.4G     7%

Чтобы каждый раз после перезагрузки не создавать-включать нужно в /etc/rc.conf добавить строку:

swapfile="/home/swap"

и после перезагрузки все подключится и создастся автоматически.

Комментариев нет

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.