Com base nos seus comentários, você diz que o uso do cache não diminui significativamente quando você tenta echo 3 > /proc/sys/vm/drop_caches
Isso só pode acontecer se esse for um cache para gravação. Se você gravar 5 GB em alguns arquivos, os dados aterram imediatamente no cache e o programa continua. O cache é realmente gravado no armazenamento em segundo plano o mais rápido possível. No seu caso, o armazenamento parece dramaticamente lento e você acumula o cache não escrito até que ele drena toda a sua memória RAM e começa a empurrar tudo para fora para trocar.
O kernel nunca irá gravar o cache na partição de swap. Ele o mantém na RAM até que seja gravado com segurança no destino.
O kernel nunca soltará cache não-escrito, porque seria uma perda de dados (você salvou um arquivo, então espera que os dados caiam no armazenamento permanente).
Você só pode resolvê-lo acelerando o armazenamento. Esse problema geralmente é visto no armazenamento montado via rede (verifique seus mount
para tipos cifs
, nfs
, sshfs
, etc.) ou dispositivos USB1 lentos.
Você também pode tornar o problema muito menos dramático para o sistema, limitando o cache sujo com sysctl vm.dirty_ratio=10
antes que ele cresça demais.
Se esse é um diagnóstico correto, você verá que o cache pode ser facilmente descartado (pelo menos 90% dele) e que o processo que grava esses gigabytes se torna muito lento. O restante do sistema se tornará mais responsivo.