փաստորեն, ժամանակակից օպերացիոն համակարգերում հստակ հիշողության օգտագործումը ըստ(պեր) պրոցեսի իմանալն անհնար է։
Նախ, ո՞րն է պրոցեսի օգտագործած հիշողությունը։ Հաշվե՞լ թե չհաշվել բեռնված գրադարանները։ Իսկ նրանց բեռնվածները՞։
Հաշվե՞լ թե չհաշվել քեշը։
Իսկ այն հիշողությունը որ պրոցեսը արդեն ազատել է, բայց ՕՀ-ը նա ֆսյակի պահում է, ու իրականում չի ազատել՞։
Երբ կիրառում ենք ps, top, ու նման գործիքներ, ստանում ենք պրոցեսի կողմից ալոքած հիշողության էջերի թիվը։
Ու դա չի արտացոլում ծրագրի օգտագործված հիշողության իրական չափը։
Ավելի, կարող է մոլորեցնել, երբ էջերը շեյրդ են, ասենք մի քանի թրեդի մեջ, կամ դինամիկ գրադարանների դեպքում։
Ու զարմանալի չէ որ տարբեր գործիքներ տարբեր ձեւ են հաշվում օգտագործված հիշողությունը։
Ասենք, gtop-ի, գրաֆիկական top-ի ցուցմունքները տարբերվում են կոնսոլ top-ի ցուցմունքներից։
Համեմատաբար «ճշգրիտ» տեղեկատվություն ստանում ենք պրոցից՝
$ cat /proc/9223/status
Name: chrome
State: S (sleeping)
Tgid: 9223
Pid: 9223
PPid: 4090
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 1068 1068 1068 1068
FDSize: 64
Groups: 10 18 27 250 1062 1068
VmPeak: 1042632 kB
VmSize: 1039616 kB
VmLck: 0 kB
VmHWM: 47524 kB
VmRSS: 35276 kB
VmData: 650796 kB
VmStk: 136 kB
VmExe: 40784 kB
VmLib: 52148 kB
VmPTE: 580 kB
VmSwap: 11292 kB
Threads: 3
SigQ: 1/30572
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000004001002
SigCgt: 0000000180010000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed: ff
Cpus_allowed_list: 0-7
Mems_allowed: 00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 4755
nonvoluntary_ctxt_switches: 761
Ու ասենք top-ը ցույց է տալիս հենց VmSize դաշտի տվյալները։
Ավելի լավ պատկերացում ստանալու համար օգտագործված հիշողության մասին նպատակահարմար է օգտագործել պրոֆայլեր։ Ասենք, վալգրինդ, որը բացի դրանից լիքերը ցույց կտա։
ու տենց