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 -ldostatinvece 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 -aper 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
uptracknon modifica l'output del comandouname.unamecontinua a riflettere la versione del kernel in cui è stato eseguito il boot dell'istanza.In alternativa, utilizzare
uptrack-unameper visualizzare il kernel efficace in esecuzione di un'istanza.uptrack-unameha lo stesso formato diunamee supporta i flagunamecomuni, inclusi-re-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 chiamateREADDIRPLUSutilizzando l'opzionenordirplusdurante l'attivazione. Per disabilitare le operazioni NFSREADDIRPLUSnell'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 nordirplusper disabilitareREADDIRPLUS. Ad esempio:sudo mount -o nordirplus 10.x.x.x:/fs-export-path /mnt/yourmountpoint