Цель: доказать, что совместно используемые библиотеки в контейнерах Docker совместно используют память.
Я пытался читать данные памяти, используя pmap -X "pid", который дает полностью расширенный обзор. Настройка - довольно простая программа, которая работает на бесконечном l oop и в этом l oop использует библиотеку GSL для вычисления значения. Я совершенно невежествен, когда речь заходит о терминологии памяти, и вижу несколько противоречивых утверждений при просмотре нескольких ответов.
Предположение состоит в том, что два контейнера, использующие одни и те же общие библиотеки, будут совместно использовать это в памяти. Я использую docker
Server Version: 18.09.7
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: false
При запуске одного контейнера это вывод pmap -X pid возвращает
29537: ./a.out
Address Perm Offset Device Inode Size Rss Pss Referenced Anonymous Shared_Hugetlb Private_Hugetlb Swap SwapPss Locked Mapping
00400000 r-xp 00000000 08:01 2070672 4 4 4 4 0 0 0 0 0 0 a.out
00600000 r--p 00000000 08:01 2070672 4 4 4 4 4 0 0 0 0 0 a.out
00601000 rw-p 00001000 08:01 2070672 4 4 4 4 4 0 0 0 0 0 a.out
7f1733f16000 r-xp 00000000 08:01 1794991 1044 244 244 240 0 0 0 0 0 0 libm-2.19.so
7f173401b000 ---p 00105000 08:01 1794991 2044 0 0 0 0 0 0 0 0 0 libm-2.19.so
7f173421a000 r--p 00104000 08:01 1794991 4 4 4 4 4 0 0 0 0 0 libm-2.19.so
7f173421b000 rw-p 00105000 08:01 1794991 4 4 4 4 4 0 0 0 0 0 libm-2.19.so
7f173421c000 r-xp 00000000 08:01 1794953 1768 868 462 820 0 0 0 0 0 0 libc-2.19.so
7f17343d6000 ---p 001ba000 08:01 1794953 2048 0 0 0 0 0 0 0 0 0 libc-2.19.so
7f17345d6000 r--p 001ba000 08:01 1794953 16 16 16 16 16 0 0 0 0 0 libc-2.19.so
7f17345da000 rw-p 001be000 08:01 1794953 8 8 8 8 8 0 0 0 0 0 libc-2.19.so
7f17345dc000 rw-p 00000000 00:00 0 20 12 12 12 12 0 0 0 0 0
7f17345e1000 r-xp 00000000 08:01 2064911 240 44 44 40 0 0 0 0 0 0 libgslcblas.so.0.0.0
7f173461d000 ---p 0003c000 08:01 2064911 2044 0 0 0 0 0 0 0 0 0 libgslcblas.so.0.0.0
7f173481c000 r--p 0003b000 08:01 2064911 4 4 4 4 4 0 0 0 0 0 libgslcblas.so.0.0.0
7f173481d000 rw-p 0003c000 08:01 2064911 4 4 4 4 4 0 0 0 0 0 libgslcblas.so.0.0.0
7f173481e000 r-xp 00000000 08:01 2064906 2372 404 404 400 0 0 0 0 0 0 libgsl.so.19.3.0
7f1734a6f000 ---p 00251000 08:01 2064906 2048 0 0 0 0 0 0 0 0 0 libgsl.so.19.3.0
7f1734c6f000 r--p 00251000 08:01 2064906 12 12 12 12 12 0 0 0 0 0 libgsl.so.19.3.0
7f1734c72000 rw-p 00254000 08:01 2064906 68 68 68 68 52 0 0 0 0 0 libgsl.so.19.3.0
7f1734c83000 r-xp 00000000 08:01 1794933 140 136 70 136 0 0 0 0 0 0 ld-2.19.so
7f1734e9b000 rw-p 00000000 00:00 0 16 16 16 16 16 0 0 0 0 0
7f1734ea2000 rw-p 00000000 00:00 0 12 12 12 12 12 0 0 0 0 0
7f1734ea5000 r--p 00022000 08:01 1794933 4 4 4 4 4 0 0 0 0 0 ld-2.19.so
7f1734ea6000 rw-p 00023000 08:01 1794933 4 4 4 4 4 0 0 0 0 0 ld-2.19.so
7f1734ea7000 rw-p 00000000 00:00 0 4 4 4 4 4 0 0 0 0 0
7ffd80a33000 rw-p 00000000 00:00 0 136 12 12 12 12 0 0 0 0 0 [stack]
7ffd80ae4000 r--p 00000000 00:00 0 8 0 0 0 0 0 0 0 0 0 [vvar]
7ffd80ae6000 r-xp 00000000 00:00 0 8 4 0 4 0 0 0 0 0 0 [vdso]
ffffffffff600000 r-xp 00000000 00:00 0 4 0 0 0 0 0 0 0 0 0 [vsyscall]
===== ==== ==== ========== ========= ============== =============== ==== ======= ======
14096 1896 1420 1836 176 0 0 0 0 0 KB
Из этого, как я могу определить количество библиотек, которые делятся? Мне более или менее необходимо знать, какие столбцы имеют для этого значение.
Ниже вы можете увидеть вывод, когда я снова запустил тот же контейнер.
29537: ./a.out
Address Perm Offset Device Inode Size Rss Pss Referenced Anonymous Shared_Hugetlb Private_Hugetlb Swap SwapPss Locked Mapping
00400000 r-xp 00000000 08:01 2070672 4 4 2 4 0 0 0 0 0 0 a.out
00600000 r--p 00000000 08:01 2070672 4 4 4 4 4 0 0 0 0 0 a.out
00601000 rw-p 00001000 08:01 2070672 4 4 4 4 4 0 0 0 0 0 a.out
7f1733f16000 r-xp 00000000 08:01 1794991 1044 244 146 244 0 0 0 0 0 0 libm-2.19.so
7f173401b000 ---p 00105000 08:01 1794991 2044 0 0 0 0 0 0 0 0 0 libm-2.19.so
7f173421a000 r--p 00104000 08:01 1794991 4 4 4 4 4 0 0 0 0 0 libm-2.19.so
7f173421b000 rw-p 00105000 08:01 1794991 4 4 4 4 4 0 0 0 0 0 libm-2.19.so
7f173421c000 r-xp 00000000 08:01 1794953 1768 868 235 868 0 0 0 0 0 0 libc-2.19.so
7f17343d6000 ---p 001ba000 08:01 1794953 2048 0 0 0 0 0 0 0 0 0 libc-2.19.so
7f17345d6000 r--p 001ba000 08:01 1794953 16 16 16 16 16 0 0 0 0 0 libc-2.19.so
7f17345da000 rw-p 001be000 08:01 1794953 8 8 8 8 8 0 0 0 0 0 libc-2.19.so
7f17345dc000 rw-p 00000000 00:00 0 20 12 12 12 12 0 0 0 0 0
7f17345e1000 r-xp 00000000 08:01 2064911 240 44 36 44 0 0 0 0 0 0 libgslcblas.so.0.0.0
7f173461d000 ---p 0003c000 08:01 2064911 2044 0 0 0 0 0 0 0 0 0 libgslcblas.so.0.0.0
7f173481c000 r--p 0003b000 08:01 2064911 4 4 4 4 4 0 0 0 0 0 libgslcblas.so.0.0.0
7f173481d000 rw-p 0003c000 08:01 2064911 4 4 4 4 4 0 0 0 0 0 libgslcblas.so.0.0.0
7f173481e000 r-xp 00000000 08:01 2064906 2372 404 204 404 0 0 0 0 0 0 libgsl.so.19.3.0
7f1734a6f000 ---p 00251000 08:01 2064906 2048 0 0 0 0 0 0 0 0 0 libgsl.so.19.3.0
7f1734c6f000 r--p 00251000 08:01 2064906 12 12 12 12 12 0 0 0 0 0 libgsl.so.19.3.0
7f1734c72000 rw-p 00254000 08:01 2064906 68 68 60 68 52 0 0 0 0 0 libgsl.so.19.3.0
7f1734c83000 r-xp 00000000 08:01 1794933 140 140 39 140 0 0 0 0 0 0 ld-2.19.so
7f1734e9b000 rw-p 00000000 00:00 0 16 16 16 16 16 0 0 0 0 0
7f1734ea2000 rw-p 00000000 00:00 0 12 12 12 12 12 0 0 0 0 0
7f1734ea5000 r--p 00022000 08:01 1794933 4 4 4 4 4 0 0 0 0 0 ld-2.19.so
7f1734ea6000 rw-p 00023000 08:01 1794933 4 4 4 4 4 0 0 0 0 0 ld-2.19.so
7f1734ea7000 rw-p 00000000 00:00 0 4 4 4 4 4 0 0 0 0 0
7ffd80a33000 rw-p 00000000 00:00 0 136 12 12 12 12 0 0 0 0 0 [stack]
7ffd80ae4000 r--p 00000000 00:00 0 8 0 0 0 0 0 0 0 0 0 [vvar]
7ffd80ae6000 r-xp 00000000 00:00 0 8 4 0 4 0 0 0 0 0 0 [vdso]
ffffffffff600000 r-xp 00000000 00:00 0 4 0 0 0 0 0 0 0 0 0 [vsyscall]
===== ==== === ========== ========= ============== =============== ==== ======= ======
14096 1900 846 1900 176 0 0 0 0 0 KB
29408: ./a.out
Address Perm Offset Device Inode Size Rss Pss Referenced Anonymous Shared_Hugetlb Private_Hugetlb Swap SwapPss Locked Mapping
00400000 r-xp 00000000 08:01 2070672 4 4 2 4 0 0 0 0 0 0 a.out
00600000 r--p 00000000 08:01 2070672 4 4 4 4 4 0 0 0 0 0 a.out
00601000 rw-p 00001000 08:01 2070672 4 4 4 4 4 0 0 0 0 0 a.out
7f35beae2000 r-xp 00000000 08:01 1794991 1044 212 114 212 0 0 0 0 0 0 libm-2.19.so
7f35bebe7000 ---p 00105000 08:01 1794991 2044 0 0 0 0 0 0 0 0 0 libm-2.19.so
7f35bede6000 r--p 00104000 08:01 1794991 4 4 4 4 4 0 0 0 0 0 libm-2.19.so
7f35bede7000 rw-p 00105000 08:01 1794991 4 4 4 4 4 0 0 0 0 0 libm-2.19.so
7f35bede8000 r-xp 00000000 08:01 1794953 1768 964 300 964 0 0 0 0 0 0 libc-2.19.so
7f35befa2000 ---p 001ba000 08:01 1794953 2048 0 0 0 0 0 0 0 0 0 libc-2.19.so
7f35bf1a2000 r--p 001ba000 08:01 1794953 16 16 16 16 16 0 0 0 0 0 libc-2.19.so
7f35bf1a6000 rw-p 001be000 08:01 1794953 8 8 8 8 8 0 0 0 0 0 libc-2.19.so
7f35bf1a8000 rw-p 00000000 00:00 0 20 12 12 12 12 0 0 0 0 0
7f35bf1ad000 r-xp 00000000 08:01 2064911 240 16 8 16 0 0 0 0 0 0 libgslcblas.so.0.0.0
7f35bf1e9000 ---p 0003c000 08:01 2064911 2044 0 0 0 0 0 0 0 0 0 libgslcblas.so.0.0.0
7f35bf3e8000 r--p 0003b000 08:01 2064911 4 4 4 4 4 0 0 0 0 0 libgslcblas.so.0.0.0
7f35bf3e9000 rw-p 0003c000 08:01 2064911 4 4 4 4 4 0 0 0 0 0 libgslcblas.so.0.0.0
7f35bf3ea000 r-xp 00000000 08:01 2064906 2372 416 216 416 0 0 0 0 0 0 libgsl.so.19.3.0
7f35bf63b000 ---p 00251000 08:01 2064906 2048 0 0 0 0 0 0 0 0 0 libgsl.so.19.3.0
7f35bf83b000 r--p 00251000 08:01 2064906 12 12 12 12 12 0 0 0 0 0 libgsl.so.19.3.0
7f35bf83e000 rw-p 00254000 08:01 2064906 68 68 60 68 52 0 0 0 0 0 libgsl.so.19.3.0
7f35bf84f000 r-xp 00000000 08:01 1794933 140 132 33 132 0 0 0 0 0 0 ld-2.19.so
7f35bfa67000 rw-p 00000000 00:00 0 16 16 16 16 16 0 0 0 0 0
7f35bfa6e000 rw-p 00000000 00:00 0 12 12 12 12 12 0 0 0 0 0
7f35bfa71000 r--p 00022000 08:01 1794933 4 4 4 4 4 0 0 0 0 0 ld-2.19.so
7f35bfa72000 rw-p 00023000 08:01 1794933 4 4 4 4 4 0 0 0 0 0 ld-2.19.so
7f35bfa73000 rw-p 00000000 00:00 0 4 4 4 4 4 0 0 0 0 0
7ffe70ef1000 rw-p 00000000 00:00 0 136 12 12 12 12 0 0 0 0 0 [stack]
7ffe70fd0000 r--p 00000000 00:00 0 8 0 0 0 0 0 0 0 0 0 [vvar]
7ffe70fd2000 r-xp 00000000 00:00 0 8 4 0 4 0 0 0 0 0 0 [vdso]
ffffffffff600000 r-xp 00000000 00:00 0 4 0 0 0 0 0 0 0 0 0 [vsyscall]
===== ==== ==== ========== ========= ============== =============== ==== ======= ======
28192 3840 1703 3840 352 0 0 0 0 0 KB