Comment limiter le cache de fichiers dans CentOS (Linux) ? Configurer Swappiness et Caching sous Linux Gérer le cache cache dans le noyau linux 2.4.

domicile / Ne s'allume pas
Sous Linux, presque toutes les commandes sont sans interface graphique. Lors de l'exécution sur des serveurs d'accès, shell uniquement. Donc, aujourd'hui, nous allons montrer les commandes qui peuvent être utilisées pour vérifier l'utilisation de la mémoire sur un système Linux. La mémoire comprend la RAM et le swap.

Il est souvent important de vérifier l'utilisation de la mémoire partagée et la mémoire utilisée par les processus sur les serveurs, ainsi que les ressources inutilisées. Si vous utilisez un serveur Web, le serveur doit disposer de suffisamment de mémoire pour servir les visiteurs du site. Si ce n'est pas le cas, alors le site deviendra très lent ou même deviendra indisponible en cas d'augmentation du trafic, simplement parce qu'il n'y a pas assez de mémoire. La même chose que ce qui se passe sur un ordinateur de bureau.

1. commande gratuite

La commande free est la commande la plus simple et la plus facile à utiliser pour vérifier l'utilisation de la mémoire sous Linux. Voici un court exemple

$ free -m total utilisé tampons partagés gratuits mis en cache Mem : 7976 6459 1517 0 865 2248 -/+ tampons/cache : 3344 4631 Swap : 1951 0 1951

Option -m affiche toutes les données en mégaoctets. Volume total total mémoire vive 7976 Mo installés dans le système, soit 8 Go. Colonne utilisé montre la quantité de RAM pouvant être utilisée sous Linux, dans notre cas, ce sera environ 6,4 Go. Le hic ici, ce sont les haut-parleurs mis en cache et tampons. La deuxième ligne indique que 4,6 Go sont gratuits. Il s'agit de la mémoire libre de la première ligne avec l'ajout de tampons et de mémoire cache.

Linux a l'habitude de mettre en cache pour les performances afin que la mémoire puisse être libérée et utilisée en cas de besoin.
La dernière ligne est swapping memory ( échanger), qui dans ce cas est entièrement gratuit.

2. /proc/meminfo

La méthode suivante pour vérifier l'utilisation de la mémoire consiste à lire le fichier /proc/meminfo. Sachez que le système de fichiers /proc ne contient pas de fichiers réels. Ce sont des fichiers virtuels qui contiennent des informations dynamiques sur le noyau et le système.

$ cat /proc/meminfo MemTotal : 8167848 Ko MemFree : 1409696 Ko Tampons : 961452 Ko Cache : 2347236 Ko SwapCached : 0 Ko Actif : 3124752 Ko Inactif : 2781308 Ko Actif (anon) : 2603376 Ko Inactif (anon) : 309056 Ko file): 521376 ko Inactive(file): 2472252 ko Unevictable: 5864 ko Mlocked: 5880 ko SwapTotal: 1998844 ko SwapFree: 1998844 ko Dirty: 7180 ko Writeback: 0 ko AnonPages: 2603272 ko: Mapped: 788380 2 ko SReclaim46m8 : 151760 kB SUnreclaim: 48708 kB KernelStack: 6488 kB PageTables: 78592 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 6082768 kB Committed_AS: 9397536 kB VmallocTotal: 34359738367 kB VmallocUsed: 420204 kB VmallocChunk: 34359311104 kB HardwareCorrupted: 0 Ko AnonHugePages : 0 Ko HugePages_Total : 0 HugePages_Free : 0 HugePages_Rsvd : 0 HugePages_Surp : 0 Hugepagesize : 2048 Ko DirectMap4k : 62464 Ko DirectMap2M : 8316928 Ko

Modifions le comportement d'Ubuntu concernant l'utilisation de la RAM et l'échange (partition d'échange). Il existe un tel paramètre vm.swappiness , qui a par défaut une valeur de 60, et contrôle le pourcentage de mémoire libre auquel le vidage de la page active vers la partition d'échange commencera. En d'autres termes, à 100-60=40% de mémoire occupée, Ubuntu commencera déjà à utiliser la partition swap. À en grand nombre RAM dans l'ordinateur, il est préférable de changer le paramètre vm.swappiness à 10 et ainsi dire à Ubuntu de ne pas utiliser le swap jusqu'à ce que la RAM occupée atteigne 100-10=90%. Définissez la valeur sur 10 au lieu de 60. Dans la console, saisissez la commande suivante :

echo 10 > /proc/sys/vm/swappiness

Sysctl -w vm.swappiness=10

