Ich habe versucht, die maximale Speichernutzung eines untergeordneten Prozesses zu überwachen. Time -v ist eine Option, aber es funktioniert nicht in solaris.So gibt es eine Möglichkeit, Details in Ruse-Struktur von Shell-Skripts zu erhalten?Gibt es eine Alternative zu wait3, um eine Struktur in Shell-Skripten zu erhalten?
Antwort
Sie können /usr/bin/timex
Von the /usr/bin/timex
man page:
Der gegebene Befehl wird ausgeführt; Die verstrichene Zeit, die Benutzerzeit und das System Zeit in Ausführung ausgeführt werden in Sekunden berichtet. Optional können Buchhaltungsdaten für den Befehl und alle seine untergeordneten Elemente aufgelistet oder zusammengefasst werden, und die gesamte Systemaktivität während des Ausführungsintervalls kann gemeldet werden.
...
-p Liste Prozess Buchführung für Befehl und alle seine Kinder. Diese Option funktioniert nur, wenn die Prozessabrechnungssoftware installiert ist. Die Unteroptionen f, h, k, m, r und t modifizieren die Daten gemeldet. Die Optionen sind wie folgt:
...
Beginnen Sie mit der Manpage acctadm
Prozess-Accounting aktiviert werden.
Beachten Sie, dass unter Solaris getrusage()
und wait3()
Speicherverbrauchsstatistiken nicht zurückgegeben werden. Siehe den (etwas veralteten) getrusage()
Quellcode unter http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/syscall/rusagesys.c und den wait3()
Quellcode unter http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/sys/common/wait.c#158 (Das ist eigentlich OpenSolaris Quelle, die von Oracle unterstützt wurde und möglicherweise nicht die aktuelle Solaris Implementierung darstellt, obwohl einige Tests unter Solaris 11.2 zeigen, dass der RSS-Daten sind in der Tat immer noch null)
auch aus den Solaris getrusage()
man page.
die
ru_maxrss
,ru_ixrss
,ru_idrss
undru_isrss
Mitgliedern derrusage
Struktur auf 0 in dieser Implementierung festgelegt werden.
Es gibt fast sicher andere Möglichkeiten, um die Daten zu erhalten, wie dtrace
.
Edit:
dtrace
sieht nicht viel Hilfe sein, leider. Diesen dtrace
Skript mit dtrace -s memuse.d -c bash
#!/usr/sbin/dtrace -s
#pragma D option quiet
profile:::profile-1001hz
/pid == $target/
{
@pct[ pid ] = max(curpsinfo->pr_pctmem);
}
dtrace:::END
{
printa("pct: %@u %a\n", @pct);
}
in der folgenden Fehlermeldung führte zu laufen Den Versuch:
dtrace: failed to compile script memuse.d: line 8: translator does not define conversion for member: pr_pctmem
dtrace
auf Solaris erscheint keinen Zugriff bereitzustellen Speichernutzung zu verarbeiten. In der Tat, die Solaris 11.2 /usr/lib/dtrace/procfs.d
Übersetzer für procfs
Daten hat diesen Kommentar drin:
/*
* Translate from the kernel's proc_t structure to a proc(4) psinfo_t struct.
* We do not provide support for pr_size, pr_rssize, pr_pctcpu, and pr_pctmem.
* We also do not fill in pr_lwp (the lwpsinfo_t for the representative LWP)
* because we do not have the ability to select and stop any representative.
* Also, for the moment, pr_wstat, pr_time, and pr_ctime are not supported,
* but these could be supported by DTrace in the future using subroutines.
* Note that any member added to this translator should also be added to the
* kthread_t-to-psinfo_t translator, below.
*/
die Illumos.org Quellcode surfen, für ps_rssize
suchen, zeigt an, dass die procfs
Daten nur berechnet wird, wenn nötig, und nicht kontinuierlich, da der Prozess läuft aktualisiert . (Siehe http://src.illumos.org/source/search?q=pr_rssize&defs=&refs=&path=&hist=&project=illumos-gate)