2014-03-07 6 views
1

Я пытаюсь найти текущее использование памяти конкретного процесса. Каждый гид, который я нашел в Интернете, дает инструкции о том, как использовать его как процент от общей памяти. Я хочу, чтобы процесс «ram usae» был дискретным (т. Е. В мегабайтах).Поиск использования памяти в Linux

ответ

0

В терминале вы можете запустить top. Это даст вам представление об использовании памяти в каждом процессе KiloByte. Вы можете даже использовать grep, чтобы сделать снимок использования определенного процесса.

+0

В моем случае он дает% mem за процесс. – supereater14

+0

Если вы используете Debian/Ubuntu. Установите 'htop'' sudo apt-get install htop' –

+0

У меня есть htop, то же самое (также, я на арке) – supereater14

0

Вы, вероятно, захотите узнать об virtual memory и address space, которые используются вашим process так, например. C memory management (т. Е. malloc(3) и т. Д.) Потребляет (и освобождает) виртуальную память (полученную с помощью mmap(2) и т. Д.).

Затем вы должны использовать файловую систему /proc/ (см. proc(5) ....). В частности, для процесса pid 1234, попробуйте cat /proc/1234/maps и cat /proc/1234/status. Смотрите также pmap(1) и попробовать pmap 1234

BTW, /proc/ путь ядро ​​дает информацию о процессах (и статус наиболее системы; см также /sys/). В частности, ps, top, pmap, htop все используют /proc/

FWIW, я использую zsh в моей интерактивной оболочки, и вот что cat /proc/$$/maps дает мне:

