ասք հիշողություն հաշվելու մասին

փաստորեն, ժամանակակից օպերացիոն համակարգերում հստակ հիշողության օգտագործումը ըստ(պեր) պրոցեսի իմանալն անհնար է։

Նախ, ո՞րն է պրոցեսի օգտագործած հիշողությունը։ Հաշվե՞լ թե չհաշվել բեռնված գրադարանները։ Իսկ նրանց բեռնվածները՞։

Հաշվե՞լ թե չհաշվել քեշը։

Իսկ այն հիշողությունը որ պրոցեսը արդեն ազատել է, բայց ՕՀ-ը նա ֆսյակի պահում է, ու իրականում չի ազատել՞։

Երբ կիրառում ենք 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 դաշտի տվյալները։

Ավելի լավ պատկերացում ստանալու համար օգտագործված հիշողության մասին նպատակահարմար է օգտագործել պրոֆայլեր։ Ասենք, վալգրինդ, որը բացի դրանից լիքերը ցույց կտա։

ու տենց

պիտակներ՝ իմանալը միշտ ավելի լավ է քան չիմանալը  յիշողութիւն  տեքնոլոգիաներ  տեղեկատուական տեքնոլոգիաներ