- Smem – Отчеты о распределении памяти между процессами и пользователями в Linux
- Как установить Smem – инструмент мониторинга памяти в Linux
- На системах RHEL, CentOS и Fedora
- На системах Debian и Ubuntu
- На Linux Mint
- На Arch Linux
- Как использовать Smem
- Как в Linux узнать, какой процесс использует всю оперативную память (RAM)?
- Как узнать, сколько свободной памяти в Linux
- Как просмотреть, какая программа потребляет больше всего оперативной памяти в top
- Как найти программы, которые используют больше всего памяти в ps
- Невозможно найти, через какой процесс утекает оперативная память — сумма памяти процессов меньше общей используемой памяти
- Память процесса Linux
- Виртуальная память
- Виртуальная и резидентная память процесса
- Отображение файлов в память
- Карта памяти процесса
- Системные вызовы mmap/munmap и brk— выделение и высвобождение памяти
- Потребление памяти
- Распределение памяти по назначению
- Статистика использования памяти
- Потребление памяти процессами
Smem – Отчеты о распределении памяти между процессами и пользователями в Linux
И снова здравствуйте. Друзья, хотим поделиться с вами переводом полезного материала о мониторинге использования памяти в Linux. Данный материал подготовлен специально для студентов курса «Администратор Linux».
Управление памятью в вопросах мониторинга ее использования – одна из самых важных областей в вашей Linux системе. В различных дистрибутивах Linux существует великое множество инструментов для мониторинга использования памяти. Работают они тоже по разному, но в этой статье мы рассмотрим установку и использования такого инструмента как smem.
Smem – это инструмент предоставления отчетов в командной строке, который выдает пользователю различные сводки по использованию памяти в системе Linux. В smem есть одна уникальная вещь, которая отличает его от традиционных инструментов мониторинга памяти. Дело в том, что smem сообщает вам PSS (Proportional Set Size), то есть он дает более полноценное представление о распределении памяти между приложениями и библиотеками в настройках виртуальной памяти.
Существующие традиционные инструменты сосредоточена главным образом на считывании RSS (Resident Set Size), т.е. на стандартной мере мониторинга использования памяти в физической схеме памяти, которая тем не менее имеет тенденцию переоценивать использование памяти приложениями.
С другой стороны PSS рационально оценивает использование памяти, определяя справедливое ее распределение между приложениями и библиотеками в схеме виртуальной памяти.
Вы можете обратиться к этому руководству (о PSS и RSS памяти), чтобы понять механизм потребления памяти в системе Linux. А теперь давайте перейдем к рассмотрению некоторых особенностей smem.
Особенности Smem:
- Листинг обзора системы;
- Листинг и фильтрация по процессам, маппингам и пользователям;
- Использование данных из файловой системы /proc;
- Настраиваемые столбцы листинга для нескольких источников данных;
- Конфигурируемые блоки вывода и процентные показатели;
- Простота настройки заголовков и итогов в списках;
- Использование моментальных снимков из зеркал каталогов или сжатых tar файлов;
- Встроенный механизм генерации диаграмм;
- Облегчённый инструмент захвата, используемый во встроенных системах.
Как установить Smem – инструмент мониторинга памяти в Linux
Перед тем, как приступить к установке smem, необходимо убедиться, что ваша система удовлетворяет следующим параметрам:
- Современное ядро (версия от 2.6.27);
- Актуальная версия Python (поддерживается от 2.4);
- Опционально библиотека matplotlib для генерации диаграмм.
Большинство дистрибутивов Linux на сегодняшний день поставляются с последней версией ядра с поддержкой Python 2 или 3, поэтому единственным требованием по сути может быть только установка matplotlib для отрисовки красивых графиков.
На системах RHEL, CentOS и Fedora
Для начала включите репозиторий EPEL (Extra Packages for Enterprise Linux), затем установите следующее:
На системах Debian и Ubuntu
На Linux Mint
На Arch Linux
Как использовать Smem
Чтобы увидеть отчет по использованию памяти системой, всеми пользователями системы, введите следующую команду:
Когда стандартный пользователь запускает smem, то отображается использование памяти процессом, который инициировал этот пользователь. Процессы организованы по возрастанию PSS.
Взгляните на пример вывода для моей системы. Здесь показано использование памяти для процессов, инициированных пользователем aaronkilik:
Есть множество опций, которые вы можете вызвать во время использования smem, например, чтобы просмотреть потребление памяти в масштабах системы, выполните следующую команду:
Также вы можете просмотреть использование памяти маппингами:
У smem есть параметры фильтрации выходных данных. Сейчас мы взглянем на два примера.
Фильтрация вывода по имени пользователя (username) осуществляется вызовом опций -u или —userfilter=»regex» , как в примере ниже:
Чтобы отфильтровать выходные данные по имени процесса, включите опцию -P или —processfilter=»regex» :
Форматирование вывода может быть крайне полезным, поэтому smem предоставляет параметры, которые помогут вам форматировать отчеты об использовании памяти. Далее мы рассмотрим пару примеров.
Чтобы отображать в отчете только необходимые столбцы, используйте -c или –columns , как показано ниже:
Вы можете использовать параметр -p , чтобы выводить отчет об использовании памяти в процентном соотношении:
Следующая команда будет выводить итоговые показатели в конце каждого столбца выходных данных:
Кроме того, есть специальные опции для графических сводок, которые вы также можете использовать. В этой секции мы их и рассмотрим.
Вы можете создать гистограмму процессов и их PSS и RSS значений. В приведенном ниже примере мы создаем гистограмму процессов, принадлежащих пользователю root.
Вы имеете возможность создать круговую диаграмму, отражающую процессы и потребление памяти ими на основе PSS или RSS значений. Команда ниже выводит круговую диаграмму для процессов, принадлежащих пользователю root, отражающую ключевые значения.
— — pie означает метку по имени, а опция -s помогает сортировать по значению PSS.
Существует множество других полей помимо PSS и RSS, используемых для маркировки диаграмм.
Чтобы увидеть справку, просто введите smem -h или обратитесь к документации.
Сейчас мы остановимся в smem на этом этапе. Если вы хотите получше разобраться с этим инструментом, посетите страницу руководства.
Источник
Как в Linux узнать, какой процесс использует всю оперативную память (RAM)?
Если в операционной системе заканчивается свободная оперативная память, то это очень сильно влияет на её производительность. Система начинает работать заметно медленнее, уменьшается её «отзывчивость», происходит более долгое переключение между окнами, новые процессы не запускаются или запускаются очень медленно. По этой причине, если какой-то процесс расходует слишком много оперативной памяти или тем более всю свободную оперативную память, не оставляя ресурсов для остальной системы, то необходимо его выявить и принять меры для оптимизации.
Как узнать, сколько свободной памяти в Linux
Начнём с того, что убедимся, что дело действительно в нехватке оперативной памяти, а не в том что, например, центральный процессор слишком загружен. Для этого выполним очень простую команду:
Вы увидите примерно следующее:
В этой табличке означает:
- Mem — физическая оперативная память
- Swap — раздел подкачки (если недостаёт оперативной памяти, то система сбрасывает временно неиспользуемые данные на физический диск, а потом по мере необходимости вновь загружает их в оперативную память. С одной стороны, это позволяет продолжить работу в условиях нехватки оперативной памяти, но с другой — система начинает работать заметно медленнее, поскольку физический диск всегда медленнее ОЗУ, плюс нужно время для записи на диск и считывание с диска)
- total — общее количество
- used — используемая в данный момент память (вычисляется как total — free — buffers — cache)
- free — неиспользуемая память
- shared — память, используемая (преимущественно) в tmpfs
- buff — память, используемая буферами ядра
- cache — память, используемая страницами cache и slabs
- buff/cache — сумма буферов и кэша
- available — примерное количество оперативной памяти, доступное для запуска новых приложений без использования ими раздела подкачки. В отличие от поля free, это поле принимает в расчёт страницу cache и также то, что не вся рекуперируемая (пригодная для повторного использования) память будет возвращена для рекуперации из-за того, что элементы используются в данный момент
Итак, если значение поля free, а в особенности поля available очень мало или равно нулю, значит нужно принимать меры, иначе рабочая станция или сервер будут работать крайне медленно либо могут полностью зависнуть.
Как просмотреть, какая программа потребляет больше всего оперативной памяти в top
Очень подробно о команде top, в том числе подсказки и интересные трюки описаны в статье «Как пользоваться командой top для наблюдения за процессами в Linux» — крайне рекомендуется ознакомиться.
Запуск программы top:
По умолчанию программа top сортирует процессы по их нагрузке на центральный процессор. Чтобы посмотреть, по какому полю выполняется сортировка, нажмите клавишу x:
По умолчанию в top отображаются следующие виды памяти:
- VIRT — общее количество используемой задачей виртуальной памяти, включает все коды, данные, совместные библиотеки, плюс страницы, которые были перенесены в раздел подкачки, и страницы, которые были размечены, но не используются
- RES — используемая оперативная память, является подмножеством VIRT, представляет физическую память, не помещённую в раздел подкачки, которую в текущий момент использует задача. Также является суммой полей RSan, RSfd и Rssh.
- SHR — размер совместной памяти, подмножество используемой памяти RES, которая может использоваться другими процессами
- %MEM — доля задачи в использовании памяти (RES)
Для переключения между полями сортировки, используйте . Обратите внимание, что это не курсорные клавиши, а разновидность скобок, для их использования переключитесь на английскую раскладку клавиатуры и нажимайте эти кнопки с зажатой клавишей Shift.
Пример сортировки по %MEM:
Сортировка по VIRT:
Как найти программы, которые используют больше всего памяти в ps
С помощью утилиты ps также можно составить список, отсортированный по количеству потребляемой памяти, для этого выполните:
Самые «прожорливые» процессы будут внизу:
Первый столбец — это PID процесса, затем идёт виртуальная память процесса в килобайтах, затем название программы.
Ещё одна элегантная команда с использованием ps:
Она покажет что-то вроде:
Невозможно найти, через какой процесс утекает оперативная память — сумма памяти процессов меньше общей используемой памяти
В некоторых версиях ядер Linux присутствовала проблема утечки памяти на уровне ядра, поэтому нет никакой возможности обнаружить её инструментами пользовательского пространства. Пример такого ядра — 3.13.
Причём некоторые ядра допускают утечку памяти только в определённых условиях (пример: Linux Mint 17 при использовании btrfs).
Самым лучшим вариантом в этом случае является обновление ядра и системы в целом до новой версии.
Источник
Память процесса Linux
Еще одним ресурсом, подлежащим распределению между процессами, является оперативная память. В Linux, как и во многих других современных операционных системах, для управления памятью используют механизм страничного отображения, реализуемого ядром операционной системы при помощи устройства управления памятью — W:[MMU]. При этом процессы работают с виртуальными адресами (virtual address) «воображаемой» памяти, отображаемыми устройством MMU на физические адреса (physical address) настоящей оперативной памяти.
Для отображения вся оперативная память (RAM) условно разбивается на «гранулы» — страничные кадры размером в 4 Кбайт, которые затем выделяются процессам. Таким образом, память процесса условно состоит из страниц (page), которым в специальных таблицах страниц (page table) сопоставлены выделенные страничные кадры (page frame).
При выполнении процесса преобразование его виртуальных адресов в физические выполняется устройством MMU «на лету» при помощи его. индивидуальной таблицы страниц.
Именно механизм страничного отображения позволяет эффективно распределять память между процессами путем размещения страниц процессов в произвольные свободные страничные кадры. Кроме этого, механизм страничного отображения позволяет выделять процессам память по требованию, добавляя дополнительные страницы и отображая их на свободные страничные кадры. Аналогично, ненужные процессу страницы могут быть удалены, а соответствующие страничные кадры высвобождены для использования другими процессами.
Виртуальная память
Помимо задачи распределения памяти между процессами, механизм страничного отображения используется ядром операционной системы и для решения задачи нехватки оперативной памяти. При определенных обстоятельствах имеющиеся в распоряжении свободные страничные кадры оперативной памяти могут быть исчерпаны. Одновременно с этим оказывается, что большую часть времени процессы используют лишь малую часть выделенной им памяти, а находясь в состоянии сна, не используют память вовсе.
Увеличить коэффициент полезного использования памяти позволяет еще одна простая идея — высвобождать страничные кадры при помощи выгрузки (page out) неиспользуемых страниц процессов во вторичную память (в специальную область «подкачки» SWAP, например, на диске), а при обращении к выгруженной странице — загружать (page in) ее обратно перед использованием.
За счет такого страничного обмена (paging или page swapping) организуется W:[виртуальная память], т. е. видимость большего количества (оперативной) памяти для размещения процессов, чем есть на самом деле.
В примере из листинга ниже в столбцах VSZ и RSS вывода команды ps показано потребление памяти процессами (в килобайтах). В столбце VSZ (virtual size) указывается суммарный объем всех страниц процесса (в том числе и выгруженных), а в столбце RSS (resident set size) — суммарный объем всех его страничных кадров в оперативной памяти, т. е. ее реальное потребление процессом.
Виртуальная и резидентная память процесса
$ ps fu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
fitz 18690 0.0 0.0 10308 5432 pts/1 Ss 20:51 0:00 bash
fitz 19393 2.8 1.7 609744 143316 pts/1 Sl 21:27 0:11 \_ /usr/…/firefox
fitz 19526 0.0 0.0 6104 700 pts/1 R+ 21:33 0:00 \_ ps fu
Отображение файлов в память
Страничный обмен, помимо организации виртуальной памяти, имеет еще одно важнейшее применение. Именно на его основе реализуется незаменимый механизм отображения файлов в память процесса, доступный при помощи системных вызовов mmap/munmap (и дополнительных mlock, mprotect, msync, madvise и др.).
Для отображения файла в память процесса ему выделяют страницы в необходимом количестве, но не страничные кадры. Вместо этого, в таблице страниц формируются такие записи, как будто эти страницы уже были выгружены ранее в отображаемый файл.
При последующем обращении (on demand) процесса к какой-либо странице отображенной памяти, под нее выделяют страничный кадр и заполняют (read) соответствующим содержимым файла. Любые последующие изменения, сделанные процессом в отображенных страницах, сохраняются обратно (write back) в файл, если отображение выполнено «разделяемым» (shared) способом. Для страниц, отображенных «частным» (private) способом, используется принцип COW (copy-on-write), согласно которому любые попытки их изменения (write) приводят к созданию их копий (сору), куда и попадают изменения.
Таким образом, страницы отображенного файла, которые никогда не были востребованы процессом, не будут вовсе занимать оперативной памяти. Это обстоятельство широко используется для «загрузки» в процесс его программы и библиотек. В листинге ниже при помощи команды pmap показана карта (отображения файлов) памяти процесса командного интерпретатора bash.
Карта памяти процесса
$ ps fu
PID TTY STAT TIME COMMAND
26958 pts/0 Ss 0:00 bash
28540 pts/0 R+ 0:00 \_ ps f
[email protected]:
$ which bash
$ readelf -l /bin/bash
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0X000000 0X08048000 0x08048000 0xdb0c8 0xdb0c8 R E 0x1000
LOAD 0x0dbf04 0x08124f04 0x08124f04 0x04870 0x09820 RW 0x1000
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4
GNU_RELRO 0x0dbf04 0x08124f04 0x08124f04 0x000fc 0x000fc R 0 0x1
[email protected]:
$ pmap -d 26958
26958: bash
Address Kbytes Mode Offset Device Mapping
08048000 880 r-x— 0000000000000000 0fc:00000 bash
08124000 4 r—- 00000000000db000 0fc:00000 bash
08125000 20 rw— 00000000000dc000 0fc:00000 bash
0812a000 20 rw— 0000000000000000 000:00000 [ anon ]
086b9000 3676 rw— 0000000000000000 000:00000 [ anon ]
b753be000 1676 r-x— 0000000000000000 0fc:00000 libc-2.15.so
b76de000 8 r—- 00000000001a3000 0fc:00000 libc-2.15.so
b76e0000 4 rw— 00000000001a5000 0fc:00000 libc-2.15.so
b76e1000 16 rw— 0000000000000000 000:00000 [ anon ]
bfe78000 132 rw— 0000000000000000 000:00000 [ stack ]
mapped: 10312K writeable/private: 3908K shared: 240K
В память процесса интерпретатора отображен исполняемый ELF-файл его программы и ELF-файлы всех библиотек, от которых она зависит. Отображение ELF-файлов выполняется частями — сегментами (при помощи readelf можно получить их список), в зависимости от их назначения. Так, например, сегмент программного кода отображен в страницы, доступные на чтение r и выполнение x, сегмент данных отображен в страницы, доступные на чтение r и запись w, и т. д.
Более того, выделение страниц памяти по требованию в процессе работы процесса реализуется при помощи «воображаемого» отображения некоторого несуществующего, «анонимного файла» [anon] на страничные кадры. Необходимо отметить, что механизм виртуальной памяти при освобождении неиспользуемых страниц выгружает в специальную область подкачки SWAP только «анонимные» страничные кадры и «анонимизированные», полученные копированием при изменении (согласно принципу COW).
Неанонимные измененные кадры выгружаются непосредственно в соответствующие им файлы, а неизмененные освобождаются вовсе без выгрузки, т. к. уже «заранее выгружены».
В примере из листинга ниже иллюстрируются два способа выделения памяти по требованию: явный — при помощи системного вызова mmap с аргументом MAP_ANONYMOUS, и неявный (Доставшийся в наследство от классической ОС UNIX) — при помощи системного вызова brk. Явный способ позволяет выделять новые сегменты памяти процесса, тогда как неявный способ изменяет размер предопределенного «сегмента данных» процесса, позволяя увеличивать и уменьшать его по желанию, перемещая так называемый «break» — адрес конца этого сегмента.
Системные вызовы mmap/munmap и brk— выделение и высвобождение памяти
$ ldd hostname
libnsl.so.1 => /lib/i386-linux /llb/i386-linux-gnu/libc.so.6 (0xb7526000)
/lib/ld-linux. so.2 (0xb770a000)
$ strace hostname
execve(«/bin/hostname», [«hostname»], [/* 43 vans */]) = 0
access(«/etc/ld.,so.nohwcap», F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYNOMOUS, -1, 0) = 0xb770e000
access( «/etc/ld. so. preload», R_OK) = -1 ENOENT (No such file or directory)
open(«/etc/ld.so.cache», O_RDONLY|O_CLOEXEC) = 3
mmap2(NULL, 122191, PROT_READ, MAP_PRIVATE, 3, 0) = 0bdo76f000
access(«/etc/ld.so.nowcap», F_OK) = -1 ENOENT (No such Ale or directory)
open(«/lib/1386-linux 6, base_addr:0xb752b6c0, limit: 1048575, seg_32bit:1, contents: 0, read_exec_only: 0, limit_in_pages: 1, seg_not_present: 0, useable: 1>) = 0
mprotect(oxb76d0000, 8192, PROT_READ) = 0
mprotect(0xb76eo000, 4096, PROT_READ) = 0
mprobect(0x804b000, 4096, PROT_READ) = 0
mprotect(0xb7731000, 4096, PROT_READ) = 0
munmap(0xb76f0000, 122101) = = 0 ↑ /lib/ld-linux.so.2
brk(0) = 0x9e62000 ↓ /bin/hostname
mmap2(NULL, 4096, PROT_READ| PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb770d000 wrlte(1, «ubuntu\n», 7ubuntu
Трасса команды hostname, показанная в листинге выше, поясняет работу загрузчика и компоновщика, (loader, ld) динамических библиотек ld-linux.
Системный вызов exec отображает для запуска в память процесса не только заданный ELF-файл /bin/hostname, но и (указанный в этом ELF-файле) загрузчик библиотек /lib/ld-linux.so.2, которому и передается управление до самой программы.
Загрузчик библиотек, в свою очередь, отображает в процесс , свой «конфигурационный» файл /etc/ld.so.cache, а затем посегментно отображает файлы всех библиотек и выделяет им требуемую дополнительную память.
Загруженные библиотеки присоединяются (линкуются или же компонуются, linking), к программе /bin/hostname, после чего страницам их отображенных сегментов назначается ©Ф соответствующий режим доступа системным вызовом mprotect. По завершении компоновки отображение конифгурационного файла /etc/ld.so.cache снимается при помощи munmap, а управление передается исходной программе.
Потребление памяти
Суммарное распределение страниц памяти по сегментам процесса можно получить при помощи третьего набора столбцов (активировав его клавишами № команды top, как показано в листинге ниже. В столбце VIRT изображается суммарный объем (в килобайтах) всех страниц процесса, а в столбце RES — объем резидентных «страниц (находящихся в страничных кадрах оперативной памяти). В столбце SWAP указывается объем всех страниц, находящихся во вторичной памяти — как «анонимных» страниц, выгруженных в специальную область подкачки, так и «файловых» страниц, возможно, никогда не загружавшихся в оперативную память.
Столбцы CODE и DATA показывают объемы (в килобайтах) памяти,, выделенной, под сегменты кода и данных, а столбец SHR — объем резидентных страниц, которые используются (или могут быть использованы) совместно с другими процессами.
Распределение памяти по назначению
$ top -р 26958
top — 11:05:01 up 15 days, 47 min, 8 users, load average: 0.27, 0.51, 0.51
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
Cpu(s): 8.6%us, 2.4%sy, 0.0%ni, 88.6%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%si
Mem: 8192144k total, 7037720k used, 1154424k free, 238984k buffers
Swap: 4104188k total, 35376k used, 4068812k free, 4356372k cached
PID %МЕМ VIRT SWAP RES CODE DATA SHR nFLT nDRT S PR NI %CPU COMMAND
26958 0.1 10288 4936 5352 880 3852 1544 0 0 S 20 0 0 bash
Механизм отображения считывает содержимое файла в страничные кадры только один раз, вне зависимости от количества процессов, отображающих этот файл в свою память. В случае отображения одного файла разными процессами их страницы совместно отображаются на одни и те же страничные кадры, за исключением страниц, скопированных (согласно принципу COW) при изменении.
Такое поведение механизма отображения позволяет эффективно использовать оперативную память за счет использования разными программами одинаковых разделяемых библиотек. Так как ELF-файлы библиотек «загружаются* в память процессов при помощи отображения mmap, то в результате каждая библиотека размещается в оперативной памяти лишь единожды, вне зависимости от количества ее «использований».
Интегральная статистика по использованию виртуальной памяти может быть получена при помощи команды free, как показано в листинге ниже.
Статистика использования памяти
$ free -m
total used free shared buffers cached
Mem: 8000 5523 2476 0 219 3430
-/+ buffers/cache: 1873 6126
Swap: 4007 17 3990
Строка Mem: содержит статистику использования оперативной памяти, а строка Swap: — статистику специальной области подкачки. В столбце total указан суммарный объем всех доступных страничных кадров, а в столбцах used и free — суммарные объемы использованных и свободных страничных кадров, соответственно.
В столбце cached указан объем страничного кэша (page cache), т. е. суммарный объем страничных кадров оперативной памяти, использованных под отображение файлов в память. Аналогично, в столбце buffers указывается объем буферного кэша, т. е. суммарный объем памяти, использованной ядром для кэширования «не-отображаемых» сущностей: метаданных файлов, дисковых блоков при прямом вводе-выводе на устройства и пр.
В столбцах used и free строки -/+ buffers/cache указываются объемы использованной и свободной памяти «за вычетом» страничного и буферного кэшей, т. е. «чистая» память, выделенная процессам по требованию под данные, сгенерированные в процессе работы.
В листинге ниже показан пример потребления памяти процессом текстового редактора vi при попытке редактирования громадного файла в 1 Гбайт. Процесс загружает файл целиком, в результате чего он целиком оказывается в резидентных страницах сегмента данных процесса, что естественным образом увеличивает «чистый» расход оперативной памяти системы. После принудительного завершения процесса при помощи команды kill память естественным образом высвобождается.
Потребление памяти процессами
pts/0
$ dd if=/dev/urandom of=big bs=4069 count=262144
262144+0 записей получено
262144+0 записей отправлено
скопировано 1073741824 байта (1,1 GВ), 148,956 с, 7,2 МВ/с
$ ls -lh big
-rw-r—r— 1 fitz fttz 1,0G дек. 3 12:26 big
$ free -m
total used free shared buffers cached
Mem: 8000 3947 4052 0 42 2712
-/+ buffers/cache: 1192 6807
Swap: 4007 0 4007
$ vi big
pts/1
$ ps f
PID TTY STAT TIME COMMAND
20595 pts/1 S 0:00 -bash
21087 pts/1 R+ 0:00 \_ ps f
20437 pts/0 S 0:00 -bash
21085 pts/0 Rl+ 0:08 \_ vi big
$ ps up 21685
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
fitz 21085 96.4 21.8 1826416 1786444 pts/0 Sl+ 21:14 0:18 vi big
$ free -m
total used free shared buffers cached
Mem: 8000 5687 2312 0 42 2709
-/+ buffers/cache: 2935 5065
Swap: 4007 0 4007
$ top -b -n1 -p 21085
top — 21:14:43 up 3:56, 3 users, load average: 0.53, 0.40, 0.47
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
Cpu(s): 6.0%us, 5.89%sy, 0.2%ni, 83.7%id, 4.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 8192144k total, 5826856k used, 2365288k free, 43932k buffers
Swap: 4104188k total, 0k used, 4104188k free, 2777504k cached
PID %МЕМ VIRT SWAP RES CODE DATA SHR nFLT nDRT S PR NI %CPU COMMAND
21085 21.8 1783m 39m 1.7g 2148 1.7g 5676 0 0 S 20 0 0 vi
$ kill 21085
$ free -m
total used free shared buffers cached
Mem: 8000 3945 4054 0 42 2709
-/+ buffers/cache: 1193 6806
Swap: 4007 0 4007
Источник