Las operaciones de metadatos como ls -l, du o find son lentas
Cuando un directorio supera los 100 000 archivos, las operaciones de metadatos como ls -l
, du
o find
son lentas.
Por lo general, se espera que ls -l
en un directorio de File Storage con 100 000 archivos se complete en <= 10 segundos. El tamaño del directorio no afecta significativamente al rendimiento de escritura del almacenamiento de archivos. Si observa lentitud de lectura/ escritura, asegúrese de no utilizar las opciones de montaje NFS rsize
y wsize
con un valor inferior a 1048576. Como práctica recomendada, no especifique las opciones de montaje rsize
y wsize
, déjelas en su valor por defecto 1048576.
Causa: las operaciones de exploración de directorios como ls
, du
, find
y rsync
en un directorio que contiene 100 000 archivos tardan más en el almacenamiento de archivos.
Soluciones:
-
Permite redistribuir archivos en subdirectorios en lugar de almacenar un gran volumen de archivos en un solo directorio. Recomendamos utilizar subdirectorios para mantener los tamaños de directorio por debajo de 100 000 archivos.
Consejo
Mantener los tamaños de directorio pequeños mediante el uso de subdirectorios es una práctica recomendada para File Storage. - Utilice
ls -ld
ostat
en lugar dels -l
. Estas operaciones son mucho más rápidas en directorios grandes quels -l
.Por ejemplo:
[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]$
-
A veces, una incidencia de cliente NFS puede provocar que las operaciones de exploración de directorios entren en un bucle y den lugar a un aumento del tiempo de exploración. Esta incidencia ha afectado a las siguientes versiones de Oracle Linux:
- Oracle Linux 6
- Oracle Linux 7 con versiones de Unbreakable Enterprise Kernel (UEK) anteriores a 4.14.35-1902.301.1
Si utiliza Oracle Linux 6, cambie la versión a Oracle Linux 7 o posterior. Se recomienda la última versión.
Los usuarios de Oracle Linux 7 pueden ejecutar el comando
uname -a
para comprobar la versión de UEK. Si la versión de UEK es anterior a 4.14.35-1902.301.1, cambie la versión a una versión de núcleo posterior. El parche que soluciona este comportamiento se publicó el 17 de abril de 2020 y se puede instalar con Oracle Ksplice.Oracle Ksplice le permite aplicar importantes actualizaciones de seguridad y otras actualizaciones de núcleo críticas sin reiniciar. Oracle Ksplice se debe instalar en la instancia. Después de instalar Ksplice, puede instalar los parches de Ksplice disponibles. Consulte Oracle Ksplice para obtener instrucciones.
Después de instalar el parche, puede verificar la versión efectiva del núcleo.
uptrack
de Ksplice no cambia la salida del comandouname
.uname
sigue reflejando la versión del núcleo en el que se ha iniciado la instancia.En su lugar, utilice
uptrack-uname
para ver qué núcleo efectivo está ejecutando una instancia.uptrack-uname
tiene el mismo formato queuname
y soporta los indicadores deuname
comunes, incluidos-r
y-a
.Por ejemplo:
$ uptrack-uname -r 4.14.35-1902.302.2.el7uek.x86_64
-
Las operaciones de exploración de directorios llaman a la llamada NFS
READDIRPLUS
, que es costosa cuando el directorio contiene muchos archivos. Las instancias pueden desactivar las llamadasREADDIRPLUS
mediante la opciónnordirplus
al realizar el montaje. Para desactivar las operaciones NFSREADDIRPLUS
en la instancia:- Abra una ventana de terminal en la instancia.
-
Desmonte el sistema de archivos con el comando
umount
. Por ejemplo:sudo umount 10.x.x.x:/fs-export-path /mnt/yourmountpoint
-
Vuelva a montar el sistema de archivos e incluya la opción
-o nordirplus
para desactivarREADDIRPLUS
. Por ejemplo:sudo mount -o nordirplus 10.x.x.x:/fs-export-path /mnt/yourmountpoint