memory usage ενός script/commad?
Giorgos Keramidas
keramida at ceid.upatras.gr
Tue Oct 3 15:39:50 EEST 2006
On 2006-10-03 13:15, Argiris Mokios <amok at auth.gr> wrote:
>Giorgos Keramidas wrote:
>> On 2006-10-02 16:07, Argiris Mokios <amok at auth.gr> wrote:
>>
>>> Καλησπέρα,
>>>
>>> προσπαθώ να μετρήσω μερικά στατιστικά στοιχεία για κάποια
>>> scripts/commads που
>>> εκτελώ με την time, αλλά δεν μου δίνει στοιχεία σχετικά με την χρήση μνήμης.
>>>
>>> /usr/bin/time -f"\t Average total memory use: %Kkbytes\n" script
>>>
>>> Average total memory usage: 0kbytes
>>>
>>> Έχει κανείς να προτείνει κάποια εναλλακτική μέθοδο;
>>>
>>
>> Μπορείς να γράψεις ένα δικό σου εργαλείο, που κάνει fork() κι εκτελεί το
>> πρόγραμμα που θέλεις. Ύστερα, όταν το child process τερματίσει
>> κανονικά, μια κλήση στην getrusage() επιστρέφει πολλά ωραία στατιστικά:
>>
>> % GETRUSAGE(2) FreeBSD System Calls Manual GETRUSAGE(2)
>> % .
>
> Σε ευχαριστώ για την βοήθεια. Έκανα μια προσπάθεια αλλά τα αποτελέσματα
> που παίρνω είναι της μορφής:
>
> ru_utime:0/376023 user time used (secs/usecs)
> ru_stime:0/4000 system time used (secs/usecs)
> ru_maxrss:0 maximum resident set size
> ru_ixrss:0 integral shared memory size
> ru_idrss:0 integral unshared data size
> ru_isrss:0 integral unshared data stack size
> ru_minflt:581 page reclaims
> ru_majflt:2 page faults
> ru_nswap:0 swaps
> ru_inblock:0 block input operations
> ru_oublock:0 block output operations
> ru_msgsnd:0 messages sent
> ru_msgrcv:0 messages received
> ru_nsignals:0 signals received
> ru_nvcsw:10 voluntary context switches
> ru_nivcsw:126 involuntary context switches
>
> Δεν ξέρω αν κάνω κάτι λάθος(βλέπε attachment) ή ισχύει αυτό που βρήκα:
>
> The above struct was taken from 4.3BSD Reno. Not all fields are
> meaningful under Linux. In linux 2.4 only the fields ru_utime, ru_stime,
> ru_minflt, and ru_majflt are maintained. Since Linux 2.6, ru_nvcsw and
> ru_nivcsw are also maintained.
>
> Έχω ξενερώσει απίστευτα!!! Δηλαδή αν δεν μπορώ να κάνω κάτι τέτοιο σε
> περιβάλλον linux, που στο διάολο(βλέπε FreeBSD) θα το κάνω.
Κρίμα και χάρηκα :(
Μάλλον δεν επιστρέφει όλες τις πληροφορίες η getrusage() σε Linux.
Το attached πρόγραμμα είναι μια τροποποιημένη μορφή του ίδιου fork-based
προγράμματος, η οποία δεν διαβάζει σε loop εντολές, αλλά χρησιμοποιεί το
argv[1 ... argc-1] ως argv[] της execvp().
Τα αποτελέσματα που παίρνω σε FreeBSD είναι:
| giorgos at gothmog:/home/giorgos/tmp/mokios$ ./mokios ls
| Makefile mokios mokios.c mokios.o
| pid 21623
| user time used (utime) = 0.000000
| system time used (stime) = 0.003923
| max resident set size (maxrss) = 648
| integral shared text memory size (ixrss) = 24
| integral unshared data size (idrss) = 4
| integral unshared stack size (isrss) = 128
| page reclaims (minflt) = 109
| page faults (majflt) = 0
| swaps (nswap) = 0
| block input operations (inblock) = 0
| block output operations (oublock) = 0
| messages sent (msgsnd) = 0
| messages received (msgrcv) = 0
| signals received (nsignals) = 0
| voluntary context switches (nvcsw) = 1
| involuntary context switches (nivcsw) = 0
| giorgos at gothmog:/home/giorgos/tmp/mokios$ ./mokios gcc mokios.c
| pid 21638
| user time used (utime) = 0.033936
| system time used (stime) = 0.027149
| max resident set size (maxrss) = 5140
| integral shared text memory size (ixrss) = 18568
| integral unshared data size (idrss) = 34628
| integral unshared stack size (isrss) = 1152
| page reclaims (minflt) = 1026
| page faults (majflt) = 0
| swaps (nswap) = 0
| block input operations (inblock) = 0
| block output operations (oublock) = 2
| messages sent (msgsnd) = 0
| messages received (msgrcv) = 0
| signals received (nsignals) = 0
| voluntary context switches (nvcsw) = 9
| involuntary context switches (nivcsw) = 5
| giorgos at gothmog:/home/giorgos/tmp/mokios$ ./mokios ls -l a.out
| -rwxrwxr-x 1 giorgos giorgos 9666 Oct 3 15:33 a.out
| pid 21643
| user time used (utime) = 0.000000
| system time used (stime) = 0.006276
| max resident set size (maxrss) = 264
| integral shared text memory size (ixrss) = 24
| integral unshared data size (idrss) = 4
| integral unshared stack size (isrss) = 128
| page reclaims (minflt) = 139
| page faults (majflt) = 0
| swaps (nswap) = 0
| block input operations (inblock) = 0
| block output operations (oublock) = 0
| messages sent (msgsnd) = 0
| messages received (msgrcv) = 0
| signals received (nsignals) = 0
| voluntary context switches (nvcsw) = 1
| involuntary context switches (nivcsw) = 1
| giorgos at gothmog:/home/giorgos/tmp/mokios$
Στο BSD τα πεδία maxrss, ixrss, idrss, isrss, nvcsw και nivcsw φαίνεται
να παίζουν σωστά.
ΥΓ. Αν και μάλλον δεν έχει ιδιαίτερη σημασία, στο ίδιο tarball υπάρχουν
και τα metadata ενός Mercurial repository, οπότε μπορείς να δεις πως
έκανα ότι αλλαγές έκανα.
More information about the Linux-greek-users
mailing list