How is htop «Swp» calculated?
VIRT does not have anything to do with used memory (virtual or otherwise), but with used address-space, which is not as related as you might think.
Modern operating systems (including OSX) have a feature called demand paging which works by telling the operating system to map a certain region of virtual address space to a file (such as a shared library/DLL). It is only when a program tries to read those virtual addresses that the file is loaded into memory.
If those shared libraries are in fact shared, then the operating system will actually share the physical memory across multiple processes; That is to say that a great deal of those tens of gigabytes are not only file-backed libraries, but also the same file-backed libraries.
Further, if scratch memory is required (for data; settings, bitmaps, sounds, etc), and there aren’t any physical pages unused, the operating system will actually discard the contents of these file-backed regions and give them to your application. If those pages are needed again, the operating system can simply reload them from disk.
Swap ( SWP ) is a special file-backed region for that scratch memory. Creating swap-space will allow the operating system to move that scratch memory to the disk instead of (utilised by more running process) shared libraries, generally improve performance, and perhaps most surprisingly of all, produce less swapping than having no swap space at all.
Инструкция по использованию команды htop для интерактивного просмотра процессов в Linux
Команда htop похожа на команду top по выполняемой функции: они обе показывают информацию о процессах в реальном времени, выводят данные о потреблении системных ресурсов и позволяют искать, останавливать и управлять процессами.
У обеих команд есть свои преимущества. Например, в программе htop реализован очень удобный поиск по процессам, а также их фильтрация. В команде top это не так удобно — нужно знать кнопку для вывода функции поиска.
Зато в top можно разделять область окна и выводить информацию о процессах в соответствии с разными настройками. В целом top намного более гибкая в настройке отображения процессов.
В общем, чтобы решить, какая из команд лучше именно для вас, попробуйте их обе. В данной статье будет подробно рассказано о htop, чтобы познакомиться с top обратитесь к статье «Как пользоваться командой top для наблюдения за процессами в Linux».
Как установить htop
Установите пакет с именем htop используя менеджер пакетов для вашего дистрибутива.
В Debian, Linux Mint, Ubuntu, Kali Linux и их производных выполните:
sudo apt install htop
В Arch Linux, Manjaro, BlackArch и их производных выполните:
sudo pacman -Syu htop
Как просмотреть все процессы в Linux
Команду htop можно запускать как с правами обычного пользователя:
htop
Так и с привилегиями суперпользователя, для этого используйте sudo:
sudo htop
Права суперпользвоателя нужны только для некоторых действий: для изменения приоритета (nice) процессов, для закрытия процессов других пользователей.
Как и в случае с программой top, окно разделено на два основных раздела:
- обобщённая информация о системе
- подробная информация о процессах
Область с информацией о системе
В самом верху показана нагрузка на каждое ядро центрального процессора (цифры от 1 до 12).
Mem — это общее количество оперативной памяти и используемая память.
Task — обобщённая статистика по процессам
Swp — уровень занятости файла подкачки (если он есть)
Load average — средняя загрузка центрального процессора
Uptime — время работы операционной системы с момента последней загрузки
Теперь перейдём к области с информацией о запущенных процессах.
Значение столбцов htop
Программа htop выводит следующие столбцы:
PID
USER
Имя пользователя владельца процесса или ID если имя не может быть определено.
PRI
Приоритет — внутренний приоритет ядра для процесса, обычно это просто значение nice плюс двадцать. Отличается для процессов имеющих приоритет выполнения real-time.
NI
NICE значение процесса от 19 (низкий приоритет) до -20 (высокий приоритет). Более высокое значение означает, что процесс «приятный» для других и позволяет им иметь более высокий приоритет выполнения.
VIRT
Размер виртуальной памяти процесса (M_SIZE).
RES
Размер резидентного набора (text + data + stack) процесса (т.е. размер используемой физической памяти процесса, M_RESIDENT).
SHR
Размер общих страниц процесса (M_SHARE).
S
STATE, состояние процесса, может быть:
S для спящих (в простое)
R для запущенных
D для сна диска (бесперебойный)
Z для зомби (ожидает родитель считает его статус выхода)
T для отслеживания или приостановки (т. е. от SIGTSTP)
W для подкачки
CPU%
Процент процессорного времени, которое процесс использует в данный момент.
MEM%
Процент памяти, используемой процессом в данный момент (в зависимости от размера резидентной памяти процесса, см. M_RESIDENT выше).
TIME+
Время, измеренное в часах, указывает на то, сколько процесс провёл в пользовательском и системном времени.
Command
Полная командная строка процесса (то есть имя программы и аргументы).
Как ускорить или замедлить частоту обновления htop
Для установки времени обновления htop используйте опцию -d после которой укажите время обновления в десятой части секунд. Например, чтобы программа обновляла окно каждую 1/10 секунды:
sudo htop -d 1
Чтобы программа выводила новые данные раз в 5 секунд:
sudo htop -d 50
Как вывести процессы в виде дерева
Для вывода процессов в виде дерева используйте опцию -t:
sudo htop -t
Либо во время работы программы нажмите клавишу F5:
Как перемещаться по списку процессов в htop
Вы можете использовать курсорные клавиши (←, →, ↑, ↓ ) для прокрутки списка процессов.
Также работают клавиши PgUp, PgDn для прокрутки окна.
Кнопка Home перенесёт к началу списка.
Кнопка End прокрутит список до конца.
Ctrl-a или ^ — прокрутка к началу пункта (началу строки).
Ctrl-e или $ — прокрутка к концу пункта записи о процессе (то есть концу строки).
Как в htop отсортировать по потреблению памяти. Как выбрать поле для сортировки
Нажмите клавишу F6 для выбора поля, которое вы хотите использовать для сортировки.
Для переключения к обратному порядку сортировки используйте кнопку I (Shift+i). При повторном нажатии список вновь будет отсортирован в обратном порядке.
Как свернуть ветки дерева процессов в htop
В режиме дерева процессов выберите ветку дерева, которую вы хотите свернуть и нажмите F6.
Поиск и фильтрация процессов в htop
Поиск отличается от фильтрации тем, что найденные процессы показываются наравне с остальными, и между найденными процессами можно переключаться кнопкой F3.
При фильтрации на экран будут выводиться только процессы, соответствующие введённой строке.
Для перехода к поиску по процессам нажмите F3 или /. Для переключения между найденными процессами нажимайте F3.
Для фильтрации процессов нажмите F4 или \ начните вводить имя процесса.
Для очистки фильтра вновь нажмите F4 и затем Esc.
Как изменить приоритет процесса в htop
Для увеличения приоритета процесса (вычитание из величины nice) нажмите кнопку F7 или ]. Помните, что эту операцию может делать только суперпользователь (вы должны быть root’ом или запустить htop с sudo).
Для уменьшения приоритета процесса (прибавления к величине nice) нажмите кнопку F8 или [.
Как выбрать один или несколько процессов в htop
Для выбора процессов используйте Пробел. После этого введённые команды, такие как kill или изменение приоритета, могут применяться к группе выделенных процессов вместо подсвеченного в данный момент.
Для снятия выделения со всех процессов нажмите U (Shift+u).
Как закрыть процесс в htop
Для закрытия процесса выберите один или несколько процессов и нажмите F9 или k. Выбранному процессу будет отправлен сигнал завершения. Если не отмечен ни один процесс, то будет закрыть тот, на котором находиться в данный момент курсор.
Как показать файлы, которые использует процесс
Если вы хотите увидеть файлы, открытые процессом, то выделите интересующий вас процесс и нажмите кнопку l (маленькая латинская L).
Чтобы эта функция работала, в системе должны быть установлена утилита lsof.
Как изменить внешний вид htop
Для изменения внешнего вида — панели с информацией о системе, выводимых столбцах и прочем, нажмите кнопку F2 или S (Shift+s).
Там вы увидите следующие вкладки:
- Meters (выводимая вверху окна информация о ЦПУ, памяти и прочем)
- Display options (опции отображения)
- Colors (цвета)
- Columns (изменение порядка колонок, добавление и удаление колонок)
Как указать поле для сортировки при запуске htop
С помощью опции -s можно указать столбец, по которому будут отсортированы процессы.
Например, для сортировки процессов по столбцу PERCENT_MEM (процент используемой памяти):
sudo htop -s PERCENT_MEM
Чтобы увидеть все доступные столбцы для сортировки выполните команду:
htop --sort-key help
Как показать только процессы определённого пользователя
Используйте опцию -u в команде вида:
sudo htop -u ПОЛЬЗОВАТЕЛЬ
Например, для вывода процессов только пользователя mial:
sudo htop -u mial
Как показать только процесс с определённым номером
Для слежения только за некоторыми процессами используйте опцию -p PID,PID…. Через запятую вы можете перечислить один или более идентификаторов процессов. Только эти процессы будут показаны в окне htop.
Трассировка системных вызовов
Вы можете проследить, какие системные вызовы сделал процесс. Для этого выберите интересующий вас процесс и нажмите кнопку s.
Для работы этой функции у вас должна быть установлена утилита strace.
Как закрыть htop
Для выхода из программы нажмите F10 или q или Ctrl+c.
Если возможностей htop вам недостаточно, то обратитесь к статье «Как пользоваться командой top для наблюдения за процессами в Linux».
Связанные статьи:
- Как пользоваться командой top для наблюдения за процессами в Linux (100%)
- Какие есть полезные инструменты с интерфейсом командной строки для системных администраторов Linux (50%)
- Установка и использование Docker в Linux (Debian, Ubuntu, Arch Linux) (50%)
- Программы для бенчмарка CPU в Linux (50%)
- Как в Linux подключить новый диск, разметить и отформатировать разделы (50%)
- Как установить локальный .deb пакет (RANDOM — 18.5%)
Оперативной памяти много, а данные идут в swap
Работаю себе спокойно, уже привык что 8гб в наше время это мало, поэтому стоит своп раздел. Но я как-то задумал что что-то не так, когда хтоп явно показывает 3.3/8 гб памяти, а своп на десяток-другой мегабайт пополняется на глазах. Что открыто: скайп, телеграм, браузер с курсьерой, Clion и собственно htop. Все это точно влезает в 4гб.
Как, что и почему лезет мне в своп?
JAkutenshi ★★
25.09.19 19:46:36 MSK

Artamudo ★★★★
( 25.09.19 19:50:13 MSK )
Ответ на: комментарий от Artamudo 25.09.19 19:50:13 MSK
Спасибо! Поменял на 40, посмотрим как оно будет
JAkutenshi ★★
( 25.09.19 19:55:10 MSK ) автор топика
Последнее исправление: JAkutenshi 25.09.19 19:56:23 MSK (всего исправлений: 1)
Это нормально. Так и должно быть.
anonymous
( 25.09.19 19:56:48 MSK )
А кеш, а буфферы, которые сильно влияют на отзывчивость системы при «спокойной работе» с проектам в CLion, интернет-страничками с картинками и другими медия файлами? Может лучше выкинуть неиспользуемую память, и держать активно используемые файлы в кеше вместо того, чтобы насиловать десятки-сотни тысяч раз медленный диск?
anonymous
( 25.09.19 20:05:53 MSK )
Ответ на: комментарий от anonymous 25.09.19 20:05:53 MSK
Дело в том, что я работаю с памятежорными проектами и каждый раз перезагружаться от внезапного oom мне не хочется. А выключить все и дождаться пока своп очистится, сохранив при этом работу системы — как раз. Заодно чай попью.
JAkutenshi ★★
( 25.09.19 20:29:32 MSK ) автор топика
Ответ на: комментарий от JAkutenshi 25.09.19 20:29:32 MSK

Можешь посмотреть на zram.
Artamudo ★★★★
( 25.09.19 20:35:30 MSK )
Ответ на: комментарий от JAkutenshi 25.09.19 20:29:32 MSK
1. То, что htop пишет о занятом месте в свопе, не значит, что своп реально используется.
2. Дожидаться, когда своп очистится, не надо.
#swapoff -a swapon -a
Но вам это не нужно.
anonymous
( 25.09.19 20:46:19 MSK )
Ответ на: комментарий от JAkutenshi 25.09.19 20:29:32 MSK
Чем способствует своп в наступлении oom и мешает выключению?
Лучше бы пил чай, чем делать выводы смотря на htop, в котором ты ничего не видишь.
anonymous
( 25.09.19 20:47:47 MSK )
Ответ на: комментарий от anonymous 25.09.19 20:47:47 MSK
Ну, я прекрасно ощущаю, что что-то не то: даже rofi открывается с трудом, да и рабочие столы не переключаются.
JAkutenshi ★★
( 25.09.19 21:17:42 MSK ) автор топика
RazrFalcon ★★★★★
( 25.09.19 21:30:44 MSK )
хтоп явно показывает 3.3/8 гб памяти
Смотри MemAvailable через
а не занятую через htop. И да, если смущает — уменьшай. И не забудб напердолить сжатие нулей через zswap или zram.
anonymous
( 26.09.19 04:33:23 MSK )
Ответ на: комментарий от JAkutenshi 25.09.19 20:29:32 MSK
я работаю с памятежорными проектами и каждый раз перезагружаться от внезапного oom мне не хочется
anonymous
( 26.09.19 05:05:55 MSK )
Ответ на: комментарий от JAkutenshi 25.09.19 20:29:32 MSK
anonymous
( 26.09.19 05:08:24 MSK )
Не надо смотреть на объем занятого в свапе, надо смотреть на активность свопинга (vmstat характеристики swap in/out), как часто оно туда скидывает и как часто из свопа читает.
Потому что если ваш софт загрузил себе какой нибудь хлам типа отладочной информации и 100500 плагинов которые нигде не используются, это всё можно скинуть в свап безболезненно и с пользой.
Nastishka ★★★★★
( 26.09.19 08:38:04 MSK )
И даже если активность по свапу есть это ничего не значит если у вас сумма service time + wait time по свап-разделу меньше 5 миллисекунд. Вы такого свапинга просто не заметите
Nastishka ★★★★★
( 26.09.19 08:43:05 MSK )
Ответ на: комментарий от Nastishka 26.09.19 08:38:04 MSK
надо смотреть на активность свопинга (vmstat характеристики swap in/out)
Есть более лучшая метрика: PSI.
nohang и oomd умеют в PSI — это именно то, что вам нужно:
PSI aggregates and reports the overall wallclock time in which the tasks in a system (or cgroup) wait for contended hardware resources.
This helps users understand the resource pressure their workloads are under, which allows them to rootcause and fix throughput and latency problems caused by overcommitting, underprovisioning, suboptimal job placement in a grid, as well as anticipate major disruptions like OOM. — https://lwn.net/Articles/759658/
PSI provides for the first time a canonical way to see resource pressure increases as they develop, with new pressure metrics for three major resources—memory, CPU, and IO.
These pressure metrics, in conjunction with cgroup2 and other kernel and userspace tools described below, allow you to detect resource shortages while they’re developing, and respond intelligently—by pausing or killing non-essentials, reallocating memory in the system, load shedding, or other actions.
PSI stats are like barometers that provide fair warning of impending resource shortages, enabling you to take more proactive, granular, and nuanced steps when resources start becoming scarce. — https://facebookmicrosites.github.io/psi/docs/overview
anonymous
( 26.09.19 09:28:04 MSK )
Ответ на: комментарий от JAkutenshi 25.09.19 20:29:32 MSK

А выключить все и дождаться пока своп очистится, сохранив при этом работу системы — как раз.
Было б зачем. С огромной вероятностью там уже мусор, который никогда больше не понадобится, так как попал именно по причине, что давно никто к этому мусору не обращается.
Что использует swp?
Запустил htop, параметр swp — 5GB.
Скажите, пожалуйста, это в реальном времени он так забит или это за какое-то время?
Ну и как определить процесс, который его занимает?
В линуксе я не очень. Помогите, пожалуйста.
UPD:
Еще вопрос: почему у меня при наличии свободной памяти заполняется своп? Вот в том же htop я вижу Mem: 25GB/31GB, Swp: 4GB. То есть там и память еще есть.
Кроме того, у меня бОльшая часть памяти выделена для кэша mysql, и, как я понимаю, при нехватке памяти будет просто вычищаться кэш.
- Вопрос задан более трёх лет назад
- 7312 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 4
Здравствуйте, это специальный раздел на диске или файл в который операционная система перемещает отдельные блоки оперативной памяти в случае когда оперативной памяти не хватает для работы приложений.
Ответ написан более трёх лет назад
WebDev @kirill-93 Автор вопроса
Спасибо. Я знаю что это очень плохо, и своп никогда не был забит. Подскажите, как мне найти скрипт, который расходует память? И эта величина 5GB — она в реальном времени показывается? То есть прямо сейчас 5GB занято?