Operações de Metadados, como ls -l, du ou find, estão Lentas
Quando um diretório excede 100.000 arquivos, as operações de metadados, como ls -l
, du
ou find
são lentas.
Geralmente, espera-se que ls -l
em um diretório do serviço File Storage com 100.000 arquivos seja concluído em <= 10 segundos. O tamanho do diretório não afeta significativamente o throughput de gravação do serviço File Storage. Se você ver lentidão na leitura/gravação, certifique-se de que não esteja usando as opções de montagem NFS rsize
e wsize
com um valor menor que 1048576. Como uma das melhores práticas, não especifique as opções de montagem rsize
e wsize
, deixe-as com o valor padrão 1048576.
Causa: As operações de verificação de diretório como ls
, du
, find
e rsync
em um diretório contendo 100.000 arquivos levam mais tempo no serviço File Storage.
Soluções:
-
Redistribua arquivos para subdiretórios em vez de armazenar um grande volume de arquivos em um único diretório. Recomendamos o uso de subdiretórios para manter os tamanhos dos diretórios abaixo de 100.000 arquivos.
Dica
Manter os tamanhos dos diretórios pequenos usando subdiretórios é uma das melhores práticas para o serviço File Storage. - Use
ls -ld
oustat
em vez dels -l
. Essas operações são muito mais rápidas em diretórios grandes do que emls -l
.Por exemplo:
[opc@instance01 dd]$ time ls -l|wc -l 401425 real 0m39.786s user 0m4.389s sys 0m5.403s [opc@instance01 dd]$ time ls -ld drwxrwxr-x. 4 opc opc 401424 Apr 17 14:18 . real 0m0.009s user 0m0.001s sys 0m0.003s [opc@instance01 dd]$ time stat .|grep Size Size: 401424 Blocks: 785 IO Block: 32768 directory real 0m0.010s user 0m0.002s sys 0m0.003s [opc@instance01 dd]$
-
Às vezes, um problema no cliente NFS pode fazer com que as operações de verificação de diretório entrem em um loop e levem a um aumento no tempo de verificação. Esse problema afetou as seguintes versões do Oracle Linux:
- Oracle Linux 6
- Oracle Linux 7 com versões UEK (Unbreakable Enterprise Kernel) anteriores a 4.14.35-1902.301.1
Se você usar o Oracle Linux 6, faça upgrade para o Oracle Linux 7 ou mais recente. A versão mais recente é recomendada.
Os usuários do Oracle Linux 7 podem executar o comando
uname -a
para verificar a versão do UEK. Se a versão UEK for anterior à 4.14.35-1902.301.1, faça upgrade para uma versão posterior do kernel. O patch que trata desse comportamento foi disponibilizado em 17 de abril de 2020 e pode ser instalado com o Oracle Ksplice.O Oracle Ksplice permite que você aplique atualizações de segurança importante e outras atualizações críticas do kernel sem uma reinicialização. O Oracle Ksplice deve estar instalado na instância. Depois de instalar o Ksplice, você pode instalar os patches disponíveis do Ksplice. Consulte Oracle Ksplice para obter mais informações.
Depois de instalar o patch, você pode verificar a versão efetiva do kernel. O Ksplice
uptrack
não altera a saída do comandouname
. O comandouname
continua refletindo a versão do kernel em que a instância foi inicializada.Em vez disso, use o
uptrack-uname
para ver o kernel efetivo que uma instância está executando. O comandouptrack-uname
tem o mesmo formato que ouname
e suporta os flagsuname
comuns, incluindo-r
e-a
.Por exemplo:
$ uptrack-uname -r 4.14.35-1902.302.2.el7uek.x86_64
-
As operações de varredura de diretório invocam a chamada NFS
READDIRPLUS
, que é cara quando o diretório contém muitos arquivos. As instâncias podem desativar chamadasREADDIRPLUS
usando a opçãonordirplus
durante a montagem. Para desativar as operações NFSREADDIRPLUS
na instância:- Abra uma janela de terminal na instância.
-
Desmonte o sistema de arquivos com o comando
umount
. Por exemplo:sudo umount 10.x.x.x:/fs-export-path /mnt/yourmountpoint
-
Remova o sistema de arquivos e inclua a opção
-o nordirplus
para desativarREADDIRPLUS
. Por exemplo:sudo mount -o nordirplus 10.x.x.x:/fs-export-path /mnt/yourmountpoint