Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать, сколько памяти использует программа, Как узнать, сколько памяти использует пр 
V
    Опции темы
konshyn
Дата 11.11.2013, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Добрый день.
Есть написаннаая программа с кучей new и delete.
Как узнать, сколько выделено памяти в определенный момент, т.е. следить постоянно за ней(или просто видеть, сколько памяти использует процесс)?

Это сообщение отредактировал(а) konshyn - 11.11.2013, 14:10


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
bsa
Дата 11.11.2013, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



консольная программа top чем тебе не подходит?
PM   Вверх
xvr
Дата 11.11.2013, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(konshyn @  11.11.2013,  14:10 Найти цитируемый пост)
Как узнать, сколько выделено памяти в определенный момент,

Открывать и читать разные файлы из /proc/self/:
Цитата

 /proc/[pid]/maps
              A file containing the currently mapped memory regions and their access permissions.
 
              The format is:
 
              address           perms offset  dev   inode   pathname
              08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
              08056000-08058000 rw-p 0000d000 03:0c 64593   /usr/sbin/gpm
              08058000-0805b000 rwxp 00000000 00:00 0
              40000000-40013000 r-xp 00000000 03:0c 4165    /lib/ld-2.2.4.so
              40013000-40015000 rw-p 00012000 03:0c 4165    /lib/ld-2.2.4.so
              4001f000-40135000 r-xp 00000000 03:0c 45494   /lib/libc-2.2.4.so
              40135000-4013e000 rw-p 00115000 03:0c 45494   /lib/libc-2.2.4.so
              4013e000-40142000 rw-p 00000000 00:00 0
              bffff000-c0000000 rwxp 00000000 00:00 0
 
              where "address" is the address space in the process that it occupies, "perms" is a set of permissions:
 
                   r = read
                   w = write
                   x = execute
                   s = shared
                   p = private (copy on write)
 
              "offset"  is  the  offset into the file/whatever, "dev" is the device (major:minor), and "inode" is the inode on that device.  0 indicates
              that no inode is associated with the memory region, as the case would be with BSS (uninitialized data).
 
              Under Linux 2.0 there is no field giving pathname.


Цитата

/proc/[pid]/smaps (since Linux 2.6.14)
              This file shows memory consumption for each of the process's mappings.  For each of mappings there is a series of lines such as  the  fol-
              lowing:
 
                  08048000-080bc000 r-xp 00000000 03:02 13130      /bin/bash
                  Size:               464 kB
                  Rss:                424 kB
                  Shared_Clean:       424 kB
                  Shared_Dirty:         0 kB
                  Private_Clean:        0 kB
                  Private_Dirty:        0 kB
 
              The  first  of  these  lines shows the same information as is displayed for the mapping in /proc/[pid]/maps.  The remaining lines show the
              size of the mapping, the amount of the mapping that is currently resident in RAM, the number of clean and dirty shared pages in  the  map-
              ping, and the number of clean and dirty private pages in the mapping.
 
              This file is only present if the CONFIG_MMU kernel configuration option is enabled.



Немного урезал -

Цитата

 /proc/[pid]/stat
              Status information about the process.  This is used by ps(1).  It is defined in /usr/src/linux/fs/proc/array.c.
 
              The fields, in order, with their proper scanf(3) format specifiers, are:
 
              pid %d      The process ID. 
              comm %s     The filename of the executable, in parentheses.   
              state %c    One  character  from  the string "RSDZTW" 
              ppid %d     The PID of the parent.
              pgrp %d     The process group ID of the process.
              session %d  The session ID of the process.
              tty_nr %d   The controlling terminal of the process.   
              tpgid %d    The ID of the foreground process group of the controlling terminal of the process.
               flags %u (%lu before Linux 2.6.22)   The  kernel flags word of the process.
              minflt %lu  The number of minor faults the process has made...
              cminflt %lu The number of minor faults that the process's waited-for children have made.
              majflt %lu  The number of major faults the process has made ...
              cmajflt %lu The number of major faults that the process's waited-for children have made. 
              utime %lu   Amount of time that this process has been scheduled in user mode, 
              stime %lu   Amount of time that this process has been scheduled in kernel mode
              cutime %ld  Amount of time that this process's waited-for children have been scheduled in user mode
              cstime %ld  Amount of time that this process's waited-for children have been scheduled in kernel mode
              priority %ld  For processes running a real-time scheduling policy 
              nice %ld    The nice value (see setpriority(2)),
              num_threads %ld  Number  of  threads in this process (since Linux 2.6).
              itrealvalue %ld  The time in jiffies before the next SIGALRM is sent to the process due to an interval timer.
              starttime %llu (was %lu before Linux 2.6)  The time in jiffies the process started after system boot.
 
              vsize %lu   Virtual memory size in bytes. 

              rss %ld     Resident  Set Size: number of pages the process has in real memory.  This is just the pages which count towards text, data, or
                          stack space.  This does not include pages which have not been demand-loaded in, or which are swapped out.
 
....


