Método simples C / C ++ para obter cache de liberação do Caches

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)

 

Acho que você gosta

Origin blog.csdn.net/Swallow_he/article/details/100016778
Recomendado
Clasificación