Pour enregistrer le paramètre après un redémarrage, ajoutez la ligne suivante à la fin du fichier /etc/sysctl.conf :

Vm.swappiness=10

Pour appliquer le paramètre immédiatement :

Sysctl -p

De plus, il y a quelques options supplémentaires.
Le pseudo-fichier vfs_cache_pressure stocke la valeur - le niveau de mémoire allouée pour le cache. Valeur par défaut : 100. L'augmentation de ce paramètre force le noyau à purger plus activement les pages de mémoire inutilisées du cache, c'est-à-dire. la quantité de RAM allouée au cache augmentera plus lentement, ce qui réduira la probabilité que la partition d'échange soit utilisée. En réduisant ce paramètre, le noyau, au contraire, conservera plus longtemps les pages mémoire en cache, y compris en swap "e. Cela a du sens avec une petite quantité de RAM, par exemple, si nous avons 512 Mo de mémoire, alors le Le paramètre vfs_cache_pressure peut être défini sur 50. Cela réduira le nombre d'opérations de disque sur la partition d'échange, de sorte que les pages inutilisées seront supprimées moins souvent. Une réduction supplémentaire de ce paramètre peut entraîner un manque de mémoire.
Si vous voulez accélérer le système et que vous avez assez de RAM (2 Go ou plus), alors changez la valeur du système, donc : swappiness = 10 , vfs_cache_pressure = 1000 (default 100) , ajoutez la ligne suivante au /etc /fichier sysctl.conf :

vm.vfs_cache_pressure=1000

ou à la volée :

Sysctl -w vm.vfs_cache_pressure=1000

Mise en cache sous Linux

Lors de l'écriture de données sur disque (par n'importe quel programme), Linux met en cache ces informations dans une zone de mémoire appelée Page Cache. Les informations sur cette zone mémoire peuvent être visualisées à l'aide des commandes free, vmstat ou top. Informations complètes cette zone de mémoire peut être visualisée dans le fichier /proc/meminfo . Ci-dessous un exemple de ce fichier sur un serveur avec 4 Go de RAM :

MémoireTotal : 3950112 Ko
MemFree : 622 560 ko
Tampons : 78 048 ko
En cache : 2901484 ko
Swap mis en cache : 0 ko
Actif : 3108012 ko
Inactif : 55 296 ko
Total élevé : 0 ko
HautGratuit : 0 ko
Total bas : 3950112 Ko
FaibleGratuit : 622 560 ko
SwapTotal: 4198272 ko
Échange gratuit : 4198244 Ko
Sale : 416 ko
Réécriture : 0 ko
Cartographié : 999 852 ko
Dalle : 57104 ko
Committed_AS : 3340368 Ko
Tables de pages : 6672 ko
VmallocTotal : 536870911 Ko
VmallocUsed : 35 300 ko
VmallocChunk : 536835611 Ko
Énormes pages_total : 0
HugePages_Free : 0
Taille de page énorme : 2 048 ko

La taille du cache de page est indiquée dans le paramètre "Cached", dans cet exemple, elle est de 2,9 Go. Lorsque des pages sont écrites en mémoire, la taille du paramètre "Dirty" augmente. Lorsque l'écriture sur le disque démarre, le paramètre "Writeback" augmente jusqu'à ce que l'écriture soit terminée. Il est difficile de voir "Writeback" réglé sur high, car il n'est incrémenté que pendant l'interrogation, lorsque les opérations d'entrée/sortie (E/S) sont mises en file d'attente mais pas encore écrites sur le disque.
Linux écrit généralement les données du cache sur le disque en utilisant le processus pdflush. À tout moment, il y a entre 2 et 8 threads pdflush en cours d'exécution sur le système. Dans le fichier /proc/sys/vm/nr_pdflush_threads, vous pouvez voir combien ce moment flux actifs. Chaque fois que tous les threads pdflush existants sont occupés pendant au moins 1 seconde. De nouveaux threads essaient d'écrire des données dans des files d'attente de périphériques libres afin que pour chaque appareil actif Il y avait 1 thread de vidage des données du cache. Chaque fois qu'une seconde passe sans aucune activité de pdflush, 1 fil est supprimé. Sous Linux, vous pouvez définir le nombre minimum et maximum de threads pdflush.

