Comment puis-je déterminer la quantité totale de mémoire physique (RAM) de ma boîte linux adapté pour être analysé par un script shell?
Je suis en tapant un script shell pour trouver la mémoire physique totale dans certains RHEL linux boîtes.
Tout d'abord, je tiens à souligner que je suis intéressé par le mémoire physique totale reconnu par le noyau, et pas seulement les mémoire disponible. Donc, merci d'éviter les réponses suggérant de lire /proc/meminfo ou d'utiliser le gratuit, haut ou sar commandes -- Dans tous ces cas, leur "de mémoire totale de" valeurs moyennes "mémoire disponible" ceux.
La première pensée a été de lire le noyau de messages:
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 d'EMC2 du logiciel PowerPath et ses inondations les messages de démarrage du noyau de démarrage, ce qui utile de démarrage du noyau message n'est pas disponible, pas même dans le /var/log/dmesg fichier.
La deuxième option était la dmidecode de commande (je suis mis en garde contre la possible incompatibilité de noyau reconnu de la RAM et de la mémoire vive en raison des limitations de certains anciens noyaux et les architectures). L'option --mémoire simplifie le script mais j'ai réalisé que les anciennes versions de cette commande n'a aucun --mémoire option.
Ma dernière chance a été la getconf de commande. Il indique la taille de page de mémoire, mais pas le nombre total de pages physiques -- le _PHYS_PAGES variable système semble être à la disposition des pages physiques, non pas le nombre total de pages physiques.
# getconf -a | grep PAGES PAGESIZE 4096 _AVPHYS_PAGES 1049978 _PHYS_PAGES 15466409
Ma question: Est-il un autre moyen d'obtenir la quantité totale de mémoire physique, apte à être analysé par un script shell?
- Cela devrait être migré vers linux & unix
Vous devez vous connecter pour publier un commentaire.
Si vous êtes intéressé par la RAM physique, utilisez la commande
dmidecode
. Il vous donne un beaucoup plus d'informations que cela, mais en fonction de votre cas d'utilisation, vous pouvez également savoir si le 8G dans le système de 2x4GB bâtons ou 4x2 go de bâtons.Avez-vous essayé
cat /proc/meminfo
? Vous pouvez ensuite grep ce que vous voulez, MemTotal par exempleMise à jour de l'Exemple (btw. merci, Masta):
awk '/MemTotal/ {print $2}' /proc/meminfo
Le moins de canaux de communication le mieux.grep -oP '^MemTotal:\s+\K.*' /proc/meminfo
awk
est standardisée par la norme POSIX, maisgrep
s'options-o
et-P
sont pas! Votre exemple fonctionnera très bien avec GNUgrep
(mais GNU dit encore que le PCRE de la mise en œuvre est expérimental), mais il ne fonctionnera probablement pas avec d'autres implémentations.cat /proc/meminfo | grep MemTotal
ou gratuite vous donne le montant exact de la RAM de votre serveur. Ce n'est pas "mémoire disponible".Je suppose que ton problème vient quand vous avez une machine virtuelle et que vous souhaitez calculer le montant total de la mémoire organisé par l'hyperviseur, mais vous devrez ouvrir une session dans l'hyperviseur dans ce cas.
est équivalent à
cat /proc/meminfo | grep MemTotal
rapportsMemTotal: 3957032 kB
, c'est un peu court de 4 GO. L'OP (et j'ai) sont à la recherche de quelque chose qui ferait rapport à 4 GO.grep MemTotal /proc/meminfo
/proc/meminfo
les rapports de la mémoire dans kiB, puis mislabels il ko. Répondant à l'endroit où son "perdu" la mémoire est allé en est une autre discussion, nécessitant une connaissance approfondie de son matériel informatique (en particulier, le fonctionnement interne du gestionnaire de mémoire)./proc/meminfo
rapports de nombres dans kiB est une partie extrêmement importante de cette discussion, indépendamment de si @de l'Etp vise à poser une autre question.Un plus utile de commande:
vmstat -s | grep memory
exemple de sortie sur ma machine est:
une autre commande utile pour obtenir des informations sur la mémoire est:
free
exemple de sortie est:
Une observation, c'est que la commande
free
donne des informations sur l'espace d'échange aussi.Le lien suivant peut être utile pour vous:
http://www.linuxnix.com/find-ram-details-in-linuxunix/
vmstat -s -S M | grep ' memory'
Ajouter les 2 dernières entrées de
/proc/meminfo
, ils vous donnent l'exacte mémoire présente sur l'ordinateur hôte.Exemple:
10240 + 4184064 = 4194304 ko = 4096 MO.
Ce qui vous donnera le total de la mémoire dans votre système en un format lisible par l'homme et automatiquement l'échelle de l'unité appropriée ( par exemple, octets, KO, MO ou GO).
L'ajout de toutes les valeurs ci-dessus affiche après "Taille:" donnera la valeur exacte de la taille physique de l'ensemble de RAM bâtons dans le serveur.
Totale de la mémoire dans
Mb
:ou:
Ce sont les moyens :
1. /proc/meminfo
Vous pouvez écrire un code ou script pour l'analyser.
2. Utilisation sysconf en utilisant des macros ci-dessous
sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);
3. En utilisant sysinfo appel système
int sysinfo(struct sysinfo *info);
struct sysinfo {
.
Total de mémoire en ligne
Calculer le total de mémoire en ligne à l'aide de la sys-fs.
Exemple de sortie de 4 GO système:
Explication
Nombre d'octets dans un bloc de mémoire (valeur hexadécimale). À l'aide de 0x devant de la valeur permet de s'assurer qu'il est correctement manipulés pendant le calcul.
Itération de tous les blocs de mémoire afin de vérifier qu'elles sont en ligne et ajouter la calcul de la taille d'un bloc à totalmem si elles le sont.
Vous pouvez le modifier ou le supprimer si vous préférez un autre état de la mémoire.
\
) pour continuer dans la ligne suivante -- en fait, vous pouvez utiliser le&&
à la fin de la ligne de but.Je trouve
htop
un outil utile.et puis
donnera les informations dont vous avez besoin.
htop
installation n'est pas liée àfree
l'utilisation de la commande