Je tape un script shell pour connaître la mémoire physique totale dans certaines boîtes Linux RHEL.
Tout d'abord, je tiens à souligner que je suis intéressé par la mémoire physique totale reconnue par le noyau, pas seulement la mémoire disponible . Par conséquent, évitez les réponses suggérant de lire / proc / meminfo ou d'utiliser les commandes free , top ou sar - Dans tous ces cas, leurs valeurs " mémoire totale " signifient celles de " mémoire disponible ".
La première pensée a été de lire les messages du noyau de démarrage:
Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)
Mais dans certaines boîtes de Linux, en raison de l'utilisation du logiciel PowerPath de EMC2 et ses inondations messages de démarrage dans le démarrage du noyau, ce message du noyau de démarrage utile n'est pas disponible, même pas dans le répertoire / var / log / dmesg fichier.
La deuxième option était la commande dmidecode (je suis mis en garde contre la possible discordance entre la RAM reconnue par le noyau et la RAM réelle en raison des limitations de certains noyaux et architectures plus anciens). L'option --memory simplifie le script mais j'ai réalisé que les anciennes versions de cette commande n'avaient pas d' option --memory .
Ma dernière chance était la commande getconf . Il indique la taille de la page mémoire, mais pas le nombre total de pages physiques - la variable système _PHYS_PAGES semble être les pages physiques disponibles, pas le nombre total de pages physiques.
# getconf -a | grep PAGES PAGESIZE 4096 _AVPHYS_PAGES 1049978 _PHYS_PAGES 15466409
Ma question: existe-t-il un autre moyen d'obtenir la quantité totale de mémoire physique, susceptible d'être analysée par un script shell?
la source
Réponses:
Si vous êtes intéressé par la RAM physique, utilisez la commande
dmidecode
. Cela vous donne beaucoup plus d'informations que cela, mais en fonction de votre cas d'utilisation, vous voudrez peut-être également savoir si les 8G du système proviennent de clés de 2x4 Go ou de clés 4x2 Go.la source
Avez-vous essayé
cat /proc/meminfo
? Vous pouvez ensuite extraire ou grep ce que vous voulez, MemTotal par exempleou
la source
awk '/MemTotal/ {print $2}' /proc/meminfo
Moins il y a de tuyaux, mieux c'est.grep -oP '^MemTotal:\s+\K.*' /proc/meminfo
awk
est standardisé par POSIX maisgrep
les options de-o
et-P
ne le sont pas! Votre exemple fonctionnera bien avec GNUgrep
(mais GNU dit toujours que l'implémentation PCRE est expérimentale) mais il ne fonctionnera probablement pas avec d'autres implémentations.cat /proc/meminfo | grep MemTotal
ou gratuit vous donne la quantité exacte de RAM dont dispose votre serveur. Ce n'est pas de la "mémoire disponible".Je suppose que votre problème survient lorsque vous avez une machine virtuelle et que vous souhaitez calculer la quantité totale de mémoire hébergée par l'hyperviseur, mais vous devrez vous connecter à l'hyperviseur dans ce cas.
est équivalent à
la source
cat /proc/meminfo | grep MemTotal
rapports de mémoire de 4 GoMemTotal: 3957032 kB
, c'est un peu moins de 4 Go. L'OP (et moi) recherchons quelque chose qui rapporterait 4 Go.grep MemTotal /proc/meminfo
3957032 kB
est juste mal étiqueté. Il devrait être étiqueté kiB, comme indiqué dans cet article . Cela signifie qu'il rapporte en réalité 4 052 000 768 octets, ce qui est légèrement supérieur à 4 Go. Cela est dû au fait que les implémentations / proc / meminfo sont antérieures à la notation kiB./proc/meminfo
rapporter des nombres en kio est une partie extrêmement importante de cette discussion, que @TvE ait l'intention de poser une question différente.Ajoutez les 2 dernières entrées de
/proc/meminfo
, elles vous donnent la mémoire exacte présente sur l'hôte.Exemple:
10240 + 4184064 = 4194304 ko = 4096 Mo.
la source
Une autre commande utile: un
vmstat -s | grep memory
exemple de sortie sur ma machine est:
une autre commande utile pour obtenir des informations sur la mémoire est: l'
free
exemple de sortie est:
Une observation ici est que, la commande
free
donne également des informations sur l'espace d'échange.Le lien suivant peut vous être utile:
http://www.linuxnix.com/find-ram-details-in-linuxunix/
la source
vmstat -s -S M | grep ' memory'
Cela vous fournira la mémoire totale de votre système dans un format lisible par l'homme et sera automatiquement mis à l'échelle vers l'unité appropriée (par exemple, octets, Ko, Mo ou Go).
la source
L'ajout de toutes les valeurs ci-dessus affichées après "Size:" donnera la taille physique totale exacte de toutes les clés RAM du serveur.
la source
Mémoire totale en ligne
Calculez la mémoire totale en ligne à l'aide de sys-fs.
Exemple de sortie pour un système de 4 Go:
Explication
Nombre d'octets dans un bloc de mémoire (valeur hexadécimale). L'utilisation de 0x devant la valeur garantit qu'elle est correctement gérée pendant le calcul.
Itérer sur tous les blocs de mémoire disponibles pour vérifier qu'ils sont en ligne et ajouter la taille de bloc calculée à totalmem s'ils le sont.
Vous pouvez modifier ou supprimer cela si vous préférez un autre état de la mémoire.
la source
\
) pour continuer à la ligne suivante - en fait, vous pouvez utiliser le&&
à la fin de la ligne à cette fin.Mémoire totale dans
Mb
:ou:
la source
Voici les moyens:
1. / proc / meminfo
Vous pouvez écrire un code ou un script pour l'analyser.
2. Utilisez sysconf en utilisant les macros ci-dessous
sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);
3. En utilisant l'appel système sysinfo
int sysinfo (struct sysinfo * info);
struct sysinfo {.
la source
Je trouve
htop
un outil utile.puis
vous donnera les informations dont vous avez besoin.
la source