Estou vendo um comportamento que não posso explicar no meu destino Linux incorporado (initramfs e sem troca ).
Como não há troca, eu esperaria que qualquer coisa em / tmp (tmpfs) fosse marcada como inultrapassável. Em vez disso, estou observando o seguinte ao usar o seguinte script:
#!/bin/sh
count=1
while true; do
echo "#$count"
dd if=/dev/zero of=/tmp/zero$count bs=1M count=10 && cat /proc/meminfo | grep 'Unevictable\|Shmem'
count='expr $count + 1'
sleep 3
done
Se estiver escrevendo muitos arquivos de 10MB, o Shmem cresce linearmente, mas a memória inquestionável aumenta de 0KB para ~ 200MB rapidamente:
#40
10+0 records in
10+0 records out
10485760 bytes (10.0MB) copied, 0.102484 seconds, 97.6MB/s
Unevictable: 0 kB
Shmem: 453776 kB
#41
10+0 records in
10+0 records out
10485760 bytes (10.0MB) copied, 0.047640 seconds, 209.9MB/s
Unevictable: 0 kB
Shmem: 464196 kB
#42
10+0 records in
10+0 records out
10485760 bytes (10.0MB) copied, 0.101833 seconds, 98.2MB/s
Unevictable: 884 kB
Shmem: 474616 kB
#43
10+0 records in
10+0 records out
10485760 bytes (10.0MB) copied, 0.051686 seconds, 193.5MB/s
Unevictable: 234612 kB
Shmem: 485040 kB
#44
10+0 records in
10+0 records out
10485760 bytes (10.0MB) copied, 0.052157 seconds, 191.7MB/s
Unevictable: 238568 kB
Shmem: 495572 kB
#45
10+0 records in
10+0 records out
10485760 bytes (10.0MB) copied, 0.043332 seconds, 230.8MB/s
Unevictable: 245332 kB
Shmem: 505892 kB
#46
10+0 records in
10+0 records out
10485760 bytes (10.0MB) copied, 0.042653 seconds, 234.4MB/s
Unevictable: 245332 kB
Shmem: 516312 kB
#47
10+0 records in
10+0 records out
10485760 bytes (10.0MB) copied, 0.048478 seconds, 206.3MB/s
Unevictable: 248384 kB
Shmem: 526724 kB
Se eu apagar todos os arquivos zero, a memória não removível permanece no mesmo nível. Isso significa que perdi toda essa RAM? Parece que o assassino da OOM parece ser chamado anteriormente. Como posso recuperá-lo?
# rm /tmp/zero*
# cat /proc/meminfo | grep 'Unevictable\|Shmem'
Unevictable: 288372 kB
Shmem: 48412 kB
Com pedaços de 100MB em vez de 10MB:
#1
100+0 records in
100+0 records out
104857600 bytes (100.0MB) copied, 0.422820 seconds, 236.5MB/s
Unevictable: 0 kB
Shmem: 150168 kB
#2
100+0 records in
100+0 records out
104857600 bytes (100.0MB) copied, 0.471385 seconds, 212.1MB/s
Unevictable: 0 kB
Shmem: 252516 kB
#3
100+0 records in
100+0 records out
104857600 bytes (100.0MB) copied, 0.444059 seconds, 225.2MB/s
Unevictable: 0 kB
Shmem: 354888 kB
#4
100+0 records in
100+0 records out
104857600 bytes (100.0MB) copied, 0.414981 seconds, 241.0MB/s
Unevictable: 0 kB
Shmem: 457368 kB
#5
100+0 records in
100+0 records out
104857600 bytes (100.0MB) copied, 5.538392 seconds, 18.1MB/s
Unevictable: 288264 kB
Shmem: 559700 kB
#6
dd: writing '/tmp/zero6': No space left on device
Alguém pode explicar o comportamento observado, que parece um bug do Kernel para mim.
Obrigado