Aqui a saída de free -m
:
total used free shared buffers cached
Mem: 7188 6894 294 0 249 5945
-/+ buffers/cache: 698 6489
Swap: 0 0 0
Consigo ver quase 6GB
(5945MB) de memória fora 7GB
usada no cache dos arquivos. Eu sei como liberar os caches. Minha pergunta é: É possível ver quais arquivos (ou inodes) estão sendo armazenados em cache?
linux
memory-usage
ssapkota
fonte
fonte
buffers
ecached
:sysctl -w vm.drop_caches=3
. Você pode querer ler mais sobre isso antes de usar. Às vezes é apenas necessário. Seu disponível - isto deve ser outra razão :)Respostas:
Bem, não é uma maneira fácil de dar uma olhada em cache de página do kernel, se acontecer de você ter fTools - "fincore" dá-lhe algumas informações resumidas sobre as páginas dos ficheiros são o conteúdo do cache.
Você precisará fornecer uma lista de nomes de arquivos para verificar a presença deles no cache da página. Isso ocorre porque as informações armazenadas nas tabelas de cache da página do kernel conterão apenas referências de bloco de dados e não nomes de arquivos.
fincore
resolveria os blocos de dados de um determinado arquivo através dos dados do inode e procuraria pelas entradas respectivas nas tabelas de cache da página.Não há mecanismo de pesquisa eficiente para fazer o inverso - obter um nome de arquivo pertencente a um bloco de dados exigiria a leitura de todos os inodes e blocos indiretos no sistema de arquivos. Se você precisar conhecer os blocos de todos os arquivos armazenados no cache da página, precisará fornecer uma lista de todos os arquivos no (s) seu (s) sistema (s) de arquivos
fincore
. Mas isso provavelmente estragará a medição, pois uma grande quantidade de dados seria lida nos diretórios e obtendo todos os inodes e blocos indiretos - colocando-os no cache da página e expulsando os dados do cache da página que você estava tentando examinar.fonte
fincore
resolveria os blocos de dados de um determinado arquivo através dos dados do inode e procuraria pelas entradas respectivas nas tabelas de cache da página. Não há mecanismo de pesquisa eficiente fazendo o inverso - obter um nome de arquivo pertencente a um bloco de dados exigiria a leitura de todos os inodes e blocos indiretos no sistema de arquivos. Assim, algoritmicamente, será melhor fornecer uma lista de todos os arquivos em seu sistema de arquivosfincore
se você realmente precisar desse nível de informação.Você pode usar o utilitário vmtouch para verificar se um arquivo ou diretório nomeado está no cache. Você também pode usar a ferramenta para forçar itens ao cache ou bloqueá-los no cache.
Agora eu posso "tocá-lo" no cache.
Agora, para ver quanto é armazenado em cache ...
fonte
Eu escrevo um shell script muito simples para mostrar os arquivos em cache usando o linux-fincore. Como o cache é uma parte da memória, meu código encontra os 10 principais usos do processo RSZ e o lsof para descobrir os arquivos que foram abertos, finalmente use o linux-fincore para descobrir se esses arquivos estão em cache ou não.
Por favor, corrija-me se estiver errado.
fonte
lsof
também relata arquivos mapeados no espaço de endereço do processo (e não necessariamente em cache). Também provável que grande parte dos arquivos vai ser apenas parcialmente / esparsamente em cache ...Você também pode usar o pcstat (Stat de cache da página) https://github.com/tobert/pcstat
Espero que ajude alguém.
fonte
Eu escrevi o seguinte script que imprime todos os arquivos e seu status de cache usando o comando pcstat. É um script independente para sistemas linux x86_64. Faz o download do pcstat, se necessário.
O primeiro argumento é a localização do sistema de arquivos a ser analisada e o segundo argumento é o número do resultado (N superior pelo número de páginas no cache).
fonte