Cela peut avoir du sens sur les systèmes NUMA (accès mémoire non uniforme), où, généralement, chaque CPU (socket) peut accéder à toute la mémoire de manière transparente, mais sa propre mémoire peut être accessible plus rapidement que la mémoire d'autres sockets, en association avec des applications HPC parallèles.
De nombreuses applications parallèles simples ont tendance à effectuer des E/S de fichiers à partir d'un seul processus, laissant ainsi, à la sortie, une grande partie de la mémoire sur un seul nœud NUMA allouée au cache de disque, tandis que sur l'autre nœud NUMA, la mémoire est principalement libre. Dans ces situations, puisque le processus de récupération de cache dans le noyau Linux, à ma connaissance, n'est toujours pas conscient de la NUMA, les processus s'exécutant sur le nœud NUMA qui a de la mémoire allouée au cache sont contraints d'allouer de la mémoire sur l'autre nœud NUMA, tant qu'il y a de la RAM libre sur l'autre nœud, tuant ainsi les performances.
Cependant, dans un système HPC, il serait plus sage de nettoyer le cache avant de commencer un nouveau travail d'utilisateur, et non à un moment spécifique avec cron.
Pour les applications non parallèles, ce problème est peu probable de se produire.
65 votes
Trouvez la personne qui a mis cela et demandez-lui pourquoi elle l'a fait. Comme vous l'avez deviné correctement, il n'y a pas de raison évidente pour cela.
2 votes
Cette personne n'est plus employée. Je ne peux donc pas lui demander. Lorsque je demande à d'autres personnes, elles disent que c'est une bonne pratique de libérer de la mémoire vive mais je ne vois pas l'intérêt. Dans quels cas devrais-je utiliser le code ci-dessus de toute façon ?
13 votes
Débogage du noyau. C'est tout. Cela ne libère pas réellement de la RAM ; il supprime des caches, comme son nom l'indique, et réduit donc les performances.
1 votes
Au fait, nous avons un serveur sur VMware qui n'a pas beaucoup de mémoire et nous avons une tâche cron qui surveille sa mémoire vive avec
vmstat 2 3|tail -1|awk '{print $4}'
lorsque la valeur baisse de plus que certains montant, il libère des caches sinon le serveur va planter30 votes
@ivcode Ensuite, vous devriez trouver et corriger le problème avec ce serveur plutôt que d'essayer d'éviter les conditions qui le provoquent. Si ma voiture calait à chaque fois que je tournais brusquement à droite, éviter les virages brusques à droite est une solution médiocre.
0 votes
Merci beaucoup @David pour tes explications claires. Cela m'a incité à soumettre la question au développeur logiciel plutôt que de chercher des solutions temporaires.
0 votes
Je ne peux que supposer que peut-être c'était une mesure pour réduire les pertes de données, peut-être à cause de plantages/paniques/pertes de courant fréquents.
7 votes
Lié thedailywtf.com/Articles/Modern-Memory-Management.aspx Fortement affirmant que c'est une mauvaise idée.
2 votes
@EkriirkE pour réduire les pertes de données, seul
sync
serait suffisant, vider les caches n'apporterait rien dans ce but.7 votes
Connexe, et une description utile du "problème": linuxatemyram.com
4 votes
sudo killall -r .*
libère également beaucoup de mémoire0 votes
Peut-être que la personne qui a mis cela est Patrick R : serverfault.com/questions/105606/supprimer-linux-cached-ram
1 votes
@Max
sudo killall -s KILL -r .* `;)`
5 votes
Il s'agit probablement de "système de guano". La personne qui l'a mis là ne se souvient peut-être pas pourquoi il est là, ou si ça fonctionne, ou pourquoi ça fonctionne si ça fonctionne. Peut-être que personne ne sait pourquoi il est là. Il reste là parce que "si ça fonctionne, ne le casse pas". Dans les systèmes avec un contrôle de configuration médiocre, cette merde s'accumule. La réponse à long terme est d'améliorer la gestion de la configuration/changement/révision de vos systèmes. Un système de gestion de configuration comme CFEngine, Chef ou Puppet ne vous empêchera pas de faire des choses stupides, mais vous devrez être constamment stupide, ce qui (nous l'espérons) est plus susceptible d'être repéré et traité.