Mise en place de pdflush
Chaque thread pdflush est contrôlé par plusieurs options dans /proc/sys/vm :

  • /proc/sys/vm/dirty_writeback_centisecs (500 par défaut) : en centièmes de seconde. Ce paramètre indique la fréquence à laquelle pdflush reprend l'écriture de données sur le disque. Par défaut, il reprend 2 threads toutes les 5 secondes.
    Il peut y avoir un comportement non documenté qui empêche les tentatives de réduction de dirty_writeback_centisecs pour une mise en cache des données plus agressive par le processus pdflush. Par exemple, dans les premières versions du noyau Linux 2.6, dans le fichier mm/page-writeback.c, le code incluait une logique qui décrivait "si l'écriture sur le disque prend plus de temps que le paramètre dirty_writeback_centisecs, alors définissez l'intervalle sur 1 seconde". Cette logique est décrite uniquement dans le code du noyau, et son fonctionnement dépend de la version du noyau Linux. Comme ce n'est pas très bon, vous serez donc protégé contre la réduction de ce paramètre.
  • code>/proc/sys/vm/dirty_expire_centiseconds (par défaut 3000) : en centièmes de seconde. Ce paramètre spécifie la durée pendant laquelle les données peuvent être mises en cache avant d'être écrites sur le disque. La valeur par défaut est très longue : 30 secondes. Cela signifie qu'à fonctionnement normal jusqu'à ce que suffisamment de données aient été écrites dans le cache pour appeler une autre méthode pdflush, Linux n'écrira aucune donnée sur le disque qui a été dans le cache pendant moins de 30 secondes.
  • /proc/sys/vm/dirty_background_ratio (valeur par défaut 10) : pourcentage maximal de RAM pouvant être rempli par le cache de pages avant que les données ne soient écrites sur le disque. Certaines versions du noyau Linux peuvent définir ce paramètre sur 5 %.
    La plupart des documentations décrivent ce paramètre comme un pourcentage de la RAM totale, mais selon codes sources Le noyau Linux ne l'est pas. En regardant meminfo, le paramètre dirty_background_ratio est calculé à partir de la valeur MemFree + Cached - Mapped. Ainsi, pour notre système de démonstration, 10 % correspondent à un peu moins de 250 Mo, mais pas à 400 Mo.

Quand pdflush commence-t-il à écrire ?
Dans la configuration par défaut, les données écrites sur le disque restent en mémoire jusqu'à :

Si les opérations d'écriture se produisent fréquemment sur le serveur, alors un jour le paramètre dirty_background_ratio sera atteint, et vous pourrez voir que toute écriture sur disque ne passe que par ce paramètre sans attendre l'expiration du paramètre dirty_expire_centiseconds.

Processus d'écriture des pages
L'option /proc/sys/vm/dirty_ratio (par défaut 40) est le pourcentage maximum de RAM totale qui peut être alloué au cache de page avant que pdflush n'écrive des données sur le disque.

Remarque : Lors de l'écriture sur le disque, tous les processus d'écriture sont bloqués, pas seulement celui qui a rempli le tampon d'écriture. Cela peut amener un processus à bloquer toutes les opérations d'E/S sur le système.

Recommandations pour optimiser Linux pour les opérations intensives en écriture
Habituellement, lorsqu'ils essaient d'augmenter les performances du sous-système de disque, ils rencontrent le problème que Linux met trop d'informations en mémoire tampon à la fois. Cela est particulièrement visible pour les opérations qui nécessitent une synchronisation du système de fichiers à l'aide d'appels fsync. Si, au cours d'un tel appel, il y a beaucoup de données dans le cache, le système peut "se bloquer" jusqu'à la fin de cet appel.
Un autre problème courant se produit parce qu'il y a trop de choses à écrire avant que l'écriture sur le disque physique ne commence, les opérations d'E/S se produisent plus fréquemment que pendant le fonctionnement normal.

  • dirty_background_ratio : Le principal outil de personnalisation. Réduisez généralement ce paramètre. Si votre objectif est de réduire la quantité de données stockées dans le cache afin que les données soient écrites sur le disque de manière incrémentielle plutôt qu'en une seule fois, la réduction de ce paramètre est la méthode la plus efficace. La valeur par défaut est la plus appropriée pour les systèmes avec beaucoup de RAM et des disques lents.
  • dirty_ratio : le deuxième paramètre le plus important à régler. En réduisant considérablement ce paramètre, les applications qui doivent écrire sur le disque seront toutes bloquées.
  • dirty_expire_centisecs : essayez de réduire ce paramètre, mais pas trop. Cela permet de réduire le temps passé par les pages dans le cache avant d'écrire sur le disque, mais d'un autre côté, cela réduira considérablement la vitesse moyenne d'écriture sur le disque, ce qui se manifestera surtout sur les systèmes avec des disques lents.

En conséquence, nous obtenons
Dans le fichier /etc/sysctl.conf nous entrons :

vm.dirty_background_ratio = 10 vm.dirty_ratio = 40

