Как VmRSS и резидентный размер набора совпадают?

Я анализирую данные из /proc/[pid]/statm чтобы получить представление об использовании памяти определенного процесса. man proc утверждает, что резидентов установлена в размере(измеряется в "страницах") совпадает с VmRSS (КБ??) in /proc/[pid]/status. Поскольку они имеют разные значения, я хотел бы понять связь между этими значениями. Есть ли что-то вроде фактора, который я могу прочитать где-то в /proc (Я думал о VmPTE, но его sth. еще...)? Какой из них я должен проанализировать, чтобы получить размер используемой памяти для определенный процесс?

#ex 1782 = firefox

~$ cat /proc/1782/statm
  224621 46703 9317 11 0 98637 0
#          --- resident set size

~$ cat /proc/1782/status | grep Vm
  VmPeak:     935584 kB
  VmSize:     898484 kB
  VmLck:           0 kB
  VmHWM:      257608 kB
  VmRSS:      186812 kB
  VmData:     394328 kB
  VmStk:         220 kB
  VmExe:          44 kB
  VmLib:       61544 kB
  VmPTE:        1224 kB
  VmSwap:          0 kB

3 ответов


Я понимаю, что VM-это объем виртуальной памяти, а RSS-это то, сколько его резидентов в памяти. Итак,

виртуальная память = часть в физической памяти + часть на диске

часть в физической памяти-RSS. Таким образом, VSS должен быть больше, чем RSS. Если они близки к равным, это означает, что ваш процесс удобно сидит в памяти. Если VSS намного больше, это означает, что недостаточно памяти, и ее части должны быть заменены на диск (т. е. о конкурирующем процессе и т. д.).

в моей системе я могу сделать "man proc" , и в нем перечислены следующие:

          * VmPeak: Peak virtual memory size.

          * VmSize: Virtual memory size.

          * VmLck: Locked memory size (see mlock(3)).

          * VmHWM: Peak resident set size ("high water mark").

          * VmRSS: Resident set size.

          * VmData, VmStk, VmExe: Size of data, stack, and text segments.

Если вы хотите сообщить о пиковом использовании памяти, то вам, вероятно, нужна виртуальная память, которая выглядит как VmPeak.

надеюсь, что это помогает!


значение RSS /proc/<pid>/stat - количество страниц, тогда как значение VmRSS /proc/<pid>/status в КБ.

в вашем случае 46703 * 4kB (размер страницы) = 186812 КБ.


страница для proc государств, следующих в statm контекст

/proc/[pid]/statm  
 Provides information about memory usage, measured in pages.  The columns are:  

  size       (1) total program size  
             (same as VmSize in /proc/[pid]/status)  
  resident   (2) resident set size  
             (same as VmRSS in /proc/[pid]/status)  
  share      (3) shared pages (i.e., backed by a file)  
  text       (4) text (code)  
  lib        (5) library (unused in Linux 2.6)  
  data       (6) data + stack  
  dt         (7) dirty pages (unused in Linux 2.6)  

но чего он не может сказать, так это то, что size и resident выражается в количестве страниц.

~$ cat /proc/1782/statm
  224621 46703 9317 11 0 98637 0
#          \--- resident set size

таким образом, 46703 размер резидентного набора выражается в количестве страниц и 224621 - это размер виртуальной памяти, выраженный в количестве страниц.

теперь, чтобы получить их в КБ, умножьте их на размер страницы. Вы можете получить размер страницы с или