00400000-004a5000 r-xp 00000000 08:01 2883633       /bin/zsh5 
006a4000-006a5000 r--p 000a4000 08:01 2883633       /bin/zsh5 
006a5000-006ab000 rw-p 000a5000 08:01 2883633       /bin/zsh5 
006ab000-006bf000 rw-p 00000000 00:00 0 
01e5c000-01faf000 rw-p 00000000 00:00 0         [heap] 
7f2fa1533000-7f2fa1564000 rw-p 00000000 00:00 0 
7f2fa1564000-7f2fa1574000 r-xp 00000000 08:01 1049819     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/computil.so 
7f2fa1574000-7f2fa1773000 ---p 00010000 08:01 1049819     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/computil.so 
7f2fa1773000-7f2fa1774000 r--p 0000f000 08:01 1049819     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/computil.so 
7f2fa1774000-7f2fa1775000 rw-p 00010000 08:01 1049819     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/computil.so 
7f2fa1775000-7f2fa1785000 rw-p 00000000 00:00 0 
7f2fa1785000-7f2fa1788000 r-xp 00000000 08:01 1049839     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/rlimits.so 
7f2fa1788000-7f2fa1988000 ---p 00003000 08:01 1049839     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/rlimits.so 
7f2fa1988000-7f2fa1989000 r--p 00003000 08:01 1049839     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/rlimits.so 
7f2fa1989000-7f2fa198a000 rw-p 00004000 08:01 1049839     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/rlimits.so 
7f2fa198a000-7f2fa19c0000 rw-p 00000000 00:00 0 
7f2fa19c0000-7f2fa19c3000 r-xp 00000000 08:01 1049830     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/stat.so 
7f2fa19c3000-7f2fa1bc2000 ---p 00003000 08:01 1049830     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/stat.so 
7f2fa1bc2000-7f2fa1bc3000 r--p 00002000 08:01 1049830     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/stat.so 
7f2fa1bc3000-7f2fa1bc4000 rw-p 00003000 08:01 1049830     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/stat.so 
7f2fa1bc4000-7f2fa1bcd000 r-xp 00000000 08:01 1055723     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/parameter.so 
7f2fa1bcd000-7f2fa1dcd000 ---p 00009000 08:01 1055723     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/parameter.so 
7f2fa1dcd000-7f2fa1dce000 r--p 00009000 08:01 1055723     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/parameter.so 
7f2fa1dce000-7f2fa1dcf000 rw-p 0000a000 08:01 1055723     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/parameter.so 
7f2fa1dcf000-7f2fa1dd6000 r-xp 00000000 08:01 1056697     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/zutil.so 
7f2fa1dd6000-7f2fa1fd5000 ---p 00007000 08:01 1056697     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/zutil.so 
7f2fa1fd5000-7f2fa1fd6000 r--p 00006000 08:01 1056697     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/zutil.so 
7f2fa1fd6000-7f2fa1fd7000 rw-p 00007000 08:01 1056697     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/zutil.so 
7f2fa1fd7000-7f2fa1ff9000 r-xp 00000000 08:01 1049816     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/complete.so 
7f2fa1ff9000-7f2fa21f9000 ---p 00022000 08:01 1049816     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/complete.so 
7f2fa21f9000-7f2fa21fa000 r--p 00022000 08:01 1049816     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/complete.so 
7f2fa21fa000-7f2fa21fb000 rw-p 00023000 08:01 1049816     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/complete.so 
7f2fa21fb000-7f2fa21fc000 rw-p 00000000 00:00 0 
7f2fa21fc000-7f2fa223d000 r-xp 00000000 08:01 1049825     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/zle.so 
7f2fa223d000-7f2fa243d000 ---p 00041000 08:01 1049825     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/zle.so 
7f2fa243d000-7f2fa243e000 r--p 00041000 08:01 1049825     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/zle.so 
7f2fa243e000-7f2fa2445000 rw-p 00042000 08:01 1049825     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/zle.so 
7f2fa2445000-7f2fa2446000 rw-p 00000000 00:00 0 
7f2fa2446000-7f2fa2448000 r-xp 00000000 08:01 1055724     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/terminfo.so 
7f2fa2448000-7f2fa2647000 ---p 00002000 08:01 1055724     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/terminfo.so 
7f2fa2647000-7f2fa2648000 r--p 00001000 08:01 1055724     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/terminfo.so 
7f2fa2648000-7f2fa2649000 rw-p 00002000 08:01 1055724     /usr/lib/x86_64-linux-gnu/zsh/5.0.5/zsh/terminfo.so 
7f2fa2649000-7f2fa2655000 r-xp 00000000 08:01 4985164     /lib/x86_64-linux-gnu/libnss_files-2.18.so 
7f2fa2655000-7f2fa2854000 ---p 0000c000 08:01 4985164     /lib/x86_64-linux-gnu/libnss_files-2.18.so 
7f2fa2854000-7f2fa2855000 r--p 0000b000 08:01 4985164     /lib/x86_64-linux-gnu/libnss_files-2.18.so 
7f2fa2855000-7f2fa2856000 rw-p 0000c000 08:01 4985164     /lib/x86_64-linux-gnu/libnss_files-2.18.so 
7f2fa2856000-7f2fa2860000 r-xp 00000000 08:01 4985173     /lib/x86_64-linux-gnu/libnss_nis-2.18.so 
7f2fa2860000-7f2fa2a5f000 ---p 0000a000 08:01 4985173     /lib/x86_64-linux-gnu/libnss_nis-2.18.so 
7f2fa2a5f000-7f2fa2a60000 r--p 00009000 08:01 4985173     /lib/x86_64-linux-gnu/libnss_nis-2.18.so 
7f2fa2a60000-7f2fa2a61000 rw-p 0000a000 08:01 4985173     /lib/x86_64-linux-gnu/libnss_nis-2.18.so 
7f2fa2a61000-7f2fa2a76000 r-xp 00000000 08:01 4985159     /lib/x86_64-linux-gnu/libnsl-2.18.so 
7f2fa2a76000-7f2fa2c75000 ---p 00015000 08:01 4985159     /lib/x86_64-linux-gnu/libnsl-2.18.so 
7f2fa2c75000-7f2fa2c76000 r--p 00014000 08:01 4985159     /lib/x86_64-linux-gnu/libnsl-2.18.so 
7f2fa2c76000-7f2fa2c77000 rw-p 00015000 08:01 4985159     /lib/x86_64-linux-gnu/libnsl-2.18.so 
7f2fa2c77000-7f2fa2c79000 rw-p 00000000 00:00 0 
7f2fa2c79000-7f2fa2c80000 r-xp 00000000 08:01 4985166     /lib/x86_64-linux-gnu/libnss_compat-2.18.so 
7f2fa2c80000-7f2fa2e7f000 ---p 00007000 08:01 4985166     /lib/x86_64-linux-gnu/libnss_compat-2.18.so 
7f2fa2e7f000-7f2fa2e80000 r--p 00006000 08:01 4985166     /lib/x86_64-linux-gnu/libnss_compat-2.18.so 
7f2fa2e80000-7f2fa2e81000 rw-p 00007000 08:01 4985166     /lib/x86_64-linux-gnu/libnss_compat-2.18.so 
7f2fa2e81000-7f2fa2e85000 r-xp 00000000 08:01 4980783     /lib/x86_64-linux-gnu/libattr.so.1.1.0 
7f2fa2e85000-7f2fa3084000 ---p 00004000 08:01 4980783     /lib/x86_64-linux-gnu/libattr.so.1.1.0 
7f2fa3084000-7f2fa3085000 r--p 00003000 08:01 4980783     /lib/x86_64-linux-gnu/libattr.so.1.1.0 
7f2fa3085000-7f2fa3086000 rw-p 00004000 08:01 4980783     /lib/x86_64-linux-gnu/libattr.so.1.1.0 
7f2fa3086000-7f2fa3226000 r-xp 00000000 08:01 4985168     /lib/x86_64-linux-gnu/libc-2.18.so 
7f2fa3226000-7f2fa3425000 ---p 001a0000 08:01 4985168     /lib/x86_64-linux-gnu/libc-2.18.so 
7f2fa3425000-7f2fa3429000 r--p 0019f000 08:01 4985168     /lib/x86_64-linux-gnu/libc-2.18.so 
7f2fa3429000-7f2fa342b000 rw-p 001a3000 08:01 4985168     /lib/x86_64-linux-gnu/libc-2.18.so 
7f2fa342b000-7f2fa342f000 rw-p 00000000 00:00 0 
7f2fa342f000-7f2fa3530000 r-xp 00000000 08:01 4985165     /lib/x86_64-linux-gnu/libm-2.18.so 
7f2fa3530000-7f2fa3730000 ---p 00101000 08:01 4985165     /lib/x86_64-linux-gnu/libm-2.18.so 
7f2fa3730000-7f2fa3731000 r--p 00101000 08:01 4985165     /lib/x86_64-linux-gnu/libm-2.18.so 
7f2fa3731000-7f2fa3732000 rw-p 00102000 08:01 4985165     /lib/x86_64-linux-gnu/libm-2.18.so 
7f2fa3732000-7f2fa3757000 r-xp 00000000 08:01 4980894     /lib/x86_64-linux-gnu/libtinfo.so.5.9 
7f2fa3757000-7f2fa3957000 ---p 00025000 08:01 4980894     /lib/x86_64-linux-gnu/libtinfo.so.5.9 
7f2fa3957000-7f2fa395b000 r--p 00025000 08:01 4980894     /lib/x86_64-linux-gnu/libtinfo.so.5.9 
7f2fa395b000-7f2fa395c000 rw-p 00029000 08:01 4980894     /lib/x86_64-linux-gnu/libtinfo.so.5.9 
7f2fa395c000-7f2fa395f000 r-xp 00000000 08:01 4985160     /lib/x86_64-linux-gnu/libdl-2.18.so 
7f2fa395f000-7f2fa3b5e000 ---p 00003000 08:01 4985160     /lib/x86_64-linux-gnu/libdl-2.18.so 
7f2fa3b5e000-7f2fa3b5f000 r--p 00002000 08:01 4985160     /lib/x86_64-linux-gnu/libdl-2.18.so 
7f2fa3b5f000-7f2fa3b60000 rw-p 00003000 08:01 4985160     /lib/x86_64-linux-gnu/libdl-2.18.so 
7f2fa3b60000-7f2fa3b64000 r-xp 00000000 08:01 4980821     /lib/x86_64-linux-gnu/libcap.so.2.22 
7f2fa3b64000-7f2fa3d63000 ---p 00004000 08:01 4980821     /lib/x86_64-linux-gnu/libcap.so.2.22 
7f2fa3d63000-7f2fa3d64000 rw-p 00003000 08:01 4980821     /lib/x86_64-linux-gnu/libcap.so.2.22 
7f2fa3d64000-7f2fa3d84000 r-xp 00000000 08:01 4985158     /lib/x86_64-linux-gnu/ld-2.18.so 
7f2fa3d85000-7f2fa3d91000 rw-p 00000000 00:00 0 
7f2fa3d91000-7f2fa3f59000 r--p 00000000 08:01 7083454     /usr/lib/locale/locale-archive 
7f2fa3f59000-7f2fa3f5e000 rw-p 00000000 00:00 0 
7f2fa3f60000-7f2fa3f70000 rw-p 00000000 00:00 0 
7f2fa3f72000-7f2fa3f7a000 rw-p 00000000 00:00 0 
7f2fa3f7a000-7f2fa3f81000 r--s 00000000 08:01 7112364     /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache 
7f2fa3f81000-7f2fa3f83000 rw-p 00000000 00:00 0 
7f2fa3f83000-7f2fa3f84000 r--p 0001f000 08:01 4985158     /lib/x86_64-linux-gnu/ld-2.18.so 
7f2fa3f84000-7f2fa3f85000 rw-p 00020000 08:01 4985158     /lib/x86_64-linux-gnu/ld-2.18.so 
7f2fa3f85000-7f2fa3f86000 rw-p 00000000 00:00 0 
7ffff69af000-7ffff69d0000 rw-p 00000000 00:00 0       [stack] 
7ffff69fe000-7ffff6a00000 r-xp 00000000 00:00 0       [vdso] 
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0     [vsyscall] 

