Pode-se ver que / proc / sys é um sistema de arquivos virtual, que pode ser usado como meio de comunicação com a entidade do kernel por meio de suas operações de leitura e gravação. Em outras palavras, você pode ajustar o comportamento do kernel atual modificando os arquivos em / proc. Então podemos liberar a memória ajustando / proc / sys / vm / drop_caches. O valor padrão é 0. Gravar em / proc / sys / vm / drop_caches limpará o cache. Recomenda-se executar a sincronização primeiro (o comando sync grava todos os buffers não gravados do sistema no disco, incluindo i-nodes modificados, E / S de bloco atrasado e arquivos de mapeamento de leitura / gravação). Execute echo 1, 2, 3 em / proc / sys / vm / drop_caches para atingir diferentes objetivos de limpeza.
echo N> / proc / sys / vm / drop_caches, podemos substituí-lo pelo seguinte código:
int DropCaches(int drop)
{
int ret = 0;
#ifdef WIN32
#else
int fd = 0;
fd = open("/proc/sys/vm/drop_caches", O_RDWR);
if(fd < 0)
{
return -1;
}
char dropData[32] = { 0 };
int dropSize = snprintf(dropData,sizeof(dropData),"%d",drop);
ret = write(fd,dropData,dropSize);
close(fd);
#endif
return ret;
}
Sugestões dadas por outros:
Se o aplicativo tiver problemas, como vazamentos e estouros de memória, pode ser avaliado rapidamente pelo uso de swap, mas é mais difícil verificar se é gratuito. Pelo contrário, se neste momento, dissermos ao usuário para modificar um valor do sistema, "pode" liberar a memória, o livre será grande. O que os usuários vão pensar? Você não acha que o sistema operacional é "problemático"? Então, uma vez que o núcleo pode esvaziar rapidamente o buffer ou cache, não é difícil de fazer (isso é óbvio pela operação acima), mas o núcleo não faz isso (o valor padrão é 0), não devemos simplesmente mudar isto.
Em circunstâncias normais, quando o aplicativo é executado de forma estável no sistema, o valor livre permanecerá em um valor estável, embora possa parecer relativamente pequeno. Quando problemas como memória insuficiente, falha do aplicativo para obter memória disponível, erro OOM, etc. ocorrem, ainda é melhor analisar os motivos do aplicativo, como memória insuficiente devido ao volume excessivo do usuário, estouro de memória do aplicativo, etc. Caso contrário, limpe o buffer e force Liberar o tamanho do free pode apenas proteger temporariamente o problema.
Exceto no caso de memória insuficiente, a menos que esteja no estágio de desenvolvimento de software, o buffer precisa ser temporariamente limpo para determinar o uso de memória do aplicativo; ou o aplicativo não fornece mais suporte, mesmo se o aplicativo tiver um problema com a memória, e isso não pode ser evitado Nesse caso, considere limpar o buffer regularmente. (Infelizmente, esses aplicativos geralmente são executados em versões antigas do sistema operacional e as operações acima não podem ser resolvidas)