Один из самых простых способов увеличения скорости отклика сервера и защиты от отказа от ошибок памяти в приложениях, это добавить пространства подкачки. SWAP это область на жестком диске, который была назначена в качестве места, где операционная система может временно хранить данные, которые больше не может держать у себя в оперативной памяти.
В принципе, это дает вам возможность увеличить количество информации, что ваш сервер может хранить в своей рабочей "памяти", с некоторыми оговорками. Пространство на жестком диске будет использоваться, главным образом, когда пространство в оперативной памяти больше нет.
Информация, записанная на диск будет медленнее, чем информации, хранящейся в оперативной памяти, но операционная система предпочитает держать прикладные данные в памяти и использовать swap для старых данных.
В этом руководстве мы расскажем, как создать и включить файл подкачки на сервере Ubuntu 15.04.
Прежде чем мы начнем, мы взглянем на нашу операционную систему. Мы можем иметь несколько файлов подкачки или раздел подкачки. Для того чтоб узнать какое количество swap установлено и используется выполним команду:
sudo swapon -s
Если вернуться только заголовки таблицы, то у файл подкачки выключен.
Filename Type Size Used Priority
Другой более привычный способ проверить настройки подкачки, воспользоваться утилитой free которая покажет нам использование памяти. Мы видим нашу текущую память и использование подкачки в мегабайтах, набрав:
free -m
total used free shared buffers cached Mem: 3953 154 3799 0 8 83 -/+ buffers/cache: 62 3890 Swap: 0 0 0
Как Вы можете видеть swap у нас равен 0. Это соответствует результатам выполнения команды swapon.
Первое что приходит на ум, это выделить отдельный раздел для подкачки. Тем не менее, изменения схемы разделов не всегда возможно. Мы можем так же легко создать файл подкачки, который будет находиться на существующем разделе.
Прежде, чем мы это сделать, мы должны быть осведомлены о текущем использования диска. Мы можем получить эту информацию, набрав:
df -h
Filesystem Size Used Avail Use% Mounted on /dev/vda 59G 1.3G 55G 3% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 2.0G 12K 2.0G 1% /dev tmpfs 396M 312K 396M 1% /run none 5.0M 0 5.0M 0% /run/lock none 2.0G 0 2.0G 0% /run/shm none 100M 0 100M 0% /run/user
Как Вы можете видеть, из первой строки таблицы, у нас доступно 55Gb. Это огромное пространство для файлов подкачки.
Хотя есть много мнений о соответствующем размере подкачки, это действительно зависит от ваших личных предпочтений и требований приложения. Как правило, сумма равная или её двойной объем оперативной памяти в вашей системе является хорошей отправной точкой.
Так как моя система имеет 4Гб оперативной памяти и я не готов расстаться с 8Гб места на жестком диске, я буду делать swap размером в 4Гб.
Теперь мы знаем о "возможностях" нашего жесткого диска. Мы создадим файл подкачки в корневом каталоге. Файл будет занимать тот размер, который мы решили выделить для подкачки. Есть два способа это сделать:
Мы можем создать файл подкачки с помощью утилиты dd. Эта универсальная утилита записи из одного места в другое место на диске.
Мы можем использовать её для записи нулей в файл. Для этого в Linux системах есть специальное устройство /dev/zero
С помощью параметра bs мы указываем размер сектора, а с помощью параметра count количество блоков. Данный параметры выбраны произвольно, главное что их произведение будет равно нашим 4Гб.
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
4+0 records in 4+0 records out 4294967296 bytes (4.3 GB) copied, 18.6227 s, 231 MB/s
Перед запуском программы обязательно проверьте параметры которые Вы указали. Если в параметре of Вы укажете не правильный путь, то можете затереть Ваши данные.
Для проверки после создания файла выполните команду:
ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Apr 28 17:15 /swapfile
Если Вы воспользовались данным способом, то, наверняка, заметили, что создание файла заняло около 15 секунд.
Если Вы хотите узнать как сделать это быстрее, удалите файл, который создали, командой:
sudo rm /swapfile
Более быстрый способ создания файла, предоставляет нам утилита fallocate. Это программа создает файл мгновенно, фактически она ничего не записывает в этот файл. Мы можем создать файл объёмом 4Гб набрав:
sudo fallocate -l 4G /swapfile
Команда выполнить моментально и нам остаёться только проверить её выполнение:
ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Apr 28 17:19 /swapfile
Как вы можете видеть, наш файл создается с правильным отведенным количеством пространства.
Только что мы создали файл подкачки, одним из способ, но система о нём ничего не знает и не предполагает как ей его использовать. Мы должны сказать системе о том, что это файл подкачки.
Прежде чем мы сделаем, надо изменить разрешения на файл. Если оставить разрешения другим пользователям читать или писать в этот файл, это нарушит безопасность нашей системы. Для того чтоб убрать разрешения наберем:
sudo chmod 600 /swapfile
Проверим как изменились права на файл:
ls -lh /swapfile
-rw------- 1 root root 4.0G Apr 28 17:19 /swapfile
Если всё сделали правильно, то права на запись и чтение остались только у пользователя root.
Теперь давайте скажем системе, что это её файл подкачки:
sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB no label, UUID=e2f1e9cf-c0a9-4ed4-b8ab-714b8a7d6944
Файл готов для использования системой:
sudo swapon /swapfile
Осталось проверить используется ли подкачка системой:
sudo swapon -s
Filename Type Size Used Priority /swapfile file 4194300 0 -1
Как видите файл используется, но если Вы сейчас перезагрузите систему, файл больше не будет использоваться.
У нас есть файл подкачки, подключенный к нашей системе, но если мы перезагрузим сервер, он не будет автоматически подключен. Исправить это можно с помощью fstab. Отредактируем его конфигурацию:
sudo nano /etc/fstab
В нижней части файла, необходимо добавить строку, которая скажет операционной системе, чтобы автоматически использовать созданный файл:
/swapfile none swap sw 0 0
Сохраните и закройте файл. (CTRL+X, Y) На этом настройка файла подкачки закончена.