Bonjour,
J'ai créé un petit script d'une ligne contenant un mod de purge de la Ram à intervalle régulier car j’observai que cette dernière était utilisée à 98 % très souvent pour rien. L’exécution de cette ligne faisait retomber l’utilisation de la mémoire de 98% à 15% puis cela remontait en environ 5 jours sans que l'ordinateur ne soit utilisé. A noter qu'il s'agit d'un VM Promox sous Linux pve 4.15.18-26.
Voici le petit script édité en root :
nano /home/script/script_purge_RAM.sh :
#!/bin/bash
echo $(sysctl vm.drop_caches=3)
exit 0
J'ai rendu ce script exécutable
chmod +x /home/script/script_purge_RAM.sh
et en vérifiant via ls -al :
-rwxrwx--- 1 root root 432 Mar 31 09:26 /home/script/script_purge_RAM.sh
Le crontab -e me donne :
00 */3 * * * /home/script/script_purge_RAM.sh
Ainsi quand je lance le script :
bash /home/script/script_purge_RAM.sh
J'obtiens :
sysctl vm.drop_caches=3
Ce qui est normal
Mais Cron me retourne :
/home/script/script_purge_RAM.sh: line 14: sysctl: command not found
J'ai vérifié le $PATH et
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
J'ai l'impression qui manque /root/bin au $PATH mais je ne sais pas comment l'ajouter.
# Gros mélange
Posté par Kerro . Évalué à 4. Dernière modification le 31 mars 2020 à 19:15.
Le dossier
/root/bin
contient quoi ?Il ne contient ni ton script, ni l'exécutable
sysctl
.Donc à quoi servirait ce chemin ?
Le message d'erreur est clair : la commande
sysctl
n'est pas trouvée.Il suffit en principe de mettre le chemin complet de l'exécutable dans ton script :
Mais c'est effectivement étrange si le $PATH de cron est celui que tu dis (ce qui n'est pas certain du tout : comment as-tu vérifié que c'est le $PATH lors de l'exécution de ta tâche cron ?).
As-tu des problèmes de saturation de la mémoire ? Par exemple des programmes qui ne peuvent pas se lancer en raison de mémoire insuffisante.
Quels sont les élément qui te permettent de savoir que cette mémoire est utilisée pour rien ?
Quel programme l'utilise ? Est-ce une fuite de mémoire ?
Si c'est un truc totalement inutile, ne peux-tu pas éviter que le programme correspondant ne soit pas lancé ?
La commande
sysctl vm.drop_caches=3
demande au noyau de vider les caches des systèmes de fichiers.Donc tu demandes à ton système de ne pas utiliser la mémoire libre pour optimiser les accès disques.
Lorsque le noyau constate qu'il faut allouer de la mémoire supplémentaire pour les besoins d'un programme, il diminue la taille des caches. Ça permet de profiter de la mémoire inutilisée tout en s'assurant qu'elle est disponible.
# Hips!
Posté par Lol Zimmerli (site web personnel, Mastodon) . Évalué à 5.
Pourquoi avoir acheté toute cette RAM si tu veux ne pas t'en servir ? Revends-la!
Ton ordi utilise la RAM inutilisée pour faire du cache des fichiers souvent demandés sur le disque et le noyau peut à tout moment purger ça pour faire de la place en RAM. Alors pourquoi ne pas le laisser faire ?
La gelée de coings est une chose à ne pas avaler de travers.
# Euh...
Posté par Tonton Th (Mastodon) . Évalué à 3.
J'avoue humblement avoir du mal à comprendre ce bout de code :
echo $(sysctl vm.drop_caches=3)
. Si tu pouvais expliquer un peu, ça m'éviterais de me poser des questions sur mon état mental.# Déjà Merci
Posté par AureusMS . Évalué à 1.
Déjà merci de m'avoir lu.
Je ne débute pas dans le monde Linux mais je reste encore un gros débutant.
L'ordinateur est derrière un parefeu matériel complet qui bloque tous les ports vers l'extérieur du réseau interne. Je pense comprendre que, concernant l'utilisation de la RAM sur cet ordinateur, une tâche s'effectue à intervalle régulier mais que, comme certains ports sont bloqués, la RAM augmente.
C'est une hypothèse, soyez indulgent ;-). En effet, quand je laisse les ports ouverts 123 et 80,443, la RAM reste stable. Cela pourrait venir ainsi des demandes de synchronisations NTP mais j'en sais pas plus… (et je suis très intéressé de savoir comment diagnostiquer.).
Pour répondre à un commentaire précédent :
echo $(sysctl vm.drop_caches=3)
Je me suis basé sur un article : https://www.windows8facile.fr/linux-vider-memoire-ram/. Honnêtement, si je sais ce qui la sature, je m'en passerai… Je sais que ce n'est pas très judicieux de jouer avec la RAM.
Pour la solution /sbin/sysctl…, j'essaye et vous retourne cela.
Enfin concernant :
Cet ordinateur est le "Master" des machines virtuelles en dessous. J'utilise Promox.
A part la commande top ou free -h, je ne sais pas comment savoir comment la RAM est utilisé.
[^] # Re: Déjà Merci
Posté par NeoX . Évalué à 3.
donc ca peut être une VM/CT qui consomme ta RAM
il faut analyser les graphes de chaque VM/CT
mais comme indiquer plus haut, tant que la machine ne swap pas, c'est normal que l'usage de RAM augmente, il faut regarde les valeurs
ici par exemple :
sur 32Go (total), il n'en reste certes que 11Go de libre (free), mais il y en a 11Go de pris dans le buff/cache
free a la bonne idée de preciser qu'en fait il y a en réalité 21Go de dispo (available)
car ton noyau va réduire l'usage du cache s'il a besoin d'utiliser plus de memoire pour les programmes.
note que le SWAP ici n'est pas utilisé
# [RESOLU]...
Posté par AureusMS . Évalué à 1.
Le problème de message d'erreur provenait bien de /sbin/sysctl qui n'était pas renseigné correctement.
Merci encore à ceux qui m'ont aidé.
J'en profite pour dire que j'ai suivi vos conseils et ai désactivé cette commande pour observer la gestion de la RAM. En effet, comme l'indiquait NeoX, la "fuite" proviendrait des machines virtuelles dont une que je soupçonne un peu plus…
Encore merci pour l'aide.
Prenez soin de vous.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.