모든 systemd-slice 멤버의 메모리 사용량 합계가 슬라이스 자체의 메모리 사용량과 같지 않은 이유는 무엇입니까?

모든 systemd-slice 멤버의 메모리 사용량 합계가 슬라이스 자체의 메모리 사용량과 같지 않은 이유는 무엇입니까?

문맥:

uname -srvmpio
Linux 3.10.0-1062.1.1.el7.x86_64 #1 SMP Fri Sep 13 22:55:44 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)

systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN

다음과 같은 슬라이스가 있습니다.

systemctl cat system-mystuff.slice
# /etc/systemd/system/system-mystuff.slice
[Unit]
Description=mystuff resources slice
DefaultDependencies=no
Before=slices.target

[Slice]
MemoryAccounting=yes
MemoryMax=4G
MemoryHigh=3.75G

슬라이스의 멤버는 MemoryAccounting=yes.service 파일에도 있습니다.

내가 달릴 때

systemd-cgtop -n1 -b -m | grep system-mystuff

다음 출력이 표시됩니다.

/system.slice/system-mystuff.slice                                            -      -     2.3G        -        -
/system.slice/system-mystuff.slice/[email protected]                    1      -   246.6M        -        -
/system.slice/system-mystuff.slice/process2.service                           1      -    82.7M        -        -
/system.slice/system-mystuff.slice/[email protected]                    1      -    49.5M        -        -
/system.slice/system-mystuff.slice/process4.service                           2      -     8.6M        -        -
/system.slice/system-mystuff.slice/process5.service                           1      -     8.4M        -        -
/system.slice/system-mystuff.slice/process6.service                           3      -     8.2M        -        -
/system.slice/system-mystuff.slice/process7.service                           1      -     7.3M        -        -
/system.slice/system-mystuff.slice/[email protected]                   1      -     6.1M        -        -
/system.slice/system-mystuff.slice/process9.service                           1      -     6.0M        -        -
/system.slice/system-mystuff.slice/process10.service                          4      -     1.4M        -        -
/system.slice/system-mystuff.slice/process11.service                          2      -     1.1M        -        -
/system.slice/system-mystuff.slice/process12.service                          1      -   620.0K        -        -
/system.slice/system-mystuff.slice/process13.service                          1      -   392.0K        -        -
/system.slice/system-mystuff.slice/process14.service                          1      -   308.0K        -        -
/system.slice/system-mystuff.slice/process15.service                          1      -   260.0K        -        -
/system.slice/system-mystuff.slice/process16.service                          1      -   184.0K        -        -
/system.slice/system-mystuff.slice/process17.service                          1      -   180.0K        -        -
/system.slice/system-mystuff.slice/process18.service                          1      -        -        -        -
/system.slice/system-mystuff.slice/process19.service                          1      -        -        -        -

열을 합산하면 조각의 모든 프로세스가 약 430MB의 메모리를 사용합니다.

내 연구의 일환으로 나는 발견했습니다.https://www.mjmwired.net/kernel/Documentation/cgroups/memory.txt 섹션 5.2 및 5.5에서는 메모리 사용량이 RSS+CACHE(+SWAP)로 계산됨을 나타냅니다.

https://www.mjmwired.net/kernel/Documentation/cgroups/memory.txt#560

확실히 하기 위해 /sys/fs/cgroup/memory/system.slice/system-mystuff.slice 파일 시스템을 반복하고 슬라이스의 각 프로세스에 대한 memory.stat 파일을 살펴보는 스크립트를 작성했습니다. 그런 다음 각 프로세스에 대해 total_rss+total_cache+total_swap을 추가합니다. 이 총계의 합은 대략 430MB와 일치합니다.

그래서 내 질문은 systemd-cgtop2.3GB 수치를 어디서 얻을 수 있느냐는 것입니다.

답변1

메모리는 공유됩니다. glibc와 같은 공유 라이브러리의 복사본을 갖게 되며 많은 사용자는 이를 메모리 사용량의 일부로 계산합니다.

관련 정보