프로그램이 종료되려고 할 때 /proc/pid/status의 메모리 사용량 정보가 손실됩니다.

프로그램이 종료되려고 할 때 /proc/pid/status의 메모리 사용량 정보가 손실됩니다.

내 프로그램의 메모리 사용량을 추적하기 위해 0.01초마다 /proc/pid/status를 기록하고 여기에서 메모리 사용량을 추출하는 스크립트를 작성했습니다. 대부분의 기록을 확인해 보니 별 문제가 없는데, 프로그램이 종료되려고 할 때(약 0.05초 정도) 마지막 몇 기록에서 메모리 사용량과 관련된 데이터가 사라져 버립니다.

이것은 5를 제외한 마지막 기록이며 모든 것이 정상입니다.

Name:   problem
Umask:  0022
State:  R (running)
Tgid:   1910
Ngid:   0
Pid:    1910
PPid:   1909
TracerPid:  0
Uid:    1001    1001    1001    1001
Gid:    1001    1001    1001    1001
FDSize: 64
Groups: 1001 
NStgid: 1910
NSpid:  1910
NSpgid: 1909
NSsid:  1909
VmPeak:  3124988 kB
VmSize:  3124988 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:   3122016 kB
VmRSS:   3122016 kB
RssAnon:     3118940 kB
RssFile:        3076 kB
RssShmem:          0 kB
VmData:  3119124 kB
VmStk:       132 kB
VmExe:         8 kB
VmLib:      3104 kB
VmPTE:      6156 kB
VmSwap:        0 kB
HugetlbPages:          0 kB
CoreDumping:    0
Threads:    1
SigQ:   0/62912
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
NoNewPrivs: 0
Seccomp:    0
Speculation_Store_Bypass:   vulnerable
Cpus_allowed:   fff
Cpus_allowed_list:  0-11
Mems_allowed:   1
Mems_allowed_list:  0
voluntary_ctxt_switches:    0
nonvoluntary_ctxt_switches: 5

이것은 메모리 사용량 관련 데이터가 사라진 4를 제외한 마지막 기록입니다.

Name:   problem
Umask:  0022
State:  R (running)
Tgid:   1910
Ngid:   0
Pid:    1910
PPid:   1909
TracerPid:  0
Uid:    1001    1001    1001    1001
Gid:    1001    1001    1001    1001
FDSize: 64
Groups: 1001 
NStgid: 1910
NSpid:  1910
NSpgid: 1909
NSsid:  1909
Threads:    1
SigQ:   0/62912
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
NoNewPrivs: 0
Seccomp:    0
Speculation_Store_Bypass:   vulnerable
Cpus_allowed:   fff
Cpus_allowed_list:  0-11
Mems_allowed:   1
Mems_allowed_list:  0
voluntary_ctxt_switches:    0
nonvoluntary_ctxt_switches: 5

왜 이런 일이 발생하는지, 프로그램이 종료되려고 할 때 메모리 사용량 데이터를 어떻게 수집할 수 있는지 알고 싶습니다.

답변1

마지막으로 기록된 메모리 정보프로그램 종료 전 마지막 메모리 사용량 데이터입니다. 언제프로그램 종료, 커널에서 상대적으로 긴 프로세스를 거치며 끝나기 전에 "오래" 메모리 계산을 중지합니다. 이 일이 발생한 후에도 프로세스가 완전히 사라지기 전에 거쳐야 할 정리 단계가 아직 많이 남아 있지만 일단 그런 일이 발생하면;/proc/.../status더 이상 메모리 정보가 표시되지 않습니다.

관련 정보