Frage
Was ist der richtige Weg, um die Prozessgröße zu ermitteln? Solaris, HP-UX
Und AIX
?Sollten wir verwenden top
oder ps -o vsz
oder etwas anderes?
Lösung
Die genauen Definitionen von vsize
, rss
, rprvt
, rshrd
, und andere unverständlich aussehende Abkürzungen variieren von Betriebssystem zu Betriebssystem.Die Handbuchseiten für die top
Und ps
Befehle werden eine Art Beschreibung haben, aber alle diese Beschreibungen sind stark vereinfacht (oder basieren auf längst ausgestorbenen Kernel-Implementierungen).
„Prozessgröße“ als Konzept ist im allgemeinen Fall unglaublich schwer zu fassen.Antworten in bestimmten Fällen hängen stark von der tatsächlichen Speicherverwaltungsimplementierung im Betriebssystem ab und sind selten so zufriedenstellend wie das übersichtliche Konzept der „Prozessgröße“, das in den Köpfen der meisten Benutzer (und der meisten Entwickler) existiert.
Beispielsweise kann keine dieser Zahlen (und wahrscheinlich auch keine Kombination davon) verwendet werden, um genau zu sagen, wie viele solcher Prozesse gleichzeitig in einer bestimmten Menge an freiem Speicher ausgeführt werden können.Aber eigentlich ist es am besten, von diesem Ende aus an die Sache heranzugehen:Warum möchten Sie diese Nummer und wofür werden Sie sie verwenden?Angesichts dieser Informationen denke ich, dass Sie nützlichere Antworten erhalten werden.
Andere Tipps
Unter Solaris können Sie mit dem detaillierte Informationen zur Speichernutzung eines Prozesses abrufen pmap
Befehl.Insbesondere, pmap -x <pid>
zeigt Ihnen, wie viel vom Speicher eines Prozesses gemeinsam genutzt wird und wie viel speziell von diesem Prozess verwendet wird.Dies ist nützlich, um die „geringfügige“ Speichernutzung eines Prozesses zu ermitteln. Mit dieser Technik können Sie eine Doppelzählung von gemeinsam genutzten Bibliotheken vermeiden.
Ja, Sie haben Recht, wenn Sie beim VSZ sperren.
ps u
gibt Ihnen VSZ und RSS, also die Größe des virtuellen Speichers und die Größe des residenten Satzes.Der RSS gibt an, wie viel physischer Speicher dem Prozess zugewiesen wurde, und der VSZ ist die Größe des virtuellen Speichers des Prozesses.Wenn mehrere Kopien eines Programms ausgeführt werden, wird ein großer Teil des Speichers im VSZ von diesen Prozessen gemeinsam genutzt.
Ich habe die residente Satzgröße für alle Prozesse wie folgt zusammengefasst (als Root):
ps ax -o rss | awk '{rss += $1;} END { print rss}'