Après avoir synchronisé le cache et les données du disque, effacez le cache et enregistrez les paramètres :

synchroniser ; echo 3 > /proc/sys/vm/drop_caches ; sysctl-p

Pour réduire le nombre de finalisations de disque, vous devez corriger :

Vm.dirty_writeback_centisecs = 15000

Comme n'importe quel autre système opérateur, Linux est très efficace avec la RAM. La mémoire disponible est librement répartie entre les processus, les pages inutilisées sont vidées vers la partition d'échange sur le disque et, en cas de dépassement de mémoire, un mécanisme spécial intégré au noyau est déclenché, qui analyse tous les processus et détruit le coupable.

Lorsqu'un processus écrit des données sur le disque, elles sont stockées par le noyau dans cache séparé. Très souvent, ce cache prend beaucoup de place. Dans cet article, nous verrons comment libérer de la mémoire sous Linux, ou plutôt, comment vider le cache créé par les programmes.

Sur chaque distribution Linux, trois commandes peuvent être utilisées pour effacer le cache mémoire de Linux. Et nous n'avons pas à terminer de processus. Voici les commandes :

Vider le PageCache :

synchroniser ; echo 1 > /proc/sys/vm/drop_caches

Nettoyage inode et dentrie :

synchroniser ; echo 2 > /proc/sys/vm/drop_caches

Effacer inode et dentrie et PageCache :

synchroniser ; echo 3 > /proc/sys/vm/drop_caches

Avant d'exécuter l'une de ces commandes, exécutez :

Cela est nécessaire car chacune des commandes nécessite des droits de superutilisateur pour fonctionner. Voyons maintenant ce qui se passe lorsque ces commandes sont exécutées.

L'utilitaire de synchronisation oblige le système à écrire toutes les données mises en cache mais pas encore écrites sur le disque. Il s'agit de libérer le plus de mémoire possible. Par défaut, les données ne sont pas supprimées du cache après avoir été écrites sur le disque, cela est nécessaire pour que le programme puisse les lire plus rapidement si nécessaire.

Si nous n'exécutons pas la commande de synchronisation, nous libérerons également de l'espace, mais après l'avoir exécutée, le résultat sera meilleur.

Symbole de séparation ; indique au shell d'attendre que la première se termine avant d'exécuter une autre commande. La dernière commande echo 1 > /proc/sys/vm/drop_caches écrit la valeur 1 dans le fichier /proc/sys/vm/drop_caches. Cela signale au noyau d'effacer le type de cache que nous avons choisi.

Types de cache sous Linux

Et maintenant, regardons les types de cache qui vous permettent d'effacer ces commandes, et aussi comment tout cela fonctionne.

PageCache ou le cache de page est l'endroit où le noyau stocke toutes les données que vous avez écrites ou lues sur le disque. Cela accélère considérablement le système, car si le programme a besoin des mêmes données une deuxième fois, elles seront simplement extraites de la RAM. Mais pour cette raison, ce cache prend le plus de place.

Vous pouvez afficher la taille du cache de pages à l'aide de l'utilitaire gratuit. Ici, il est affiché dans la dernière colonne - en cache :

Un tel cache est le plus efficace et le plus sûr à nettoyer.

cache inode et dentrie s'applique également au système de fichiers. Seulement, ce ne sont pas les données elles-mêmes qui y sont écrites, mais la structure du système de fichiers, l'emplacement des fichiers et des dossiers. Lorsqu'il demande l'emplacement d'un fichier ou le contenu d'un dossier, le noyau forme des structures spéciales qui contiennent toutes ces informations. A la prochaine requête, les structures seront déjà stockées en mémoire. Chaque système de fichiers a son propre cache inode et un cache dentrie partagé.

Ce cache occupe très peu de mémoire. Les données sont présentées en octets, et comme vous pouvez le voir, c'est très petit. Vous pouvez le visualiser avec la commande :

chat /proc/slabinfo | egrep dentry\|inode

Il n'est pas recommandé de l'effacer pour libérer de la mémoire Linux, car il consomme peu de mémoire et il faut un temps relativement long pour analyser à nouveau le système de fichiers.

Dois-je vraiment vider le cache ?

Tout d'abord, si beaucoup de mémoire est utilisée, vous souhaiterez peut-être vider le cache de la page, surtout si c'est celle qui occupe la mémoire. Deuxièmement, vous devrez peut-être vider le cache de la mémoire Linux si vous avez modifié des paramètres du système de fichiers ou du noyau, et maintenant vous voulez vérifier comment cela a affecté la vitesse des opérations de lecture/écriture. Dans ce cas, vous pouvez vider tous les caches et le faire sans redémarrer, ce qui est très pratique.