Читайте также о ASLR и читать Advanced Linux Programming.

0

Если вы знаете идентификатор процесса:

cat /proc/$pid/status 

Если вы хотите использование внутри процесса:

cat /proc/self/status # or read the file with fopen() or whatnot 

Какой будет что-то вроде:

# cat /proc/7049/status 
Name: bash 
State: S (sleeping) 
Tgid: 7049 
Pid: 7049 
PPid: 7042 
TracerPid:  0 
Uid: 500  500  500  500 
Gid: 500  500  500  500 
Utrace: 0 
FDSize: 256 
Groups: 10 500 
VmPeak: 108524 kB 
VmSize: 108492 kB 
VmLck:   0 kB 
VmHWM:  2080 kB 
VmRSS:  2072 kB 
VmData:  532 kB 
VmStk:  88 kB 
VmExe:  848 kB 
VmLib:  1876 kB 
VmPTE:  60 kB 
VmSwap:  0 kB 
Threads:  1 
SigQ: 0/14888 
SigPnd: 0000000000000000 
ShdPnd: 0000000000000000 
SigBlk: 0000000000010000 
SigIgn: 0000000000384004 
SigCgt: 000000004b813efb 
CapInh: 0000000000000000 
CapPrm: 0000000000000000 
CapEff: 0000000000000000 
CapBnd: ffffffffffffffff 
Cpus_allowed: 1 
Cpus_allowed_list:  0 
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001 
Mems_allowed_list:  0 
voluntary_ctxt_switches:  164 
nonvoluntary_ctxt_switches:  4 

