Seu problema, na verdade, está aqui:
Normal
free:29372kB
min:32768kB
low:40960kB
high:49152kB
active_anon:0kB
inactive_anon:0kB
active_file:44kB
inactive_file:128kB
unevictable:44kB
isolated(anon):0kB
isolated(file):0kB
present:131072kB
managed:124196kB
mlocked:0kB
dirty:0kB
writeback:0kB
mapped:0kB
shmem:0kB
slab_reclaimable:3876kB
slab_unreclaimable:26196kB
kernel_stack:576kB
pagetables:840kB
unstable:0kB
bounce:0kB
free_cma:0kB
writeback_tmp:0kB
pages_scanned:1064
all_unreclaimable? no
A memória do seu roteador é dividida em zonas, uma zona - o HighMem contém 128MiB de memória, a outra zona, o Normal contém 128MiB de memória.
A zona é funcionalmente independente uma da outra. O gerenciador de memória trabalha em cada zona de maneira isolada.
oom-killer é invocado na zona normal. Você pode praticamente eliminar 128MB de memória quando você está olhando para o seu pedido.
Agora, para a anomalia real:
free: 29372kB
min: 32768kB
O campo min
é a interpretação dos kernels de 'quando eu for abaixo deste limite, terei que fazer coisas drásticas para recuperar memória - como OOM-killer'.
O que é altamente incomum sobre este campo em sua descrição é o quanto é definido como o valor mínimo. Esse valor normalmente flutua em cerca de 2% da sua memória, nesse caso, seus 25% de toda a zona. Não é de admirar que você o mate tão agressivamente!
Quando estiver analisando a saída de sua pergunta, a razão para o problema está aqui:
vm.min_free_kbytes = 32768
Altere esse valor para algo caminho menor. Talvez 1024
seja um número mais razoável.
Você também mostra alguns erros de 'soquete tcp órfão'. Você também pode querer reduzir os valores para net.ipv4.tcp_wmem
e net.ipv4.tcp_rmem
, o que permitirá lidar com mais soquetes (com o custo de latência).
Então, para responder à sua pergunta por que você está matando processos com muito swap grátis - a resposta para isso é que a configuração vm.min_free_kb
é ridiculamente alta para a quantidade de memória real que você tem em cada zona. Reduza este valor de 32MiB para 1MiB.