Quelle est la méthode correcte pour obtenir la taille du processus sur Solaris, HP-UX
et AIX
? Devrions-nous utiliser top
ou ps -o vsz
ou autre chose?Taille du processus sous UNIX
Répondre
Les définitions exactes de vsize
, rss
, rprvt
, rshrd
et autres abréviations obscures prospectifs varient d'un OS à OS. Les pages de manuel pour les commandes top
et ps
auront une sorte de description, mais toutes ces descriptions sont grandement simplifiées (ou sont basées sur des implémentations depuis longtemps éteintes du noyau).
La "taille du processus" en tant que concept est diaboliquement difficile à cerner dans le cas général. Les réponses dans des instances spécifiques dépendent fortement de l'implémentation réelle de la gestion de la mémoire dans le système d'exploitation et sont rarement aussi satisfaisantes que le concept de «taille de processus» propre à la plupart des utilisateurs (et la plupart des développeurs).
Par exemple, aucun de ces nombres (ni, probablement, aucune combinaison de ces nombres) ne peut être utilisé pour vous dire exactement combien de tels processus peuvent s'exécuter en même temps dans une quantité donnée de mémoire libre. Mais vraiment, votre meilleur pari est de venir à partir de cette fin: pourquoi voulez-vous ce numéro, et à quoi allez-vous l'utiliser? Compte tenu de cette information, je pense que vous obtiendrez des réponses plus utiles.
Oui, vous avez raison de verrouiller le VSZ.
ps u
vous donnera le VSZ et RSS, qui sont la taille de la mémoire virtuelle et la taille de l'ensemble résident. Le RSS est la quantité de mémoire physique allouée au processus, et le VSZ est la taille de la mémoire virtuelle du processus. Si vous avez plusieurs copies d'un programme en cours d'exécution, une grande partie de la mémoire du VSZ sera partagée entre ces processus.
Sous Solaris, vous pouvez obtenir des informations détaillées sur l'utilisation de la mémoire d'un processus à l'aide de la commande pmap
. En particulier, pmap -x <pid>
vous montre combien de mémoire d'un processus est partagée et quelle quantité est spécifiquement utilisée par ce processus. C'est utile pour travailler sur l'utilisation de la mémoire "marginale" d'un processus - avec cette technique, vous pouvez éviter le double comptage des bibliothèques partagées.
Je résume la taille du jeu de résident pour tous les processus comme celui-ci (en tant que root):
ps ax -o rss | awk '{rss += $1;} END { print rss}'
- 1. processus système sous Unix
- 2. Différence entre l'ID du groupe de processus et l'ID du travail sous UNIX
- 3. unix processus infini
- 4. processus réseau unix
- 5. Comment obtenir le chemin d'un processus sous Unix/Linux
- 6. Code optimisé sous Unix?
- 7. Multithreading - Synchronisation sous Unix
- 8. Taille du processus dans XP à partir de Python
- 9. Capture d'écran du processus sous Windows Service
- 10. ID de travail sous UNIX doute
- 11. Sous-système Unix pour Windows
- 12. Taille de segment de mémoire initiale allouée à un programme C++ sous UNIX
- 13. Scripts de contrôle d'application sous Unix
- 14. Comment créer un fichier de taille supérieure à 2 Go sous Linux/Unix?
- 15. Python et sous-processus
- 16. Comment déterminer un processus "taille virtuelle" (WinXP)?
- 17. Comment créer un progiciel sous Unix/Linux
- 18. Supprimer uniquement mes fichiers sous Unix
- 19. Comment lancer un fichier .jar sous UNIX?
- 20. Outils Unix sous GUI pour Windows
- 21. UNIX Appel système pour enregistrer un processus d'arrière-plan
- 22. Modification du propriétaire d'un processus existant sous Linux
- 23. Sous-processus FFMPEG et Pythons
- 24. Lancement d'un sous-processus qui survit au processus parent
- 25. Tuer un processus défunt sur le système UNIX
- 26. Appel de setpgid sur un processus enfant UNIX
- 27. fonction pour obtenir le descripteur de fichier terminal du processus en cours UNIX
- 28. Comment attacher automatiquement un débogueur à un processus au démarrage du processus sous OS X?
- 29. Sous-processus Python avec heredocs
- 30. os.popen conversion de sous-processus
Le nombre VSZ ne sert à rien si ce que vous intéresse est la consommation de mémoire. VSZ mesure la quantité d'espace mémoire * virtuelle * du processus qui a été marquée par le processus en tant que mémoire qui doit être mappée par le système d'exploitation si le processus arrive à la toucher. Mais cela n'a rien à voir avec si cette mémoire a été réellement touchée et utilisée. VSZ est un détail interne sur la façon dont un processus fait l'allocation de mémoire - quelle quantité de mémoire inutilisée il attrape à la fois. Regardez RSS pour le nombre de pages de mémoire qu'il a réellement commencé à utiliser. –