**Этот вопрос очень подробно освещен здесь.
Как измерить использование памяти приложением или процессом в Linux?
Из статьи блога Understanding memory usage on Linux, ps
не является точным инструментом, который можно использовать для этого.
Почему
ps
является "неправильным".В зависимости от того, как вы на это посмотрите,
ps
не сообщает о реальном использовании памяти процессами. На самом деле он показывает, сколько реальной памяти занял бы каждый процесс, если бы он был единственным запущенным процессом. Конечно, типичная машина Linux имеет несколько десятков процессов, запущенных в любой момент времени, что означает, что числа VSZ и RSS, сообщаемыеps
, почти наверняка неправильные.
С помощью ps
или аналогичных инструментов вы получите только количество страниц памяти, выделенных этим процессом. Это число корректно, но:
не отражает фактический объем памяти, используемый приложением, а только объем памяти, зарезервированный для него
может вводить в заблуждение, если страницы используются совместно, например, несколькими потоками или при использовании динамически подключаемых библиотек
Если вы действительно хотите узнать, какой объем памяти на самом деле использует ваше приложение, вам нужно запустить его в профилировщике. Например, valgrind
может дать вам представление об объеме используемой памяти и, что более важно, о возможных утечках памяти в вашей программе. Инструмент профилировщика кучи в valgrind называется 'massif':
Massif - это профилировщик кучи. Он выполняет подробное профилирование кучи, делая регулярные снимки кучи программы. Он создает график, показывающий использование кучи с течением времени, включая информацию о том, какие части программы отвечают за наибольшее количество выделений памяти. График дополняется текстовым или HTML-файлом, содержащим дополнительную информацию для определения того, где выделяется больше всего памяти. Massif запускает программы примерно в 20 раз медленнее, чем обычно.
Как объясняется в документации valgrind documentation, вам необходимо запустить программу через valgrind:
valgrind --tool=massif <executable> <arguments>
Massif записывает дамп снимков использования памяти (например, massif.out.12345
). Они обеспечивают, (1) временную шкалу использования памяти, (2) для каждого снимка, запись того, где в вашей программе была выделена память.
Отличным графическим инструментом для анализа этих файлов является massif-visualizer. Но я уже нашел ms_print
, простой текстовый инструмент, поставляемый с valgrind, очень полезным.
Для поиска утечек памяти используйте (по умолчанию) инструмент memcheck
из valgrind.
Трудно сказать наверняка, но вот две "близкие" вещи, которые могут помочь.
$ ps aux
даст вам виртуальный размер (VSZ)
Вы также можете получить подробную статистику из файловой системы /proc, перейдя по адресу /proc/$pid/status
.
Наиболее важным является VmSize, который должен быть близок к тому, что дает ps aux
.
/proc/19420$ cat status Имя: firefox Состояние: S (спит) Tgid: 19420 Pid: 19420 PPid: 1 TracerPid: 0 Uid: 1000 1000 1000 1000 Gid: 1000 1000 1000 1000 FDSize: 256 Группы: 4 6 20 24 25 29 30 44 46 107 109 115 124 1000 VmPeak: 222956 кБ VmSize: 212520 kB VmLck: 0 kB VmHWM: 127912 кБ VmRSS: 118768 kB VmData: 170180 kB VmStk: 228 kB VmExe: 28 kB VmLib: 35424 kB VmPTE: 184 кБ Потоки: 8 SigQ: 0/16382 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000020001000 SigCgt: 000000018000442f CapInh: 0000000000000000 CapPrm: 0000000000000000 CapEff: 00000000000000 Cpus_allowed: 03 Mems_allowed: 1 добровольные_ctxt_коммутаторы: 63422 недобровольные_ctxt_switches: 7171
В последних версиях Linux, использовать смапс подсистемы. Например, для процесса с PID, 1234:
cat /proc/1234/smaps
Он скажет вам точно, сколько памяти он использует в то время. Что еще более важно, он будет делить память на частные и общие, поэтому вы можете сказать, сколько памяти ваш экземпляр ** программы, используя, в том числе без общей памяти между несколькими экземплярами программы.
Там нет простой способ, чтобы вычислить это. Но некоторые люди пытались сделать несколько хороших ответов:
Используйте smem, которая является альтернативой ПС, который вычисляет Усс и ПСС в процесс. То, что вы хотите-это, наверное, ПСС.
Усс - уникальный набор размера. Это объем общей памяти, уникальные для этого процесса (думать о нем, как у к уникальный памяти). Это не включает в общую память. Таким образом, это будет под-сообщить объем памяти, используемый процессом, но это полезно, когда вы хотите игнорировать общую память.
ПСС - пропорционально размеру набор. Это то, что вы хотите. Она суммирует уникальной памятью (Усс), вместе с долей общей памятью, разделенной на число процессов обмена, что памяти. Таким образом, он даст вам точное представление о том, сколько физической памяти используется в процессе - с общей памятью действительно представлены как общая. Думать о п для физического память.
Как это сравнивает к RSS как сообщили ПС и другие утилиты:
Обратите внимание: smem также может (опционально) вывод диаграмм, такие как круговые диаграммы и тому подобное. ИМО вы Дон'т нужно ничего из этого. Если вы просто хотите использовать его из командной строки, как вы могли бы использовать ПС-а в, тогда вы не'т нужно установить пакет python-библиотек matplotlib рекомендуемых зависимостей.
ps -eo size,pid,user,command --sort -size | \
awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |\
cut -d "" -f2 | cut -d "-" -f1
0.00 Mb COMMAND
1288.57 Mb /usr/lib/firefox
821.68 Mb /usr/lib/chromium/chromium
762.82 Mb /usr/lib/chromium/chromium
588.36 Mb /usr/sbin/mysqld
547.55 Mb /usr/lib/chromium/chromium
523.92 Mb /usr/lib/tracker/tracker
476.59 Mb /usr/lib/chromium/chromium
446.41 Mb /usr/bin/gnome
421.62 Mb /usr/sbin/libvirtd
405.11 Mb /usr/lib/chromium/chromium
302.60 Mb /usr/lib/chromium/chromium
291.46 Mb /usr/lib/chromium/chromium
284.56 Mb /usr/lib/chromium/chromium
238.93 Mb /usr/lib/tracker/tracker
223.21 Mb /usr/lib/chromium/chromium
197.99 Mb /usr/lib/chromium/chromium
194.07 Mb conky
191.92 Mb /usr/lib/chromium/chromium
190.72 Mb /usr/bin/mongod
169.06 Mb /usr/lib/chromium/chromium
155.11 Mb /usr/bin/gnome
136.02 Mb /usr/lib/chromium/chromium
125.98 Mb /usr/lib/chromium/chromium
103.98 Mb /usr/lib/chromium/chromium
93.22 Mb /usr/lib/tracker/tracker
89.21 Mb /usr/lib/gnome
80.61 Mb /usr/bin/gnome
77.73 Mb /usr/lib/evolution/evolution
76.09 Mb /usr/lib/evolution/evolution
72.21 Mb /usr/lib/gnome
69.40 Mb /usr/lib/evolution/evolution
68.84 Mb nautilus
68.08 Mb zeitgeist
60.97 Mb /usr/lib/tracker/tracker
59.65 Mb /usr/lib/evolution/evolution
57.68 Mb apt
55.23 Mb /usr/lib/gnome
53.61 Mb /usr/lib/evolution/evolution
53.07 Mb /usr/lib/gnome
52.83 Mb /usr/lib/gnome
51.02 Mb /usr/lib/udisks2/udisksd
50.77 Mb /usr/lib/evolution/evolution
50.53 Mb /usr/lib/gnome
50.45 Mb /usr/lib/gvfs/gvfs
50.36 Mb /usr/lib/packagekit/packagekitd
50.14 Mb /usr/lib/gvfs/gvfs
48.95 Mb /usr/bin/Xwayland :1024
46.21 Mb /usr/bin/gnome
42.43 Mb /usr/bin/zeitgeist
42.29 Mb /usr/lib/gnome
41.97 Mb /usr/lib/gnome
41.64 Mb /usr/lib/gvfs/gvfsd
41.63 Mb /usr/lib/gvfs/gvfsd
41.55 Mb /usr/lib/gvfs/gvfsd
41.48 Mb /usr/lib/gvfs/gvfsd
39.87 Mb /usr/bin/python /usr/bin/chrome
37.45 Mb /usr/lib/xorg/Xorg vt2
36.62 Mb /usr/sbin/NetworkManager
35.63 Mb /usr/lib/caribou/caribou
34.79 Mb /usr/lib/tracker/tracker
33.88 Mb /usr/sbin/ModemManager
33.77 Mb /usr/lib/gnome
33.61 Mb /usr/lib/upower/upowerd
33.53 Mb /usr/sbin/gdm3
33.37 Mb /usr/lib/gvfs/gvfsd
33.36 Mb /usr/lib/gvfs/gvfs
33.23 Mb /usr/lib/gvfs/gvfs
33.15 Mb /usr/lib/at
33.15 Mb /usr/lib/at
30.03 Mb /usr/lib/colord/colord
29.62 Mb /usr/lib/apt/methods/https
28.06 Mb /usr/lib/zeitgeist/zeitgeist
27.29 Mb /usr/lib/policykit
25.55 Mb /usr/lib/gvfs/gvfs
25.55 Mb /usr/lib/gvfs/gvfs
25.23 Mb /usr/lib/accountsservice/accounts
25.18 Mb /usr/lib/gvfs/gvfsd
25.15 Mb /usr/lib/gvfs/gvfs
25.15 Mb /usr/lib/gvfs/gvfs
25.12 Mb /usr/lib/gvfs/gvfs
25.10 Mb /usr/lib/gnome
25.10 Mb /usr/lib/gnome
25.07 Mb /usr/lib/gvfs/gvfsd
24.99 Mb /usr/lib/gvfs/gvfs
23.26 Mb /usr/lib/chromium/chromium
22.09 Mb /usr/bin/pulseaudio
19.01 Mb /usr/bin/pulseaudio
18.62 Mb (sd
18.46 Mb (sd
18.30 Mb /sbin/init
18.17 Mb /usr/sbin/rsyslogd
17.50 Mb gdm
17.42 Mb gdm
17.09 Mb /usr/lib/dconf/dconf
17.09 Mb /usr/lib/at
17.06 Mb /usr/lib/gvfs/gvfsd
16.98 Mb /usr/lib/at
16.91 Mb /usr/lib/gdm3/gdm
16.86 Mb /usr/lib/gvfs/gvfsd
16.86 Mb /usr/lib/gdm3/gdm
16.85 Mb /usr/lib/dconf/dconf
16.85 Mb /usr/lib/dconf/dconf
16.73 Mb /usr/lib/rtkit/rtkit
16.69 Mb /lib/systemd/systemd
13.13 Mb /usr/lib/chromium/chromium
13.13 Mb /usr/lib/chromium/chromium
10.92 Mb anydesk
8.54 Mb /sbin/lvmetad
7.43 Mb /usr/sbin/apache2
6.82 Mb /usr/sbin/apache2
6.77 Mb /usr/sbin/apache2
6.73 Mb /usr/sbin/apache2
6.66 Mb /usr/sbin/apache2
6.64 Mb /usr/sbin/apache2
6.63 Mb /usr/sbin/apache2
6.62 Mb /usr/sbin/apache2
6.51 Mb /usr/sbin/apache2
6.25 Mb /usr/sbin/apache2
6.22 Mb /usr/sbin/apache2
3.92 Mb bash
3.14 Mb bash
2.97 Mb bash
2.95 Mb bash
2.93 Mb bash
2.91 Mb bash
2.86 Mb bash
2.86 Mb bash
2.86 Mb bash
2.84 Mb bash
2.84 Mb bash
2.45 Mb /lib/systemd/systemd
2.30 Mb (sd
2.28 Mb /usr/bin/dbus
1.84 Mb /usr/bin/dbus
1.46 Mb ps
1.21 Mb openvpn hackthebox.ovpn
1.16 Mb /sbin/dhclient
1.16 Mb /sbin/dhclient
1.09 Mb /lib/systemd/systemd
0.98 Mb /sbin/mount.ntfs /dev/sda3 /media/n0bit4/Data
0.97 Mb /lib/systemd/systemd
0.96 Mb /lib/systemd/systemd
0.89 Mb /usr/sbin/smartd
0.77 Mb /usr/bin/dbus
0.76 Mb su
0.76 Mb su
0.76 Mb su
0.76 Mb su
0.76 Mb su
0.76 Mb su
0.75 Mb sudo su
0.75 Mb sudo su
0.75 Mb sudo su
0.75 Mb sudo su
0.75 Mb sudo su
0.75 Mb sudo su
0.74 Mb /usr/bin/dbus
0.71 Mb /usr/lib/apt/methods/http
0.68 Mb /bin/bash /usr/bin/mysqld_safe
0.68 Mb /sbin/wpa_supplicant
0.66 Mb /usr/bin/dbus
0.61 Mb /lib/systemd/systemd
0.54 Mb /usr/bin/dbus
0.46 Mb /usr/sbin/cron
0.45 Mb /usr/sbin/irqbalance
0.43 Mb logger
0.41 Mb awk { hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }
0.40 Mb /usr/bin/ssh
0.34 Mb /usr/lib/chromium/chrome
0.32 Mb cut
0.32 Mb cut
0.00 Mb [kthreadd]
0.00 Mb [ksoftirqd/0]
0.00 Mb [kworker/0:0H]
0.00 Mb [rcu_sched]
0.00 Mb [rcu_bh]
0.00 Mb [migration/0]
0.00 Mb [lru
0.00 Mb [watchdog/0]
0.00 Mb [cpuhp/0]
0.00 Mb [cpuhp/1]
0.00 Mb [watchdog/1]
0.00 Mb [migration/1]
0.00 Mb [ksoftirqd/1]
0.00 Mb [kworker/1:0H]
0.00 Mb [cpuhp/2]
0.00 Mb [watchdog/2]
0.00 Mb [migration/2]
0.00 Mb [ksoftirqd/2]
0.00 Mb [kworker/2:0H]
0.00 Mb [cpuhp/3]
0.00 Mb [watchdog/3]
0.00 Mb [migration/3]
0.00 Mb [ksoftirqd/3]
0.00 Mb [kworker/3:0H]
0.00 Mb [kdevtmpfs]
0.00 Mb [netns]
0.00 Mb [khungtaskd]
0.00 Mb [oom_reaper]
0.00 Mb [writeback]
0.00 Mb [kcompactd0]
0.00 Mb [ksmd]
0.00 Mb [khugepaged]
0.00 Mb [crypto]
0.00 Mb [kintegrityd]
0.00 Mb [bioset]
0.00 Mb [kblockd]
0.00 Mb [devfreq_wq]
0.00 Mb [watchdogd]
0.00 Mb [kswapd0]
0.00 Mb [vmstat]
0.00 Mb [kthrotld]
0.00 Mb [ipv6_addrconf]
0.00 Mb [acpi_thermal_pm]
0.00 Mb [ata_sff]
0.00 Mb [scsi_eh_0]
0.00 Mb [scsi_tmf_0]
0.00 Mb [scsi_eh_1]
0.00 Mb [scsi_tmf_1]
0.00 Mb [scsi_eh_2]
0.00 Mb [scsi_tmf_2]
0.00 Mb [scsi_eh_3]
0.00 Mb [scsi_tmf_3]
0.00 Mb [scsi_eh_4]
0.00 Mb [scsi_tmf_4]
0.00 Mb [scsi_eh_5]
0.00 Mb [scsi_tmf_5]
0.00 Mb [bioset]
0.00 Mb [kworker/1:1H]
0.00 Mb [kworker/3:1H]
0.00 Mb [kworker/0:1H]
0.00 Mb [kdmflush]
0.00 Mb [bioset]
0.00 Mb [kdmflush]
0.00 Mb [bioset]
0.00 Mb [jbd2/sda5
0.00 Mb [ext4
0.00 Mb [kworker/2:1H]
0.00 Mb [kauditd]
0.00 Mb [bioset]
0.00 Mb [drbd
0.00 Mb [irq/27
0.00 Mb [i915/signal:0]
0.00 Mb [i915/signal:1]
0.00 Mb [i915/signal:2]
0.00 Mb [ttm_swap]
0.00 Mb [cfg80211]
0.00 Mb [kworker/u17:0]
0.00 Mb [hci0]
0.00 Mb [hci0]
0.00 Mb [kworker/u17:1]
0.00 Mb [iprt
0.00 Mb [iprt
0.00 Mb [kworker/1:0]
0.00 Mb [kworker/3:0]
0.00 Mb [kworker/0:0]
0.00 Mb [kworker/2:0]
0.00 Mb [kworker/u16:0]
0.00 Mb [kworker/u16:2]
0.00 Mb [kworker/3:2]
0.00 Mb [kworker/2:1]
0.00 Mb [kworker/1:2]
0.00 Mb [kworker/0:2]
0.00 Mb [kworker/2:2]
0.00 Mb [kworker/0:1]
0.00 Mb [scsi_eh_6]
0.00 Mb [scsi_tmf_6]
0.00 Mb [usb
0.00 Mb [bioset]
0.00 Mb [kworker/3:1]
0.00 Mb [kworker/u16:1]
Насчет "времени"?
Не Баш встроенные время
, но вы можете найти с это время
, например /usr/Бен/время
Здесь'ы что в нее входит, на простые команды ls
:
$ /usr/bin/time --verbose ls
(...)
Command being timed: "ls"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 2372
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 1
Minor (reclaiming a frame) page faults: 121
Voluntary context switches: 2
Involuntary context switches: 9
Swaps: 0
File system inputs: 256
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
Это отличное резюме инструменты и проблемы: ссылка archive.org
Я'МР цитировать его, тем более, что разработчики будут на самом деле читать его.
если вы хотите, чтобы анализировать использование памяти всей системы или тщательно анализировать использование памяти из одного приложения (а не только его использование кучи), использовать exmap. В целом анализ системы, находить процессы с наибольшим эффективного использования, они занимают наибольшее количество памяти на практике, найти процессы с наибольшей загрузкой с возможностью записи, они создают большинство данных (и поэтому, возможно, утечка или очень неэффективными в их данных). Выберите такие приложения и анализировать его сопоставления во втором представлений. См. раздел exmap для более подробной информации. Также использовать xrestop для проверки высокая загрузка х ресурсов, особенно если процесс X-сервера занимает много памяти. См. раздел xrestop для деталей.
если вы хотите обнаружить утечки, использовать отчет или может kmtrace.
если вы хотите, чтобы анализировать кучи (malloc и т. д.) использование приложение, либо запустить его в цепью утилит средство определения или с kmtrace, профиль приложения и поиск функции дереве вызовов для больших ассигнований. Увидеть их разделов для более подробной информации.
Кроме решений, перечисленных в твои ответы, вы можете использовать Linux команда "ТОП" У; он обеспечивает динамичную режиме реального времени вид на работающей системе, это дает нагрузку на процессор и память, за всю систему вместе с для каждой программы, в процентах:
top
для фильтрации программа пид:
top -p <PID>
для фильтрации по имени программы:
top | grep <PROCESS NAME>
на "сверху" и обеспечивает также некоторые поля, такие как:
Вирт -- виртуальные изображения (КБ) :общее количество виртуальной памяти, используемой задач
РЭС -- резидентный размер (КБ): не поменялись физической памяти задачи использованы ; рез = код + данные.
Данные-данные+размер стека (КБ): объем физической памяти, посвященных другим, чем исполняемый код, также известный как 'житель набор данных' размер или ДРС.
ШР -- общая мэм размер (КБ): объем общей памяти, используемой задачи. Оно отражает память, которая потенциально может быть использована совместно с другими процессами.
Ссылка здесь.
Там isn'т однозначного ответа на это, потому что вы можете'т точно указать точно объем памяти, используемой процессом. Большинство процессов при использовании Linux разделяемые библиотеки. Например, позвольте'говорят, что вы хотите, чтобы рассчитать использование памяти для 'ЛС' процесс. Вы посчитайте только память, используемая исполняемый 'ЛС' ( если можно выделить) ? Как насчет библиотеки libc? Или все эти другие библиотеки, необходимые для запуска 'ЛС'?
linux-gate.so.1 => (0x00ccb000)
librt.so.1 => /lib/librt.so.1 (0x06bc7000)
libacl.so.1 => /lib/libacl.so.1 (0x00230000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00162000)
libc.so.6 => /lib/libc.so.6 (0x00b40000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00cb4000)
/lib/ld-linux.so.2 (0x00b1d000)
libattr.so.1 => /lib/libattr.so.1 (0x00229000)
libdl.so.2 => /lib/libdl.so.2 (0x00cae000)
libsepol.so.1 => /lib/libsepol.so.1 (0x0011a000)
Можно утверждать, что они совместно с другими процессами, но 'ЛС' могу'т быть запущен на системе без их загрузкой.
Также, если вам нужно знать, сколько памяти процесс нужен для того, чтобы сделать планирование мощности, нужно подсчитать, сколько каждый дополнительный экземпляр процесса использует. Я думаю, что в /proc/ПИД/статус могут дать вам достаточно информации из памяти за один раз. С другой стороны, Valgrind будет дать вам лучший профиль использования памяти в течение всей жизни программы
Если код на C или C++ вы могли бы использовать вызов getrusage ()
, который возвращает вам различные статистические данные о памяти и использование времени процесса.
Не все платформы поддерживают это, хотя и возвращает 0 значения для памяти-использовать параметры.
Вместо этого, вы можете взглянуть на виртуальный файл, созданный в в/proc/[PID процесса]/статьм
(где [пид]
заменяется идентификатором процесса. Вы можете получить это от getpid()`).
Этот файл будет выглядеть как текстовый файл с 7 числа. Вы, скорее всего, интересует первый (Все использовать памяти) и шестой (использование памяти) числами в этом файле.
Отчет может показать подробная информация, но это тормозит цель применения значительно, и большую часть времени он изменяет поведение приложения. Exmap то, что я ничего'т еще не знаю, но похоже, что вам нужен ядра модуль для того чтобы получить информацию, которая может быть препятствием.
Я предполагаю, что каждый хочет знать, нажми на "Памяти" это следующие... В Linux, объем физической памяти, один процесс может использовать условно можно разделить на следующие категории.
М. анонимный отображаемой памяти
.P частные
.д грязное == Танос/mmapped кучи и стека выделено и написано памяти
.с чистой == Танос/mmapped кучи и стека, как только выделено, написано, затем освободили, но еще не восстановлена
.с общей
.д грязное == Танос/mmaped кучи может сделать копирование при записи и общая среди процессов (отредактировано)
.с чистой == Танос/mmaped кучи может сделать копию при записи и общая среди процессов (отредактировано)
М. Н имени отображаемой памяти
.P частные
.д грязное == файл mmapped написан собственной памяти
.с чистой == сопоставлена программа/текст библиотека частная сопоставляется
.с общей
.д грязное == файл mmapped написано общая память
.с чистой == отображенный текст библиотека общая сопоставляется
Коммунальные включены в Android под названием showmap весьма полезно
virtual shared shared private private
size RSS PSS clean dirty clean dirty object
-------- -------- -------- -------- -------- -------- -------- ------------------------------
4 0 0 0 0 0 0 0:00 0 [vsyscall]
4 4 0 4 0 0 0 [vdso]
88 28 28 0 0 4 24 [stack]
12 12 12 0 0 0 12 7909 /lib/ld-2.11.1.so
12 4 4 0 0 0 4 89529 /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
28 0 0 0 0 0 0 86661 /usr/lib/gconv/gconv-modules.cache
4 0 0 0 0 0 0 87660 /usr/lib/locale/en_US.utf8/LC_MEASUREMENT
4 0 0 0 0 0 0 89528 /usr/lib/locale/en_US.utf8/LC_TELEPHONE
4 0 0 0 0 0 0 89527 /usr/lib/locale/en_US.utf8/LC_ADDRESS
4 0 0 0 0 0 0 87717 /usr/lib/locale/en_US.utf8/LC_NAME
4 0 0 0 0 0 0 87873 /usr/lib/locale/en_US.utf8/LC_PAPER
4 0 0 0 0 0 0 13879 /usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES
4 0 0 0 0 0 0 89526 /usr/lib/locale/en_US.utf8/LC_MONETARY
4 0 0 0 0 0 0 89525 /usr/lib/locale/en_US.utf8/LC_TIME
4 0 0 0 0 0 0 11378 /usr/lib/locale/en_US.utf8/LC_NUMERIC
1156 8 8 0 0 4 4 11372 /usr/lib/locale/en_US.utf8/LC_COLLATE
252 0 0 0 0 0 0 11321 /usr/lib/locale/en_US.utf8/LC_CTYPE
128 52 1 52 0 0 0 7909 /lib/ld-2.11.1.so
2316 32 11 24 0 0 8 7986 /lib/libncurses.so.5.7
2064 8 4 4 0 0 4 7947 /lib/libdl-2.11.1.so
3596 472 46 440 0 4 28 7933 /lib/libc-2.11.1.so
2084 4 0 4 0 0 0 7995 /lib/libnss_compat-2.11.1.so
2152 4 0 4 0 0 0 7993 /lib/libnsl-2.11.1.so
2092 0 0 0 0 0 0 8009 /lib/libnss_nis-2.11.1.so
2100 0 0 0 0 0 0 7999 /lib/libnss_files-2.11.1.so
3752 2736 2736 0 0 864 1872 [heap]
24 24 24 0 0 0 24 [anon]
916 616 131 584 0 0 32 /bin/bash
-------- -------- -------- -------- -------- -------- -------- ------------------------------
22816 4004 3005 1116 0 876 2012 TOTAL
Я'м, используя при
; это's очень хорошая консольная программа похожа на Диспетчер задач Windows.
Valgrind не удивительно, если у вас есть время, чтобы запустить его. `с Valgrind --инструмент=массив-это правильное решение.
Однако, я'м начинаю запускать больше примеров, и с помощью Valgrind является не практичным. Есть ли способ, чтобы сказать максимальное использование памяти (по модулю размера страницы и общих страниц) программы?
На реальной системе Unix, /usr/Бен/время -в работах
. На Linux, однако это вовсе не работать.
Более трех способов:
ПС ОКС --вроде pmem
Он сортирует выход %мэм
.ПС вход AUX | awk и#39;{печать $2, $4, $11}' | сортировка -k2r | руководитель -Н 15
Сортировка с помощью труб.верх -
Она начинается сверху сортировка по % "мэм"
(Взято из здесь)
#!/bin/ksh
#
# Returns total memory used by process $1 in kb.
#
# See /proc/NNNN/smaps if you want to do something
# more interesting.
#
IFS=$'\n'
for line in $(</proc/$1/smaps)
do
[[ $line =~ ^Size:\s+(\S+) ]] && ((kb += ${.sh.match[1]}))
done
print $kb
Хороший тест на более "ьquot реальном мире&; способ использования: откройте приложение, а затем запустить vmstat с -С
и проверить на "активная память" Статистика. Закройте приложение, подождите несколько секунд и запустите vmstat с -С
снова. Однако много активной памяти была освобождена была, видимо, в использовании приложение.
Если процесс не использует слишком много памяти (либо потому, что вы ожидаете, чтобы это было дело, или некоторые другие команды имеют начальный уровень), и этот процесс может выдержать быть остановлен в течение короткого периода времени, вы можете попытаться использовать gcore команды.
gcore <pid>
Проверьте размер созданного файла Core, чтобы получить хорошую идею того, сколько памяти определенного процесса использует.
Это выиграл'т работать слишком хорошо, если процесс использует сотни мегов или гигов, в качестве основного поколения может занять несколько секунд или минут должен быть создан в зависимости от производительности ввода/вывода. Во время создания процесс остановлен (или "замороженные" В) для предотвращения изменения памяти. Так что будьте осторожны.
Также убедитесь, что точка монтирования, где ядро создается много дискового пространства, и что система не будет реагировать негативно на основной файл создается в том каталоге.
Я использую Арч Линукс и там's этот замечательный пакет под названием ps_mem
ps_mem -p <pid>
Пример Вывода
$ ps_mem -S -p $(pgrep firefox)
Private + Shared = RAM used Swap used Program
355.0 MiB + 38.7 MiB = 393.7 MiB 35.9 MiB firefox
---------------------------------------------
393.7 MiB 35.9 MiB
=============================================