Le système d'exploitation Linux est conçu de telle manière qu'avant d'accéder au disque, le cache du disque sera recherché et si les données nécessaires s'y trouvent, le disque ne sera pas accessible. Si vous effacez le cache Linux, le système d'exploitation fonctionnera un peu plus lentement, car il devra rechercher des données sur le disque.

Nettoyage automatique du cache

Voyons comment vider automatiquement le cache mémoire tous les jours à deux heures du matin à l'aide du planificateur de tâches cron.

Commençons par créer script bash avec le contenu suivant :

sudo vi /usr/local/bin/clearcache.sh

synchroniser ; echo 1 > /proc/sys/vm/drop_caches

Nous ne viderons que le cache de la page, car c'est lui qui en prend le plus. Nous ne toucherons pas aux autres types, afin de ne pas baisser en vain les performances du système.

sudo chmod 755 /usr/local/bin/clearcache.sh

Il reste à ajouter la tâche au planificateur cron. Pour ce faire, exécutez la commande :

Et dans l'éditeur qui s'ouvre, ajoutez la ligne :

0 2 * * * /usr/local/bin/clearcache.sh

Ce script s'exécutera désormais toutes les nuits et nettoiera la mémoire afin que le serveur puisse fonctionner normalement.

Définition de la taille du cache mémoire

Il est beaucoup plus pratique de ne pas vider le cache à chaque fois, mais de fixer une limite, lorsqu'elle est dépassée, le système lui-même supprimera les pages supplémentaires. Vous ne pouvez pas limiter explicitement le nombre de mégaoctets que le système peut utiliser pour le cache. Toute la mémoire disponible sera utilisée selon les besoins, mais vous pouvez ajuster la vitesse à laquelle les pages expirées sont supprimées du cache.

Le fichier /proc/sys/vm/vfs_cache_pressure en est responsable. Il contient un indicateur relatif de l'agressivité avec laquelle supprimer des pages du cache. Le réglage par défaut est 100. Si vous le réduisez, le noyau supprimera moins souvent les pages et cela conduira à une augmentation très rapide du cache. A zéro, les pages ne seront pas supprimées du tout. Si la valeur est supérieure à 100, la taille du cache augmentera plus lentement et les pages inutilisées seront immédiatement supprimées.

Par exemple, définissons la taille minimale du cache :

echo 1000 > /proc/sys/vm/vfs_cache_pressure

N'oubliez pas que cela réduira considérablement les performances de votre système, car au lieu du cache, les données seront lues à partir du disque.

Comment effacer la mémoire d'échange

L'espace d'échange est très facile à nettoyer. Pour ce faire, exécutez :

swapoff -a && swapon -a

Gardez à l'esprit que lorsque le swap est effacé, toutes les données seront transférées vers la RAM.

résultats

C'est tout. Vous savez déjà comment vider le cache Linux et libérer de la mémoire. N'oubliez pas que toutes les commandes données dans cet article doivent être exécutées au nom du superutilisateur, sinon rien ne fonctionnera. Si vous avez des questions, posez-les dans les commentaires !

Articles Similaires:


Récemment sur l'un de Serveurs virtuels face au problème de longue écriture sur disque. Et sous ce sujet, j'en ai trouvé un intéressant, qui traite en détail de la question de la mise en cache des opérations d'écriture sur disque sous Linux. Cet article sera traduit aujourd'hui.

Mise en cache sous Linux

Lors de l'écriture de données sur disque (par n'importe quel programme), Linux met en cache ces informations dans une zone de mémoire appelée Page Cache. Les informations sur cette zone mémoire peuvent être visualisées à l'aide des commandes gratuit, vmstat ou alors Haut. Des informations complètes sur cette zone de mémoire peuvent être trouvées dans le fichier /proc/meminfo. Ci-dessous un exemple de ce fichier sur un serveur avec 4 Go de RAM :

MemTotal : 3950112 ko MemFree : 622560 ko Tampons : 78048 ko Cached : 2901484 ko SwapCached : 0 ko Actif : 3108012 ko Inactif : 55296 ko HighTotal : 0 ko HighFree : 0 ko LowTotal : 3950112 ko LowToFree Réécriture : 0 ko Mappé : 999 852 ko Slab : 57 104 ko Committed_AS : 3340 368 ko PageTables : 6 672 ko VmallocTotal : 536870911 ko VmallocUsed : 35 300 ko

