Вопрос или проблема
Мой раздел подкачки не используется, независимо от того, насколько заполнена моя оперативная память. Вот вывод команды swapon:
ИМЯ ТИП РАЗМЕР ИСПОЛЬЗОВАНО ПРИОРИТЕТ
/dev/dm-2 раздел 31,9Г 3,5М -1
Может ли быть проблемой приоритет -1?
cat /proc/sys/vm/swappiness
60
Мой swappiness равен 60.
cat /proc/swaps
Имя файла Тип Размер Использовано Приоритет
/dev/dm-2 раздел 33456124 3524 -1
У меня 32 ГБ оперативной памяти и 32 ГБ подкачки, но в настоящее время, когда моя память переполняется, система просто зависает навсегда, а не начинает использовать подкачку. Есть ли что-то, что я могу с этим сделать?
По сути, я пытаюсь запустить приложение, которое использует около 30 ГБ памяти, в то время как моя физическая память уже заполнена наполовину. Когда оно загружается и загружает данные в память, моя система просто зависает, как только физическая память заполняется. И, нет, не кажется, что это просто зависание во время использования подкачки, поскольку даже через некоторое время она не разблокируется.
Увеличение swappiness решило проблему. Подкачка была включена, но по какой-то причине использовалась только тогда, когда память была полностью заполнена, и не раньше.
В моем случае я установил еще одну тестовую инстанцию Ubuntu и отформатировал подкачку для нее, поэтому UUID устройства подкачки был старым в fstab, я просто изменил его на актуальный, и это заработало.
Не думаю. Сначала проверьте cat /etc/fstab
на наличие вашего раздела подкачки, затем попробуйте отформатировать файловую систему подкачки с помощью
sudo swapoff -a
sudo /sbin/mkswap /dev/sd##
sudo swapon -a
Вы можете просто запустить этот код, чтобы заполнить свою память и увидеть магию. Я имею в виду, что подкачка будет использоваться, когда достигнет 7 ГБ из 8 ГБ. Просто скомпилируйте его и выполните его .exe файл. Используйте .c в конце. Потом поблагодарите меня.
#include <stdlib.h>
#include <strings.h>
#include <unistd.h>
int
main()
{
char *p;
size_t s = 100 * 1024 * 1024;
for (;;)
{
p = malloc(s);
bzero(p, s);
sleep(1);
}
/* недостижимо */
}
Ответ или решение
Объяснение проблемы с использованием swap на вашем компьютере
Контекст проблемы:
Вы столкнулись с ситуацией, когда ваша система не использует swap, несмотря на то, что RAM заполнен. Это может причинить дискомфорт при запуске ресурсоемких приложений, особенно если вы пытаетесь запустить приложение, требующее около 30 ГБ памяти, в то время как у вас есть только 32 ГБ физической памяти.
Анализ текущей конфигурации swap
Вы привели результаты команд swapon
, cat /proc/sys/vm/swappiness
и cat /proc/swaps
, которые дают следующую информацию:
- Размер swap: 31,9 ГБ
- Используемая память в swap: 3,5 МБ
- Приоритет swap: -1
- Swappiness: 60
Из этого можно сделать несколько выводов.
-
Приоритет swap -1: Значение приоритета для swap-партии может быть одной из причин, по которой swap не используется. В Linux чем выше приоритет, тем раньше система будет использовать swap. Значение -1 означает, что ваша swap-партия была настроена с низким приоритетом, и система, возможно, предпочитает использовать физическую RAM даже при ее заполнении.
-
Настройка swappiness: Значение swappiness в 60 – это стандартный параметр, который говорит системе начинать использование swap, когда используется примерно 60% RAM. Однако для некоторых приложений вам может потребоваться более агрессивная стратегия обмена.
Рекомендации по решению проблемы
-
Увеличение swappiness. Если вы хотите, чтобы ваша система начинала использовать swap раньше, повышайте значение swappiness. Например, попробуйте установить его в 80:
echo 80 | sudo tee /proc/sys/vm/swappiness
Чтобы изменения были постоянными, добавьте или измените следующую строку в
/etc/sysctl.conf
:vm.swappiness=80
-
Проверка конфигурации
/etc/fstab
: Убедитесь, что у вас корректно указана swap-партия. Кроме того, если UUID вашей swap-партии изменился (например, после установки новой системы или переустановки), вам необходимо обновить fstab:- Откройте файл:
sudo nano /etc/fstab
- Найдите строку, связанную с вашей swap-партией, и убедитесь, что UUID актуален.
- Если необходимо, проверьте UUID с помощью команды:
blkid
- Откройте файл:
-
Переформатирование swap: Если swap не срабатывает после изменений, попробуйте переформатировать swap:
sudo swapoff -a sudo mkswap /dev/dm-2 sudo swapon -a
-
Проверка памяти и тест на загрузку: Чтобы убедиться, что swap начинает использоваться, вы можете временно запустить приложение, потребляющее много памяти, или воспользоваться кодом (например, на C), который будет заполнять RAM:
#include <stdlib.h> #include <strings.h> #include <unistd.h> int main() { char *p; size_t s = 100 * 1024 * 1024; for (;;) { p = malloc(s); bzero(p, s); sleep(1); } }
Заключение
Редкие случаи, когда система просто "замораживается" без использования swap, могут свидетельствовать о необходимости корректировки настроек системы. Ваша проблема, скорее всего, решается путем изменения параметров swappiness и настройки приоритета для swap-партии. Применяя упомянутые рекомендации, вы сможете оптимизировать использование swap и предотвратить заморозку системы при высокой нагрузке на память.