Vm* поля содержат информацию, которую вы ищете.

Примечание: точный формат может отличаться от дистрибутива и дистрибутива.

Или, более просто:

ps up $pid 

Что дает что-то вроде:

# ps up 7049 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
stack  7049 0.0 0.1 108492 2072 pts/0 Ss 20:23 0:00 -bash 
0

Вы можете использовать

ps aux --sort=%mem,%cpu 

Для сортировки всех запущенных процессов их памяти & использования процессора.

Если вы хотите ограничить только процесс, который вы работаете с текущего терминала:

ps v 

Если вы знаете, использование PID:

ps v <pid> 

Пример вывода:

PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND 
36626 pts/3 A  0:00 0 316 408 32768 51 60 0.0 0.0 ps v 

, где

PGIN Количество страниц, вызванных ошибками страницы. Поскольку все операции ввода-вывода классифицируются как ошибки страниц, это в основном мера объема ввода-вывода.

РАЗМЕР Виртуальный размер (в пространстве подкачки) в килобайт секции данных процесса (отображается как SZ другими флагами). Это число равно количеству страниц рабочего сегмента процесса, которые были затронуты раза 4. Если в настоящее время выгружены страницы рабочего сегмента, это число больше, чем количество используемой реальной памяти. SIZE включает страницы в частном сегменте и сегмент данных разделяемой библиотеки процесса.