La taille du cache de page est indiquée dans le paramètre "Cached", dans cet exemple, elle est de 2,9 Go. Lorsque des pages sont écrites en mémoire, la taille du paramètre "Dirty" augmente. Lorsque vous commencez à écrire directement sur le disque, le paramètre "Writeback" augmentera jusqu'à la fin de l'enregistrement. Il est difficile de voir "Writeback" réglé sur high, car il n'est incrémenté que pendant l'interrogation, lorsque les opérations d'entrée/sortie (E/S) sont mises en file d'attente mais pas encore écrites sur le disque.
Linux écrit généralement les données du cache sur le disque à l'aide d'un processus pdflush. À tout moment, 2 à 8 threads sont en cours d'exécution dans le système pdflush. Dans le fichier /proc/sys/vm/nr_pdflush_threads Vous pouvez voir le nombre de threads actuellement actifs. Chaque fois que tous les threads pdflush existants sont occupés pendant au moins 1 seconde. Les nouveaux threads essaient d'écrire des données dans les files d'attente de périphériques libres, de sorte que pour chaque périphérique actif, il y ait 1 thread vidant les données du cache. Chaque fois qu'une seconde passe sans aucune activité de pdflush, 1 thread est supprimé. Sous Linux, vous pouvez définir le nombre minimum et maximum de threads pdflush.

Mise en place de pdflush

Chaque flux pdflush est contrôlé par plusieurs paramètres dans /proc/sys/vm:

  • /proc/sys/vm/dirty_writeback_centisecs(par défaut 500) : en centièmes de seconde. Ce paramètre indique la fréquence à laquelle pdflush reprend l'écriture de données sur le disque. Par défaut, il reprend 2 threads toutes les 5 secondes.
    Il peut y avoir un comportement non documenté qui empêche les tentatives de réduction de dirty_writeback_centisecs pour une mise en cache des données plus agressive par le processus pdflush. Par exemple, dans les premières versions du noyau Linux 2.6, dans le fichier mm/page-writeback.c, le code incluait une logique qui décrivait "si l'écriture sur le disque prend plus de temps que le paramètre dirty_writeback_centisecs, alors définissez l'intervalle sur 1 seconde". Cette logique est décrite uniquement dans le code du noyau, et son fonctionnement dépend de la version du noyau Linux. Comme ce n'est pas très bon, vous serez donc protégé contre la réduction de ce paramètre.
  • /proc/sys/vm/dirty_expire_centisecondes(par défaut 3000) : en centièmes de seconde. Ce paramètre spécifie la durée pendant laquelle les données peuvent être mises en cache avant d'être écrites sur le disque. La valeur par défaut est très longue : 30 secondes. Cela signifie que pendant le fonctionnement normal, jusqu'à ce que suffisamment de données aient été écrites dans le cache pour appeler une autre méthode pdflush, Linux n'écrira aucune donnée sur le disque qui a été dans le cache pendant moins de 30 secondes.
  • /proc/sys/vm/dirty_background_ratio(10 par défaut) : pourcentage maximal de RAM pouvant être rempli par le cache de pages avant que les données ne soient écrites sur le disque. Certaines versions du noyau Linux peuvent définir ce paramètre sur 5 %.

    La plupart des documentations décrivent ce paramètre comme un pourcentage de la RAM totale, mais selon les sources du noyau Linux, ce n'est pas le cas. En regardant meminfo, le paramètre dirty_background_ratio est calculé à partir de la valeur MemFree + En cache - Mappé. Ainsi, pour notre système de démonstration, 10 % correspondent à un peu moins de 250 Mo, mais pas à 400 Mo.

Total : Quand pdflush commence-t-il à écrire ?

Dans la configuration par défaut, les données écrites sur le disque restent en mémoire jusqu'à :

  • ils ont plus de 30 secondes en mémoire ;
  • les pages mises en cache occupent plus de 10 % de la mémoire de travail.

Si les opérations d'écriture se produisent fréquemment sur le serveur, alors un jour le paramètre dirty_background_ratio sera atteint, et vous pourrez voir que toute écriture sur disque ne passe que par ce paramètre sans attendre l'expiration du paramètre dirty_expire_centiseconds.

Processus d'écriture des pages

Paramètre /proc/sys/vm/dirty_ratio(par défaut 40) : pourcentage maximal de RAM totale pouvant être alloué au cache de page avant que pdflush n'écrive des données sur le disque.

Note: Lors de l'écriture sur le disque, tous les processus sont verrouillés en écriture, pas seulement celui qui a rempli le tampon d'écriture. Cela peut amener un processus à bloquer toutes les opérations d'E/S sur le système. Dépensez ceci

Recommandations pour optimiser Linux pour les opérations nécessitant des écritures fréquentes