Цитата

       /proc/[pid]/statm
              Provides information about memory usage, measured in pages.  The columns are:
 
                  size       total program size
                             (same as VmSize in /proc/[pid]/status)
                  resident   resident set size
                             (same as VmRSS in /proc/[pid]/status)
                  share      shared pages (from shared mappings)
                  text       text (code)
                  lib        library (unused in Linux 2.6)
                  data       data + stack
                  dt         dirty pages (unused in Linux 2.6)


Цитата

 /proc/[pid]/status
              Provides much of the information in /proc/[pid]/stat and /proc/[pid]/statm in a format that's easier for humans to parse.  Here's an exam-
              ple:
 
                  $ cat /proc/$$/status
                  Name:   bash
                  State:  S (sleeping)
                  Tgid:   3515
                  Pid:    3515
                  PPid:   3452
                  TracerPid:      0
                  Uid:    1000    1000    1000    1000
                  Gid:    100     100     100     100
                  FDSize: 256
                  Groups: 16 33 100
                  VmPeak:     9136 kB
                  VmSize:     7896 kB
                  VmLck:         0 kB
                  VmHWM:      7572 kB
                  VmRSS:      6316 kB
                  VmData:     5224 kB
                  VmStk:        88 kB
                  VmExe:       572 kB
                  VmLib:      1708 kB
                  VmPTE:        20 kB
                  Threads:        1
                  SigQ:   0/3067
                  SigPnd: 0000000000000000
                  ShdPnd: 0000000000000000
                  SigBlk: 0000000000010000
                  SigIgn: 0000000000384004
                  SigCgt: 000000004b813efb
                  CapInh: 0000000000000000
                  CapPrm: 0000000000000000
                  CapEff: 0000000000000000
                  CapBnd: ffffffffffffffff
                  Cpus_allowed:   00000001
                  Cpus_allowed_list:      0
                  Mems_allowed:   1
                  Mems_allowed_list:      0
                  voluntary_ctxt_switches:        150
                  nonvoluntary_ctxt_switches:     545
 

              The fields are as follows:

              * VmPeak: Peak virtual memory size. 
              * VmSize: Virtual memory size.
              * VmLck: Locked memory size.
              * VmHWM: Peak resident set size ("high water mark").
              * VmRSS: Resident set size.
              * VmData, VmStk, VmExe: Size of data, stack, and text segments.
              * VmLib: Shared library code size.
              * VmPTE: Page table entries size (since Linux 2.6.10).


В общем смотри man 5 proc

PM MAIL   Вверх
konshyn
Дата 12.11.2013, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(bsa @ 11.11.2013,  14:13)
консольная программа top чем тебе не подходит?

Подходит, спасибо:)

UPD: Нет, не подходит. Я выделяю 400 млн байт, а в top'e показывает 0% используемой памяти.

Это сообщение отредактировал(а) konshyn - 12.11.2013, 10:02


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
konshyn
Дата 12.11.2013, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(xvr @  11.11.2013,  16:28 Найти цитируемый пост)
Открывать и читать разные файлы из /proc/self/:

а что-нибудь попроще есть?  smile 


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
bsa
Дата 12.11.2013, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(konshyn @  12.11.2013,  09:22 Найти цитируемый пост)
UPD: Нет, не подходит. Я выделяю 400 млн байт, а в top'e показывает 0% используемой памяти.
а ты в этом уверен? Покажи код, которым ты это сделал.
PM   Вверх
xvr
Дата 12.11.2013, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(konshyn @  12.11.2013,  08:22 Найти цитируемый пост)
Я выделяю 400 млн байт, а в top'e показывает 0% используемой памяти.

Выделить мало, ее нужно реально использовать, что бы оно появилось в top

Цитата(konshyn @  12.11.2013,  10:11 Найти цитируемый пост)
а что-нибудь попроще есть?

Нет. Тот же top (равно как и ps) читают из /proc/???

Есть библиотеки - обвертки вокруг /proc/???, собственно на одной из них сидит ps (procps разывается). Но не уверен, что ее использование будет проще, чем прямое чтение из /proc/???  smile 

PM MAIL   Вверх
konshyn
Дата 12.11.2013, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(bsa @  12.11.2013,  13:15 Найти цитируемый пост)
а ты в этом уверен? Покажи код, которым ты это сделал. 

уверен. Но суть в том, что...
вот в чем:
Цитата(xvr @  12.11.2013,  13:16 Найти цитируемый пост)
Выделить мало, ее нужно реально использовать, что бы оно появилось в top

спасибо:)

Цитата(xvr @  12.11.2013,  13:16 Найти цитируемый пост)
Есть библиотеки - обвертки вокруг /proc/???...

в таком случае, top отлично подходит

Цитата(bsa @  12.11.2013,  13:15 Найти цитируемый пост)
Покажи код, которым ты это сделал. 


Код

    int *x;
    x = new int[100000000];

Просто тестировал команду top.
в таком случае top будет выводить 0.0%
а если:
Код

    int *x;
    x = new int[100000000];
    for (int i = 0; i < 100000000; i++)
        x[i] = i;

то уже будет показано, в моем случае(2 Гб) это 19.7%

Это сообщение отредактировал(а) konshyn - 28.11.2013, 12:17


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1408 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.