Operazioni di metadati come ls -l, du o find sono lente
Quando una directory supera i 100.000 file, le operazioni sui metadati, ad esempio ls -l
, du
o find
, sono lente.
In genere, il completamento di ls -l
in una directory di storage di file con 100.000 file è previsto in <= 10 secondi. La dimensione della directory non influisce in modo significativo sul throughput di scrittura dello storage di file. Se viene indicata la lentezza di lettura/scrittura, assicurarsi che non si stiano utilizzando le opzioni di attivazione NFS rsize
e wsize
con un valore inferiore a 1048576. Come procedura ottimale, non specificare le opzioni di attivazione rsize
e wsize
, lasciandole al valore predefinito 1048576.
Causa: le operazioni di scansione delle directory quali ls
, du
, find
e rsync
in una directory contenente 100.000 file richiedono più tempo nello storage di file.
Soluzioni:
-
Ridistribuire i file in sottodirectory invece di memorizzare un grande volume di file in una singola directory. Si consiglia di utilizzare le sottodirectory per mantenere le dimensioni delle directory inferiori a 100.000 file.
Suggerimento
Il mantenimento di dimensioni ridotte delle directory mediante l'uso di sottodirectory è una procedura consigliata per lo storage di file. - Utilizzare
ls -ld
ostat
invece dils -l
. Queste operazioni sono molto più veloci su directory di grandi dimensioni rispetto als -l
.Ad esempio:
[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 volte, un problema del client NFS potrebbe causare operazioni di scansione delle directory per entrare in un loop e portare ad un aumento dei tempi di scansione. Questo problema ha interessato le seguenti versioni di Oracle Linux:
- Oracle Linux 6
- Oracle Linux 7 con versioni Unbreakable Enterprise Kernel (UEK) precedenti alla 4.14.35-1902.301.1
Se utilizzi Oracle Linux 6, esegui l'upgrade a Oracle Linux 7 o versione successiva. Si consiglia l'ultima versione.
Gli utenti di Oracle Linux 7 possono eseguire il comando
uname -a
per controllare la versione di UEK. Se la versione UEK è precedente alla 4.14.35-1902.301.1, eseguire l'aggiornamento a una versione kernel successiva. La patch per risolvere questo problema è stata resa disponibile il 17 aprile 2020 e può essere installata con Oracle Ksplice.Oracle Ksplice ti consente di applicare importanti aggiornamenti di sicurezza e altri aggiornamenti critici del kernel senza riavviare il sistema. Oracle Ksplice deve essere installato nell'istanza. Dopo aver installato Ksplice, è possibile installare le patch Ksplice disponibili. Per istruzioni, vedere Oracle Ksplice.
Dopo aver installato la patch, è possibile verificare la versione del kernel efficace. Ksplice
uptrack
non modifica l'output del comandouname
.uname
continua a riflettere la versione del kernel in cui è stato eseguito il boot dell'istanza.In alternativa, utilizzare
uptrack-uname
per visualizzare il kernel efficace in esecuzione di un'istanza.uptrack-uname
ha lo stesso formato diuname
e supporta i flaguname
comuni, inclusi-r
e-a
.Ad esempio:
$ uptrack-uname -r 4.14.35-1902.302.2.el7uek.x86_64
-
Le operazioni di scansione delle directory richiamano la chiamata NFS
READDIRPLUS
, che è costosa quando la directory contiene molti file. Le istanze possono disabilitare le chiamateREADDIRPLUS
utilizzando l'opzionenordirplus
durante l'attivazione. Per disabilitare le operazioni NFSREADDIRPLUS
nell'istanza:- Aprire una finestra di terminale sull'istanza.
-
Disattivare il file system con il comando
umount
. Ad esempio:sudo umount 10.x.x.x:/fs-export-path /mnt/yourmountpoint
-
Riattivare il file system e includere l'opzione
-o nordirplus
per disabilitareREADDIRPLUS
. Ad esempio:sudo mount -o nordirplus 10.x.x.x:/fs-export-path /mnt/yourmountpoint