Habituellement, lorsqu'ils essaient d'augmenter les performances du sous-système de disque, les utilisateurs rencontrent le problème que Linux met trop d'informations en mémoire tampon à la fois. Cela est particulièrement difficile pour les opérations qui nécessitent une synchronisation du système de fichiers à l'aide d'appels fsync. Si, au cours d'un tel appel, il y a beaucoup de données dans le cache, le système peut "se bloquer" jusqu'à la fin de cet appel.
Un autre problème courant se produit parce qu'il y a trop de choses à écrire avant que l'écriture sur le disque physique ne commence, les E/S se produisent plus fréquemment que pendant le fonctionnement normal. Vous obtiendrez des périodes plus longues sans écrire sur le disque jusqu'à ce que le grand cache soit plein, auquel cas l'un des déclencheurs pdflush se déclenche et les données sont écrites à la vitesse maximale.

sale_background_ratio: L'outil de réglage principal, réduit généralement ce paramètre. Si votre objectif est de réduire la quantité de données stockées dans le cache afin que les données soient écrites sur le disque de manière incrémentielle plutôt qu'en une seule fois, la réduction de ce paramètre est la méthode la plus efficace. La valeur par défaut est plus acceptable pour les systèmes avec beaucoup de RAM et des disques lents.

taux de saleté: Le deuxième paramètre le plus important à régler. En réduisant considérablement ce paramètre, les applications qui doivent écrire sur le disque seront toutes bloquées.

sale_expire_centisecs: Essayez de réduire, mais pas beaucoup. Vous permet de réduire le temps passé par les pages dans le cache avant d'écrire sur le disque, mais cela réduira considérablement la vitesse moyenne d'écriture sur le disque, car. c'est moins efficace. Cela se manifestera particulièrement sur les systèmes avec des disques lents.

Instructions pour le réglage des paramètres

Dans le fichier /etc/sysctl.conf saisissez par exemple :

vm.dirty_background_ratio = 10 vm.dirty_ratio = 40

Après avoir synchronisé le cache et les données du disque, effacez le cache et enregistrez les paramètres.

synchroniser ; echo 3 > /proc/sys/vm/drop_caches ; sysctl-p

