C/C++, l'utilisation de la mémoire de l'API de Linux/Windows
J'aimerais obtenir des informations sur l'utilisation mémoire pour à la fois par des processus et du système de large. Dans Windows, il est assez facile. GetProcessMemoryInfo et GlobalMemoryStatusEx faire ces emplois grandement et très facilement. Par exemple, GetProcessMemoryInfo donne "PeakWorkingSetSize" de ce processus. GlobalMemoryStatusEx retourne à l'échelle du système de la mémoire disponible.
Cependant, j'ai besoin de le faire sur Linux. J'essaie de trouver un système Linux Api qui sont l'équivalent GetProcessMemoryInfo et GlobalMemoryStatusEx.
J'ai trouvé 'getrusage'. Cependant, max 'ru_maxrss' (resident set size) struct rusage est tout à zéro, ce qui n'est pas mis en œuvre. Aussi, je n'ai aucune idée d'obtenir à l'échelle du système de la mémoire libre.
Solution actuelle pour elle, je suis en utilisant le "system("ps -p %my_pid -o vsz,rsz");". Manuellement la connexion au fichier. Mais, c'est sale et pas très pratique pour traiter les données.
J'aimerais savoir un peu de fantaisie Linux Api à cette fin.
Je voulais par processus et de l'ensemble du système, et j'ai résolu ce problème.
OriginalL'auteur minjang | 2009-11-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez voir comment c'est fait dans libstatgrab.
Et vous pouvez également l'utiliser (GPL)
Puis marquer la réponse acceptée et upvote.
OriginalL'auteur alexkr
Linux a un (modulaire) système de fichiers de l'interface de l'extraction de ces données à partir du noyau, donc utilisable par presque toutes les langues ou outil de scripting.
Mémoire peut être complexe. Il y a l'exécutable du programme lui-même, sans doute mmap () " ed. Les bibliothèques partagées. Pile d'utilisation. Tas utilisation. Des parties du logiciel résident dans la mémoire RAM. Portions échangé. Etc.
Est quoi exactement la "PeakWorkingSetSize"? Il semble que le maximum de résident taille de l'ensemble (le maximum de la non-échangé physique-mémoire RAM utilisée par le processus).
Mais il pourrait aussi être la mémoire virtuelle totale de l'empreinte de l'ensemble du processus (somme de la RAM et ÉCHANGÉ des pièces).
Indépendamment, sous Linux, vous pouvez strace un processus pour voir son noyau, au niveau des interactions. "ps" obtient ses données de /proc/${PID}/* les fichiers.
Je vous suggère de cat /proc/${PID}/statut. La Vm* les lignes sont très utiles.
Spécifiquement: VmData se réfère à des processus de tas d'utilisation. VmStk se réfère à la pile du processus d'utilisation.
Si vous continuez à utiliser "ps", vous pourriez envisager de popen().
Il y a toujours /usr/bin/gratuit
Noter que Linux va faire usage de la mémoire inutilisée pour la mise en mémoire tampon des fichiers et la mise en cache... Donc le +/-buffers/cache ligne.
OriginalL'auteur Mr.Ree