- Как освободить память Linux
- Как освободить кэш память в Linux
- Виды кэша в Linux
- Нужно ли очищать кэш вообще?
- Автоматическая очистка кэша
- Настройка размера кэша памяти
- Как очистить память подкачки
- Как освободить память занимаемую процессами
- Выводы
- Справочная информация
- четверг, 30 марта 2017 г.
- Очистка Linux Mint, Ubuntu двумя командами
Как освободить память Linux
Как и любая другая операционная система, Linux очень эффективно работает с оперативной памятью. Доступная память свободно распространяется между процессами, неиспользуемые страницы сбрасываются в раздел подкачки на диске, а в случае переполнения памяти, срабатывает специальный механизм, встроенный в ядро, который анализирует все процессы и уничтожает виновника.
Когда любой процесс пишет данные на диск, они сохраняются ядром в отдельном кэше. Очень часто этот кэш занимает достаточно много места. В этой статье мы рассмотрим как освободить память в Linux, а точнее, как очистить созданный программами кэш, а также как вычислить и завершить процессы, которые потребляют больше всего памяти.
Как освободить кэш память в Linux
В каждом дистрибутиве Linux можно использовать три команды чтобы очистить кэш памяти linux. Причем вам не придется завершать никаких процессов. Сначала войдите в консоль от имени суперпользователя:
Затем выполните одну из команд. Очистка кэша PageCache:
sync; echo 1 > /proc/sys/vm/drop_caches
Очистка inode и dentrie:
sync; echo 2 > /proc/sys/vm/drop_caches
Очистка inode и dentrie и PageCache:
sync; echo 3 > /proc/sys/vm/drop_caches
А теперь давайте рассмотрим что происходит при выполнении этих команд.
Утилита sync заставляет систему записать все кэшированные, но еще не записанные данные на диск. Это нужно чтобы освободить как можно больше памяти. По умолчанию данные после записи на диск не удаляются из кэша, это нужно для того, чтобы программа могла быстрее их считать при необходимости.
Если не выполнить команду sync мы тоже освободим немного места, но после ее выполнения результат будет лучше.
Символ разделения ; дает знать оболочке, что перед тем как выполнить другую команду, нужно дождаться завершения работы первой. Последняя команда echo 1 > /proc/sys/vm/drop_caches записывает значение 1 в файл /proc/sys/vm/drop_caches. Это дает сигнал ядру, что нужно очистить выбранный нами вид кэша.
Виды кэша в Linux
А теперь давайте рассмотрим виды кэша, которые позволяют очищать эти команды, а также как все это работает.
PageCache или страничный кэш — это место, куда ядро складывает все данные, которые вы записывали или читали из диска. Это очень сильно ускоряет работу системы, так как если программе во второй раз понадобятся те же данные, они просто будут взяты из оперативной памяти. Но по этой причине этот кэш занимает больше всего места.
Посмотреть размер страничного кэша можно с помощью утилиты free. Здесь он показан в последней колонке — cached:
Такой кэш чистить эффективнее и безопаснее всего.
Кэш inode и dentrie тоже относится к файловой системе. Только в него записываются не сами данные, а структура файловой системы, расположение файлов и папок. При запросе расположения файла или содержимого папки ядро формирует специальные структуры, в которых есть вся эта информация. При следующем запросе структуры будут уже сохранены в памяти. Для каждой файловой системы существует свой кэш inode и общий кэш dentrie.
Этот кэш занимает очень мало памяти. Данные представлены в байтах, и как видите, это очень мало. Посмотреть его можно командой:
cat /proc/slabinfo | egrep dentry\|inode
Очищать его чтобы освободить память linux не рекомендуется, так как памяти потребляется немного, а на новое сканирование файловой системы идет относительно много времени.
Нужно ли очищать кэш вообще?
Во-первых, если занято очень много памяти, вы можете очистить страничный кэш, особенно если это он занимает много памяти. Во-вторых, очистить кэш памяти linux может понадобиться, если вы изменяли какие-либо настройки файловой системы или ядра, а теперь хотите проверить как это отразилось на скорости операций чтения/записи. В таком случае можно очистить все кэши и сделать это без перезагрузки, что очень удобно.
Операционная система Linux разработана таким образом, что перед тем как обратиться к диску, будет просмотрен кэш диска, и если там есть нужные данные, к диску обращений не будет. Если очистить кэш Linux то операционная система будет работать немного медленнее, поскольку ей придется искать данные на диске.
Автоматическая очистка кэша
Давайте рассмотрим как автоматически очистить кэш памяти ежедневно в два часа ночи с помощью планировщика заданий cron.
Сначала создадим bash скрипт со следующим содержимым:
sudo vi /usr/local/bin/clearcache.sh
!/bin/bash
sync ; echo 1 > /proc/sys/vm/drop_caches
Очищать будем только страничный кэш, так как он занимает больше всего. Другие виды трогать не будем, чтобы зря не понижать производительность системы.
Дальше сделайте скрипт исполняемым:
sudo chmod 755 /usr/local/bin/clearcache.sh
Осталось добавить задание в планировщик cron. Для этого выполните команду:
И в открывшемся редакторе добавьте строчку:
0 2 * * * /usr/local/bin/clearcache.sh
Теперь этот скрипт будет выполняться каждую ночь и выполнять очистку памяти, чтобы сервер мог работать нормально.
Настройка размера кэша памяти
Куда удобнее не очищать кэш каждый раз, а настроить ограничение, при превышении которого система сама будет удалять лишние страницы. Вы не можете явно ограничить сколько мегабайт может система использовать под кэш. Будет использоваться вся доступная память по мере необходимости, но можно настроить скорость удаления просроченных страниц из кэша.
За это отвечает файл /proc/sys/vm/vfs_cache_pressure. Он содержит относительный показатель, насколько агрессивно нужно удалять страницы из кэша. По умолчанию установлен параметр 100. Если его уменьшить ядро будет реже удалять страницы и это приведет к очень быстрому увеличению кэша. При нуле страницы вообще не будут удаляться. Если значение больше 100, размер кэша будет увеличиваться медленнее и неиспользуемые страницы будут сразу удаляться.
Например, сделаем минимальный размер кэша:
echo 1000 > /proc/sys/vm/vfs_cache_pressure
Не забудьте, что это очень сильно снизит производительность вашей системы, потому что вместо кэша данные будут читаться из диска.
Как очистить память подкачки
Пространство подкачки очистить очень просто. Для этого выполните:
swapoff -a && swapon -a
Имейте в виду, что при очистке swap, все данные будут перенесены обратно в оперативную память.
Как освободить память занимаемую процессами
Если в вашей системе нет памяти и кэш здесь ни при чём, следует завершить несколько процессов, потребляющих больше всего памяти. Для этого сначала надо вычислить такие процессы. Чтобы это сделать можно воспользоваться утилитой ps:
ps -e -o pid,user,%mem,command —sort %mem
Как видите, больше всего здесь памяти занимает chromium. Теперь вам надо его завершить. Идентификатор процесса, по которому его можно завершить отображается в первой колонке. Поэтому:
Более подробно о том как завершить процесс читайте в этой статье. Таким образом, вы можете освободить память от процессов, которые занимают больше всего памяти, а потом уже настроить zram или swap для того, чтобы память не переполнялась.
Выводы
Вот и все. Вы уже знаете очистить кэш linux и освободить память. Не забудьте, что все команды, приведенные в этой статье нужно выполнять от имени суперпользователя, иначе ничего работать не будет. Если остались вопросы, спрашивайте в комментариях!
Источник
Справочная информация
про свой опыт решения некоторых проблем и использования ряда возможностей ОС и приложений
четверг, 30 марта 2017 г.
Очистка Linux Mint, Ubuntu двумя командами
Любая операционная система со временем «обрастает» ненужными файлами и Linux не является исключением. Несмотря на то, что для Linux тоже разработан ряд программ по очистке системы от ненужных файлов, данную операцию можно осуществить двумя командами в терминале. Как говорилось про утилиту apt, она обладает «коровьей силой».
Для удаления ненужных файлов, оставшихся после обновлений системы, установленных в ней программ, а также после удаления приложений используются команды autoremove (автоудаление) и autoclean (автоочистка). Данные команды запускаются в терминале с правами суперпользователя: sudo apt autoremove и sudo apt autoclean.
Ниже приводится пример листинга произведенных операций в моей системе. Сначала произведу операцию автоудаления, а потом автоочистки. Под
$ следует понимать строку в терминале, когда Вы его запустили. Перед символом
ещё будет отображено Ваше имя пользователя системы.
Если внимательно присмотреться к тому, от скольких ненужных и занимающих дисковое пространство пакетов удалось избавиться, то на ум приходит здравая мысль о том, что данные операции следует производить на регулярной основе.
$ sudo apt autoremove
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Пакеты, которые будут УДАЛЕНЫ:
folder-color-common folder-color-switcher gstreamer1.0-clutter-3.0
java-wrappers libcheese-gtk25 libcheese8 libcolord-gtk1 libcommons-cli-java
libgoa-backend-1.0-1 liblog4j1.2-java libmate-desktop-2-17
libswt-cairo-gtk-3-jni libswt-gnome-gtk-3-jni libswt-gtk-3-java
libswt-gtk-3-jni libswt-webkit-gtk-3-jni mate-desktop mate-desktop-common
python-requests
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 19 пакетов, и 1 пакетов не обновлено.
После данной операции, объём занятого дискового пространства уменьшится на 15,6 MB.
Хотите продолжить? [Д/н] y
(Чтение базы данных … на данный момент установлено 268064 файла и каталога.)
Удаляется folder-color-common (0.0.79-0ubuntu1) …
Удаляется folder-color-switcher (1.1.3) …
Удаляется libcheese-gtk25:amd64 (3.18.1-2ubuntu3) …
Удаляется gstreamer1.0-clutter-3.0 (3.0.18-1) …
Удаляется java-wrappers (0.1.28) …
Удаляется libcheese8:amd64 (3.18.1-2ubuntu3) …
Удаляется libcolord-gtk1:amd64 (0.1.26-1) …
Удаляется libcommons-cli-java (1.3.1-3ubuntu1) …
Удаляется libgoa-backend-1.0-1:amd64 (3.18.3-1ubuntu2) …
Удаляется liblog4j1.2-java (1.2.17-7ubuntu1) …
Удаляется mate-desktop (1.16.1-1+serena) …
Удаляется libmate-desktop-2-17:amd64 (1.16.1-1+serena) …
Удаляется libswt-cairo-gtk-3-jni (3.8.2-3) …
Удаляется libswt-gnome-gtk-3-jni (3.8.2-3) …
Удаляется libswt-gtk-3-java (3.8.2-3) …
Удаляется libswt-webkit-gtk-3-jni (3.8.2-3) …
Удаляется libswt-gtk-3-jni (3.8.2-3) …
Удаляется mate-desktop-common (1.16.1-1+serena) …
Удаляется python-requests (2.9.1-3) …
Обрабатываются триггеры для hicolor-icon-theme (0.15-0ubuntu1) …
Обрабатываются триггеры для libc-bin (2.23-0ubuntu7) …
Обрабатываются триггеры для man-db (2.7.5-1) …
Обрабатываются триггеры для desktop-file-utils (0.22-1ubuntu5.1) …
Обрабатываются триггеры для gnome-menus (3.13.3-6ubuntu3.1) …
Обрабатываются триггеры для bamfdaemon (0.5.3
bzr0+16.04.20160824-0ubuntu1) …
Rebuilding /usr/share/applications/bamf-2.index.
Обрабатываются триггеры для mime-support (3.59ubuntu1) …
Обрабатываются триггеры для libglib2.0-0:i386 (2.48.2-0ubuntu1) …
Обрабатываются триггеры для libglib2.0-0:amd64 (2.48.2-0ubuntu1) …
$ sudo apt autoclean
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Del libreoffice-calc 1:5.3.0
xenial1.1 [6 826 kB]
Del libreoffice-math 1:5.3.0
xenial1.1 [388 kB]
Del libreoffice-core 1:5.3.0
xenial1.1 [34,0 MB]
Del samba-libs 2:4.3.11+dfsg-0ubuntu0.16.04.3 [5 168 kB]
Del firefox 52.0+linuxmint1+serena [46,9 MB]
Del libmagickcore-6.q16-2 8:6.8.9.9-7ubuntu5.5 [1 578 kB]
Del vivaldi-snapshot 1.7.735.36-1 [49,0 MB]
Del libreoffice-avmedia-backend-gstreamer 1:5.3.0
xenial1.1 [24,0 kB]
Del libvlccore8 2.2.2+git20170322+r59000+56
ubuntu16.04.1 [494 kB]
Del chromium-browser-l10n 58.0.3026.3-0ubuntu1
16.04.1 [3 212 kB]
Del python3-uno 1:5.3.0
xenial1.1 [195 kB]
Del samba-common 2:4.3.11+dfsg-0ubuntu0.16.04.3 [84,1 kB]
Del ure 5.3.0
xenial1.1 [1 747 kB]
Del libvlccore8 2.2.2+git20170314+r58997+56
ubuntu16.04.1 [495 kB]
Del vlc-data 2.2.2+git20170314+r58997+56
ubuntu16.04.1 [6 031 kB]
Del firefox-locale-ru 52.0+linuxmint1+serena [477 kB]
Del libreoffice-common 1:5.3.0
xenial1.1 [22,6 MB]
Del imagemagick 8:6.8.9.9-7ubuntu5.5 [44,9 kB]
Del imagemagick-6.q16 8:6.8.9.9-7ubuntu5.5 [388 kB]
Del libreoffice-base-core 1:5.3.0
xenial1.1 [714 kB]
Del libc-bin 2.23-0ubuntu6 [632 kB]
Del mintupdate 5.2.1 [215 kB]
Del libc-dev-bin 2.23-0ubuntu6 [68,5 kB]
Del thunderbird-locale-en-us 1:45.7.0+build1-0ubuntu0.16.04.1 [9 494 B]
Del opera-beta 44.0.2510.433 [51,6 MB]
Del vivaldi-snapshot 1.7.735.29-1 [49,0 MB]
Del vlc 2.2.2+git20170314+r58994+56
ubuntu16.04.1 [1 601 kB]
Del libreoffice-java-common 1:5.3.0
xenial1.1 [1 942 kB]
Del libc6-dev 2.23-0ubuntu6 [2 081 kB]
Del libreoffice-base-drivers 1:5.3.0
xenial1.1 [510 kB]
Del vlc-nox 2.2.2+git20170322+r59000+56
ubuntu16.04.1 [2 420 kB]
Del adobe-flashplugin 1:20170214.1-0ubuntu0.16.04.1 [10,3 MB]
Del libreoffice-draw 1:5.3.0
xenial1.1 [3 320 kB]
Del opera-stable 43.0.2442.1144 [50,5 MB]
Del libreoffice-base 1:5.3.0
xenial1.1 [1 717 kB]
Del thunderbird 1:45.7.0+build1-0ubuntu0.16.04.1 [35,5 MB]
Del vlc-data 2.2.2+git20170314+r58994+56
ubuntu16.04.1 [6 031 kB]
Del libvlc5 2.2.2+git20170322+r59000+56
ubuntu16.04.1 [152 kB]
Del vlc-data 2.2.2+git20170311+r58993+56
ubuntu16.04.1 [6 030 kB]
Del libc6-dbg 2.23-0ubuntu6 [3 676 kB]
Del vlc-plugin-notify 2.2.2+git20170322+r59000+56
ubuntu16.04.1 [6 124 B]
Del vlc 2.2.2+git20170322+r59000+56
ubuntu16.04.1 [1 604 kB]
Del thunderbird-gnome-support 1:45.7.0+build1-0ubuntu0.16.04.1 [8 540 B]
Del libreoffice-help-ru 1:5.3.0
xenial1 [3 223 kB]
Del vivaldi-snapshot 1.7.735.27-1 [49,0 MB]
Del imagemagick-common 8:6.8.9.9-7ubuntu5.5 [41,3 kB]
Del libc-dev-bin 2.23-0ubuntu5 [68,7 kB]
Del yandex-browser-beta 17.3.1.814-1 [51,5 MB]
Del vlc-plugin-notify 2.2.2+git20170314+r58994+56
ubuntu16.04.1 [6 130 B]
Del uno-libs3 5.3.0
xenial1.1 [884 kB]
Del libwbclient0 2:4.3.11+dfsg-0ubuntu0.16.04.3 [30,4 kB]
Del opera-developer 45.0.2531.0 [54,7 MB]
Del libc6 2.23-0ubuntu6 [2 591 kB]
Del libmagickwand-6.q16-2 8:6.8.9.9-7ubuntu5.5 [288 kB]
Del vlc-nox 2.2.2+git20170314+r58994+56
ubuntu16.04.1 [2 419 kB]
Del libreoffice-pdfimport 1:5.3.0
xenial1.1 [183 kB]
Del smbclient 2:4.3.11+dfsg-0ubuntu0.16.04.3 [311 kB]
Del chromium-codecs-ffmpeg-extra 58.0.3026.3-0ubuntu1
16.04.1 [1 030 kB]
Del libreoffice-gtk2 1:5.3.0
xenial1.1 [205 kB]
Del libreoffice-writer 1:5.3.0
xenial1.1 [8 217 kB]
Del libreoffice-ogltrans 1:5.3.0
xenial1.1 [71,6 kB]
Del google-chrome-stable 57.0.2987.98-1 [47,3 MB]
Del libreoffice-l10n-ru 1:5.3.0
xenial1 [508 kB]
Del chromium-browser-l10n 58.0.3029.14-0ubuntu1
16.04.1 [3 306 kB]
Del thunderbird-locale-en 1:45.7.0+build1-0ubuntu0.16.04.1 [384 kB]
Del libreoffice-gtk 1:5.3.0
xenial1.1 [2 700 B]
Del python-samba 2:4.3.11+dfsg-0ubuntu0.16.04.3 [1 059 kB]
Del libvlc5 2.2.2+git20170314+r58994+56
ubuntu16.04.1 [153 kB]
Del vlc-plugin-notify 2.2.2+git20170314+r58997+56
ubuntu16.04.1 [6 144 B]
Del virtualbox-5.1 5.1.16-113841
xenial [65,5 MB]
Del locales 2.23-0ubuntu6 [3 200 kB]
Del vlc 2.2.2+git20170311+r58993+56
ubuntu16.04.1 [1 602 kB]
Del libc6 2.23-0ubuntu6 [2 268 kB]
Del firefox-locale-en 52.0+linuxmint1+serena [756 kB]
Del chromium-codecs-ffmpeg-extra 58.0.3029.14-0ubuntu1
16.04.1 [1 029 kB]
Del libreoffice-sdbc-hsqldb 1:5.3.0
xenial1.1 [109 kB]
Del libvlccore8 2.2.2+git20170314+r58994+56
ubuntu16.04.1 [495 kB]
Del libvlccore8 2.2.2+git20170311+r58993+56
ubuntu16.04.1 [495 kB]
Del vlc-nox 2.2.2+git20170311+r58993+56
ubuntu16.04.1 [2 419 kB]
Del chromium-browser 58.0.3026.3-0ubuntu1
16.04.1 [63,7 MB]
Del vlc-plugin-notify 2.2.2+git20170311+r58993+56
ubuntu16.04.1 [6 136 B]
Del vlc-nox 2.2.2+git20170314+r58997+56
ubuntu16.04.1 [2 419 kB]
Del opera-developer 45.0.2522.0 [54,3 MB]
Del thunderbird-locale-ru 1:45.7.0+build1-0ubuntu0.16.04.1 [415 kB]
Del libvlc5 2.2.2+git20170311+r58993+56
ubuntu16.04.1 [152 kB]
Del libvlc5 2.2.2+git20170314+r58997+56
ubuntu16.04.1 [153 kB]
Del fonts-opensymbol 2:102.10+LibO5.3.0
xenial1.1 [277 kB]
Del chromium-browser 58.0.3029.14-0ubuntu1
16.04.1 [63,5 MB]
Del samba-common-bin 2:4.3.11+dfsg-0ubuntu0.16.04.3 [506 kB]
Del libreoffice-help-en-us 1:5.3.0
xenial1 [2 531 kB]
Del vlc 2.2.2+git20170314+r58997+56
ubuntu16.04.1 [1 602 kB]
Del multiarch-support 2.23-0ubuntu6 [6 826 B]
Del vivaldi-snapshot 1.7.735.39-1 [49,0 MB]
Del libreoffice-gnome 1:5.3.0
xenial1.1 [59,3 kB]
Del libsmbclient 2:4.3.11+dfsg-0ubuntu0.16.04.3 [53,1 kB]
Del vlc-data 2.2.2+git20170322+r59000+56
ubuntu16.04.1 [6 043 kB]
Del libc6-dev 2.23-0ubuntu5 [2 078 kB]
Del libreoffice-impress 1:5.3.0
xenial1.1 [932 kB]
Del vivaldi-snapshot 1.7.735.46-1 [49,0 MB]
Кроме того, иногда имеет смысл производить ревизию скрытых файлов и папок Вашего домашнего каталога, в которых расположены настройки программ. По умолчанию, их отображение в файловом менеджере выключено. Для включения их отображения нажмите комбинацию клавиш Ctrl и h или через меню «Вид» включите «Скрытые файлы». Вы сразу увидите насколько больше в Вашем домашнем каталоге станет файлов и папок. Скрытые файлы и папки начинаются с точки.
Посмотрите на содержимое папок .cache .config .local/share и если обнаружите там данные приложений, которые Вы удалили и они больше в Вашей системе не используются, то можете смело удалить такие данные. Кроме того, некоторые приложения создают свои записи не в .config или .local/share , а в самом домашнем каталоге.
Так, например, google-drive-ocamfuse создало папку .gdfuse, в котором хранились данные о конфигурации этого приложения.
Источник