En matière d'optimisation des performances Systèmes Linux, la mémoire physique est le facteur le plus important. Naturellement, Linux offre de nombreuses options pour contrôler l'utilisation de la précieuse ressource mémoire. Les différents outils diffèrent en termes de granularité de surveillance (par exemple, à l'échelle du système, par processus, par utilisateur), d'interface (par exemple, graphique, ligne de commande, ncurses) ou le mode de fonctionnement (par exemple, interactif, mode batch).

Voici une liste partielle des programmes interface graphique ou en ligne de commande, vous avez donc l'embarras du choix pour vérifier la mémoire utilisée et libre sur les plates-formes Linux.

1. /proc/meminfo

Le moyen le plus simple de vérifier l'utilisation de la RAM consiste à utiliser /proc/meminfo. Cette mise à jour dynamique fichier virtuel, en fait, la source d'informations d'affichage pour de nombreux autres outils liés à la mémoire tels que les outils gratuits, top et ps. A partir de la quantité disponible/ mémoire physique jusqu'à la quantité de mémoire tampon qui devrait être réécrite sur le disque, /proc/meminfo contient tout ce que vous voulez savoir sur l'utilisation mémoire système. Les informations sur la mémoire de processus sont également disponibles à partir de /proc/ /statm et /proc/ /statut

$ chat /proc/meminfo

2.haut

La commande atop est un système interactif basé sur ncurses et un observateur de processus pour l'environnement du terminal. Il affiche des résumés mis à jour dynamiquement des sources système (processeur, mémoire, réseau, E / S, noyau) avec des avertissements codés par couleur au cas où chargement élevé systèmes. Il peut également trier les processus (ou les utilisateurs) par ordre de consommation de ressources la plus élevée, de sorte que Administrateur du système peut dire quel processus ou quel utilisateur est responsable du démarrage du système. Les rapports de statistiques sur la mémoire incluent la mémoire totale/libre, la mémoire mise en cache/tampon et les informations sur la mémoire virtuelle.

$ sudo au sommet

3 gratuits

La commande free est un moyen simple et rapide d'obtenir un aperçu de l'utilisation de la mémoire à partir de /proc/meminfo. Il affiche un instantané de la mémoire physique totale/disponible et de la pagination du système, ainsi que de l'espace tampon utilisé/libre dans le noyau.

Moniteur système 4GNOME

Le moniteur système GNOME est applications graphiques qui est montré une histoire brève utiliser ressources système pour le processeur, la mémoire, l'espace d'échange et le réseau. Il offre également un processus de surveillance de l'utilisation du processeur et de la mémoire.

$ gnome-system-monitor

5.htop

La commande htop est un visualiseur de processus interactif basé sur ncurses qui affiche l'utilisation de la mémoire en temps réel par processus. Il peut rapporter la taille de la mémoire principale (RSS) utilisée par le processus, la taille totale du programme en mémoire, la taille de la bibliothèque, la taille de la page partagée et la taille de la page sale (dans le cache ) pour tous les processus en cours d'exécution. Vous pouvez faire défiler horizontalement ou verticalement la liste (triée) de tous les processus.

Moniteur système 6KDE

Alors que le bureau GNOME a le moniteur système GNOME, le bureau KDE a son propre homologue : le moniteur système KDE. Sa fonctionnalité est essentiellement similaire à la version GNOME, c'est-à-dire qu'elle affiche l'historique en temps réel de l'utilisation des ressources système ainsi que la consommation CPU/mémoire par les processus individuels.

$ksysguard

7.memstat

L'utilitaire memstat est utile pour identifier les processus exécutables et les bibliothèques partagées qui consomment de la mémoire virtuelle. Étant donné l'ID de processus, memstat découvre la quantité de mémoire virtuelle utilisée par le code exécutable, les données et les bibliothèques partagées associés au processus.

$ memstat -p

8.nmon

L'utilitaire nmon est un outil de référence système basé sur ncurses qui surveille le processeur, la mémoire, les E/S de disque, le noyau, système de fichiers et sources en ligne. Sur l'utilisation de la mémoire, il peut afficher des informations telles que la mémoire totale/libre, l'espace d'échange, la mémoire tampon/cachée, les statistiques chargées/déchargées de la mémoire virtuelle, le tout en temps réel.

9.ps

La commande ps peut afficher l'utilisation de la mémoire des processus individuels en temps réel. Les informations d'utilisation de la mémoire affichées incluent %MEM (pourcentage de mémoire physique utilisée), VSZ (mémoire virtuelle totale utilisée) et RSS (mémoire physique totale utilisée). Vous pouvez trier la liste des processus en utilisant l'option "-sort". Par exemple, pour trier par RSS décroissant :

$ ps aux --sort -rss

10. petit

La commande smem vous permet de mesurer l'utilisation de la mémoire physique de divers processus et utilisateurs en fonction des informations disponibles dans /proc. Cet utilitaire utilise la métrique PSS (Proportionately Installed Size) pour estimer avec précision la façon dont les processus Linux utilisent la taille de mémoire effective. L'analyse de l'utilisation de la mémoire peut être exportée vers des graphiques sous forme de barres et de tranches de livres.

$ sudo smem --nom de la tarte -c "pss"

11. haut

La commande top offre une surveillance en temps réel des processus en cours d'exécution ainsi que diverses statistiques de processus sur l'utilisation des ressources. Les informations relatives à la mémoire comprennent %MEM (pourcentage de mémoire utilisée), VIRT (mémoire virtuelle totale utilisée), SWAP (quantité de mémoire virtuelle échangée), CODE (quantité de mémoire physique allouée à l'exécution du code), DATA (quantité de mémoire physique allouée pour données non exécutables), RES (quantité totale de mémoire physique utilisée, CODE+DATA) et SHR (quantité de mémoire potentiellement partagée avec d'autres processus). Vous pouvez trier la liste des processus en fonction de l'utilisation ou de la taille de la mémoire.

12. vmstat

L'utilitaire de ligne de commande vmstat affiche des statistiques immédiates et moyennes pour diverses activités système, notamment le processeur, la mémoire, les interruptions et les E/S de disque. En tant que source d'informations sur la mémoire, cette commande affiche non seulement l'utilisation de la mémoire physique (par exemple, la mémoire totale/utilisée et la mémoire tampon/cache), mais également les statistiques de la mémoire virtuelle (par exemple, les pages chargées/déchargées en mémoire, chargées/chargées).

L'utilitaire de ligne de commande vmstat affiche des statistiques instantanées et moyennes de diverses activités système couvrant le processeur, la mémoire, les interruptions, et disque E/S. En ce qui concerne les informations sur la mémoire, la commande affiche non seulement l'utilisation de la mémoire physique (par exemple, la mémoire totale/utilisée et la mémoire tampon/cache), mais également les statistiques de la mémoire virtuelle (par exemple, la mémoire paginée/sortante, échangée/sortante).

$ vmstat-s

© 2023 ermake.ru -- À propos de la réparation de PC - Portail d'information