{"id":57,"date":"2008-05-06T22:14:26","date_gmt":"2008-05-06T20:14:26","guid":{"rendered":"http:\/\/wp1.fredptitgars.net\/index.php\/2008\/05\/06\/gestion-de-la-memoire\/"},"modified":"2008-05-06T22:14:26","modified_gmt":"2008-05-06T20:14:26","slug":"gestion-de-la-memoire","status":"publish","type":"post","link":"https:\/\/fredptitgars.ovh\/?p=57","title":{"rendered":"Gestion de la m\u00e9moire"},"content":{"rendered":"<p>Le premier r\u00e9flexe, lorsque l&rsquo;on veut obtenir des informations sur la m\u00e9moire, consiste \u00e0 utiliser la commande free. Or, en approfondissant un peu, vous vous apercevrez tr\u00e8s vite que les informations affich\u00e9es ne se montrent pas forc\u00e9ment d&rsquo;une grande clart\u00e9 pour les non initi\u00e9s. Nous allons donc \u00e9tudier diff\u00e9rentes commandes permettant d&rsquo;obtenir ces informations que nous allons utiliser \u00e0 chaque fois dans un script charg\u00e9 de pr\u00e9senter les informations de mani\u00e8re plus pertinente<\/p>\n<p>Avant de commencer, il faut comprendre de quelle mani\u00e8re Linux g\u00e8re la m\u00e9moire vive. Il l\u2019utilise pour le noyau, pour lancer les applications mais aussi pour stocker les buffers et les caches. Or l&rsquo;espace utilis\u00e9 par les caches se trouve lib\u00e9r\u00e9 si un programme en a besoin. Dans tous les listings qui vont suivre, nous afficherons donc trois informations : la quantit\u00e9 de m\u00e9moire totale, la quantit\u00e9 de m\u00e9moire libre et la quantit\u00e9 de m\u00e9moire disponible, laquelle correspond tout simplement \u00e0 la m\u00e9moire libre plus celle utilis\u00e9e par les caches.<\/p>\n<h2>Le fichier \/proc\/meminfo<\/h2>\n<p>Le fichier \/proc\/meminfo est mis \u00e0 jour en permanence par le noyau Linux et contient toutes les informations sur la m\u00e9moire au moment o\u00f9 vous affichez son contenu. Comme la plupart des fichiers contenus dans ce r\u00e9pertoire, il sert de base \u00e0 certaines commandes qui se contentent d&rsquo;afficher les informations ad hoc\u2026 tout comme notre premier code source :<\/p>\n<p><code><br \/>\n#!\/bin\/bash<br \/>\ntotal=`echo $(grep MemTotal: \/proc\/meminfo) | cut -d' ' -f2`<br \/>\nlibre=`echo $(grep MemFree: \/proc\/meminfo) | cut -d' ' -f2`<br \/>\nbuffers=`echo $(grep Buffers: \/proc\/meminfo) | cut -d' ' -f2`<br \/>\ncached=`echo $(grep Cached: \/proc\/meminfo) | cut -d' ' -f2`<br \/>\ndispo=$(($libre+$buffers+$cached))<br \/>\necho \"Memoire totale     : $total Ko\"<br \/>\necho \"Memoire libre      : $libre Ko\"<br \/>\necho \"Memoire disponible : $dispo Ko\"<br \/>\n<\/code><\/p>\n<h2>La commande free<\/h2>\n<p>La commande free se borne \u00e0 lire les informations du fichier \/proc\/meminfo et \u00e0 les afficher. Vous pouvez utiliser certaines options pour choisir l&rsquo;unit\u00e9 d&rsquo;affichage des valeurs (-b pour octets, -k pour kilooctets et -m pour m\u00e9gaoctets), supprimer l&rsquo;affichage des valeurs ajust\u00e9es en fonction du cache avec -o, afficher un total g\u00e9n\u00e9ral via -t mais aussi rafraichir p\u00e9riodiquement les informations avec -s secs. Nous allons l\u2019utiliser dans ce second code source qui se montre plus exploitable en raison de l&rsquo;utilisation d&rsquo;un affichage en m\u00e9gaoctets :<br \/>\n<code><br \/>\n#!\/bin\/bash<br \/>\nfree -m > \/tmp\/l2.tmp<br \/>\ntexte=`cat \/tmp\/l2.tmp | grep Mem:`<br \/>\ntotal=`echo $texte | cut -d' ' -f2`<br \/>\nlibre=`echo $texte | cut -d' ' -f4`<br \/>\ntexte=`cat \/tmp\/l2.tmp | grep cache:`<br \/>\ndispo=`echo $texte | cut -d' ' -f4`<br \/>\nrm -f l2.tmp<br \/>\necho \"Memoire totale     : $total Mo\"<br \/>\necho \"Memoire libre      : $libre Mo\"<br \/>\necho \"Memoire disponible : $dispo Mo\"<br \/>\n<\/code><\/p>\n<h2>La commande procinfo<\/h2>\n<p>M\u00eame si la commande procinfo ne s&rsquo;av\u00e8re pas d&rsquo;une grande utilit\u00e9 dans ce contexte puisque son affichage correspond \u00e0 celui de la commande pr\u00e9c\u00e9dente, elle pr\u00e9sente l&rsquo;avantage d&rsquo;afficher d&rsquo;autres informations extraites elles-aussi du r\u00e9pertoire \/proc. En effet, vous pourriez, avec son aide, surveiller l&rsquo;utilisation du processeur, le temps de connexion des utilisateurs, etc.<br \/>\nLa commande top<\/p>\n<p>Derni\u00e8re commande permettant de conna\u00eetre l&rsquo;\u00e9tat de votre m\u00e9moire, top vous donne aussi de nombreuses autres informations et notamment la consommation m\u00e9moire des principaux processus. Celle-ci pr\u00e9sente donc l&rsquo;avantage de pouvoir fournir l&rsquo;affichage pr\u00e9c\u00e9dent mais aussi la consommation en m\u00e9moire de certains processus, comme vous le montre le code source ci-dessous. Celui-ci se montre beaucoup plus complexe et n\u00e9cessite donc quelques explications : pour commencer, nous testons le nombre d&rsquo;arguments fournis lors de l&rsquo;appel. S&rsquo;il n&rsquo;y en a aucun, l&rsquo;effet se montre identique aux programmes pr\u00e9c\u00e9dents, alors que dans le cas contraire, nous recherchons les num\u00e9ros de processus correspondants que nous passons \u00e0 la commande ps par l&rsquo;interm\u00e9diaire de l&rsquo;option -p. <\/p>\n<hr \/>\n<h2>Liste du materiel<\/h2>\n<p>pour lister les caract\u00e9ristique de la m\u00e9moire (m\u00e9teriel) la commande magique est :<\/p>\n<p><code><br \/>\ndmidecode -t memory<br \/>\n<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le premier r\u00e9flexe, lorsque l&rsquo;on veut obtenir des informations sur la m\u00e9moire, consiste \u00e0 utiliser la commande free. Or, en approfondissant un peu, vous vous apercevrez tr\u00e8s vite que les informations affich\u00e9es ne se montrent pas forc\u00e9ment d&rsquo;une grande clart\u00e9 pour les non initi\u00e9s. Nous allons donc \u00e9tudier diff\u00e9rentes commandes permettant d&rsquo;obtenir ces informations que [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-57","post","type-post","status-publish","format-standard","hentry","category-linux"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=\/wp\/v2\/posts\/57","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=57"}],"version-history":[{"count":0,"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=\/wp\/v2\/posts\/57\/revisions"}],"wp:attachment":[{"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=57"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=57"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=57"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}