RSS Размер реальной памяти (резидентный набор) в килобайтах процесса. Это число равно сумме количества рабочих сегментов сегмента сегмента и сегмента сегмента кода в памяти 4. Помните, что страницы сегментов кода распределены между всеми текущими работающими экземплярами программы. Если выполняется 26 ksh процессов, в памяти будет только одна копия любой страницы исполняемой программы ksh, но команда ps сообщит об этом размере сегмента кода как часть RSS каждого экземпляра программы ksh.

TSIZ Размер текста (совместно используемой) изображения. Это размер текстового раздела исполняемого файла. Страницы текстового раздела исполняемой программы вводятся в память только при их касании, то есть разветвленном или загруженном. Этот номер представляет собой только верхнюю границу объема текста, который может быть загружен. Значение TSIZ не отражает фактическое использование памяти. Это значение TSIZ также можно увидеть, выполнив команду dump -ov в отношении исполняемой программы (например, dump -ov/usr/bin/ls).

TRS Размер резидентного набора (реальной памяти) текста. Это число страниц сегмента кода раз 4. Это число преувеличивает использование памяти для программ, из которых выполняется несколько экземпляров. Значение TRS может быть выше значения TSIZ, потому что другие страницы могут быть включены в сегмент кода, например, заголовок XCOFF и раздел загрузчика.

% МЕМ Рассчитано как сумма числа рабочих страниц сегмента сегмента и кода в периоды памяти 4 (то есть, RSS-значение), деленный на размер реальной памяти в использовании, в машине в КБ, раз 100, округляется до ближайшего полного процентного пункта. Это значение пытается передать процент реальной памяти, используемой процессом. К сожалению, как и RSS, он преувеличивает стоимость процесса, который передает текст программы другим процессам. Кроме того, округление до ближайшего процентного пункта приводит к тому, что все процессы в системе имеют значения RSS в размере 0.005 раз реального объема памяти, чтобы иметь% MEM от 0.0.

2

Чтобы получить только один номер памяти использования интереса, попробуйте:

ps -o rss= $pid # resident set in kbytes; e.g., 2461016 
ps -o vsz= $pid # virtual size in kbytes; e.g., 1048 

Для преобразования в МБ (округление до целого, корректировать по мере необходимости), попробовать что-то вроде:

ps -o rss= $pid | awk '{printf "%.0f\n", $1/1024}' # e.g., 1 
+1

'-A' означает« все процессы », не используйте его, если вы хотите« $ pid ». Кроме того, 'ps -o vsz =, rss = $ pid' для обеих строк. – Sammitch

+0

@ Sammitch: Re '-A': спасибо, я обновил свой ответ; ваш многоколоночный подсказку тоже полезен (хотя я намеренно застрял с сообщением об одной фигуре). – mklement0

Смежные вопросы