mnimograph.pl - Σχεδιασμός γραφήματος κατανάλωσης μνήμης

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

mnimograph.pl - Σχεδιασμός γραφήματος κατανάλωσης μνήμης

Δημοσίευσηαπό evolgen » 26 Ιούλ 2012, 02:21

Χρειάστηκε να φτιάξω ένα γράφημα των τιμών της χρησιμοποιούμενης μνήμης από απομακρυσμένο server με ssh. Μιλάμε λοιπόν για command line δουλειά και μόνο, καθώς δε θα μπορούσα να πάρω κάποιο screenshot από κάποιο gui εργαλείο. Δεν βρήκα κάτι έτοιμο και αποφάσισα να το φτιάξω μόνος μου.

To mnimograph.pl είναι ένα εργαλείο για σχεδιασμό διαγράμματος των τιμών της χρησιμοποιούμενης μνήμης.

Στην command-line έκδοσή του, συλλέγει τιμές χρησιμοποιούμενης μνήμης (σε MB) κάθε 5 δευτερόλεπτα, μέχρι ο χρήστης να το τερματίσει, γράφοντας "Q" και πατώντας Enter. Στη συνέχεια χρησιμοποιεί το Gnuplot για να φτιάξει ένα γράφημα από αυτές τις τιμές, σε μορφή .png.

Το ίδιο γίνεται και στην GUI έκδοσή του, μόνο που η συλλογή τιμών ελέγχεται με δύο κουμπιά και κάποιες προαιρετικές επιλογές:


----------------------------------------------------------------------------------------------------------------------------------------------------------

Οι προαιρετικές παράμετροι επιτρέπουν την καταγραφή swap, cached memory και τη μνήμη που χρησιμοποιεί μια συγκεκριμένη process του συστήματος.

Αν η process ανήκει στον τρέχοντα χρήστη, τότε η μνήμη υπολογίζεται ως το άθροισμα των τιμών Private_Dirty RSS memory που εμφανίζονται στο αρχείο /proc/PID/maps. Σύμφωνα με όσα διάβασα, η τιμή που προκύπτει από αυτή τη διαδικασία είναι όσο το δυνατόν πιο κοντά στην πραγματικότητα.

Αν πάλι η process ανήκει στον root ή σε άλλον χρήστη, τότε η μνήμη εξάγεται ως η τιμή RSS που δίνει η εντολή ps.

----------------------------------------------------------------------------------------------------------------------------------------------------------

Ακολουθεί ένα παράδειγμα του output που παρήγαγε το πρόγραμμα, από πραγματική χρήση στο δικό μου laptop.


Ο κώδικας του mnimograph.pl βρίσκεται σε GitHub repository υπό την άδεια GPLv3.

Για την εγκατάσταση των dependencies σε Ubuntu 12.04:
Κώδικας: Επιλογή όλων
sudo apt-get install gnuplot-nox imagemagick libchart-gnuplot-perl libencode-locale-perl libgtk2-perl libterm-readkey-perl perl
Το να μειώνεις ένα έργο ελεύθερου λογισμικού, επειδή θεωρείς το δικό σου καλύτερο,
είναι απαράδεκτη συμπεριφορά και δε συμβαδίζει με τις αρχές του ελεύθερου λογισμικού.

Γνώσεις Linux: Μέτριο++ ┃ Προγραμματισμός: Perl, R, Python, SQL, C, Common Lisp, BashΑγγλικά: Άριστα

1. Ubuntu 14.04 trusty
2. Intel Core i7-3520M CPU @ 2.90GHz ‖ RAM 7892 MiB
3. Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
4. eth0: Broadcom NetXtreme BCM57765 Gigabit Ethernet PCIe [14e4:16b4] (rev 10) ⋮ eth1: Broadcom BCM4331 802.11a/b/g/n [14e4:4331] (rev 02)
Άβαταρ μέλους
evolgen
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1031
Εγγραφή: 28 Ιούλ 2010, 14:22
Τοποθεσία: UK
IRC: bioevolgenec
Εκτύπωση

Re: mnimograph.pl - Σχεδιασμός γραφήματος κατανάλωσης μνήμης

Δημοσίευσηαπό the_eye » 31 Ιούλ 2012, 14:14

Μπορείς να έχεις GUI, αν ο απομακρυσμένος υπολογιστής έχει εγκατεστημένο GUI με ssh.

Γράφεις
Κώδικας: Επιλογή όλων
ssh user@server_ip -X
Όσο λιγότερο κλειστό λογισμικό έχεις, τόσα λιγότερα προβλήματα.
1 Γνώσεις ⇛ Linux: Καλό ┃ Προγραμματισμός: Ναι PHP, MySQL ┃ Αγγλικά: Καλά
2 Ubuntu 24.04.2
3 Intel Core i5-6500 CPU @ 3.20GHz ‖ RAM 7836 MiB ‖ Gigabyte B150M-HD3 DDR3-CF - Gigabyte B150M-HD3 DDR3
4 Intel HD Graphics 530 [8086:1912] {i915}
5 enp1s0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
Άβαταρ μέλους
the_eye
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 11724
Εγγραφή: 16 Μαρ 2010, 17:19
Launchpad: ntoulasd
IRC: the_eye_
Εκτύπωση

Re: mnimograph.pl - Σχεδιασμός γραφήματος κατανάλωσης μνήμης

Δημοσίευσηαπό evolgen » 31 Ιούλ 2012, 14:20

the_eye έγραψε:Μπορείς να έχεις GUI, αν ο απομακρυσμένος υπολογιστής έχει εγκατεστημένο GUI με ssh.

Γράφεις
Κώδικας: Επιλογή όλων
ssh user@server_ip -X

Δεν το ήξερα αυτό! :roll: Ο συγκεκριμένος πάντως δεν έχει GUI, για εξοικονόμηση πόρων, καθώς σε αυτόν τρέχει το CGI πρόγραμμα της διπλωματικής μου. Άσε που δε θα είχα την άδεια να του βάλω gui μόνο για το γράφημα...

Πάντως έκανα κάποιες αλλαγές στο mnimograph και σκέφτομαι να του φτιάξω GUI, ώστε να μπορεί να τρέχει είτε ως γραφική εφαρμογή, είτε ως εντολή από το τερματικό. :)
Το να μειώνεις ένα έργο ελεύθερου λογισμικού, επειδή θεωρείς το δικό σου καλύτερο,
είναι απαράδεκτη συμπεριφορά και δε συμβαδίζει με τις αρχές του ελεύθερου λογισμικού.

Γνώσεις Linux: Μέτριο++ ┃ Προγραμματισμός: Perl, R, Python, SQL, C, Common Lisp, BashΑγγλικά: Άριστα

1. Ubuntu 14.04 trusty
2. Intel Core i7-3520M CPU @ 2.90GHz ‖ RAM 7892 MiB
3. Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
4. eth0: Broadcom NetXtreme BCM57765 Gigabit Ethernet PCIe [14e4:16b4] (rev 10) ⋮ eth1: Broadcom BCM4331 802.11a/b/g/n [14e4:4331] (rev 02)
Άβαταρ μέλους
evolgen
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1031
Εγγραφή: 28 Ιούλ 2010, 14:22
Τοποθεσία: UK
IRC: bioevolgenec
Εκτύπωση

Re: mnimograph.pl - Σχεδιασμός γραφήματος κατανάλωσης μνήμης

Δημοσίευσηαπό the_eye » 31 Ιούλ 2012, 15:48

evolgen έγραψε:Πάντως έκανα κάποιες αλλαγές στο mnimograph και σκέφτομαι να του φτιάξω GUI, ώστε να μπορεί να τρέχει είτε ως γραφική εφαρμογή, είτε ως εντολή από το τερματικό.

Σου προτείνω να κάνεις ένα GUI το οποίο απλά θα τρέχει την εντολή του τερματικού και θα εμφανίζει το αποτέλεσμα. Νομίζω είναι ποιο απλό έτσι.
Όσο λιγότερο κλειστό λογισμικό έχεις, τόσα λιγότερα προβλήματα.
1 Γνώσεις ⇛ Linux: Καλό ┃ Προγραμματισμός: Ναι PHP, MySQL ┃ Αγγλικά: Καλά
2 Ubuntu 24.04.2
3 Intel Core i5-6500 CPU @ 3.20GHz ‖ RAM 7836 MiB ‖ Gigabyte B150M-HD3 DDR3-CF - Gigabyte B150M-HD3 DDR3
4 Intel HD Graphics 530 [8086:1912] {i915}
5 enp1s0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
Άβαταρ μέλους
the_eye
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 11724
Εγγραφή: 16 Μαρ 2010, 17:19
Launchpad: ntoulasd
IRC: the_eye_
Εκτύπωση

Re: mnimograph.pl - Σχεδιασμός γραφήματος κατανάλωσης μνήμης

Δημοσίευσηαπό evolgen » 31 Ιούλ 2012, 18:08

the_eye έγραψε:
evolgen έγραψε:Πάντως έκανα κάποιες αλλαγές στο mnimograph και σκέφτομαι να του φτιάξω GUI, ώστε να μπορεί να τρέχει είτε ως γραφική εφαρμογή, είτε ως εντολή από το τερματικό.

Σου προτείνω να κάνεις ένα GUI το οποίο απλά θα τρέχει την εντολή του τερματικού και θα εμφανίζει το αποτέλεσμα. Νομίζω είναι ποιο απλό έτσι.

Ναι, κάπως έτσι το σκεφτόμουν κι εγώ. Με ένα κουμπί που θα ξεκινάει την καταγραφή και ένα που θα τη σταματά.
Το να μειώνεις ένα έργο ελεύθερου λογισμικού, επειδή θεωρείς το δικό σου καλύτερο,
είναι απαράδεκτη συμπεριφορά και δε συμβαδίζει με τις αρχές του ελεύθερου λογισμικού.

Γνώσεις Linux: Μέτριο++ ┃ Προγραμματισμός: Perl, R, Python, SQL, C, Common Lisp, BashΑγγλικά: Άριστα

1. Ubuntu 14.04 trusty
2. Intel Core i7-3520M CPU @ 2.90GHz ‖ RAM 7892 MiB
3. Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
4. eth0: Broadcom NetXtreme BCM57765 Gigabit Ethernet PCIe [14e4:16b4] (rev 10) ⋮ eth1: Broadcom BCM4331 802.11a/b/g/n [14e4:4331] (rev 02)
Άβαταρ μέλους
evolgen
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1031
Εγγραφή: 28 Ιούλ 2010, 14:22
Τοποθεσία: UK
IRC: bioevolgenec
Εκτύπωση

Re: mnimograph.pl - Σχεδιασμός γραφήματος κατανάλωσης μνήμης

Δημοσίευσηαπό pmav99 » 31 Ιούλ 2012, 22:13

Aν η μνήμη είναι πρόβλημα, θα μπορούσες ίσως να χρησιμοποιήσεις κάποιον memory profiler προκειμένου να βελτιώσεις τη συμπεριφορά του προγράμματός σου. Δε ξέρω κάτι συγκεκριμένο για perl αλλά αφού υπάρχουν στην python πιθανότατα θα υπάρχουν και για perl.

http://fseoane.net/blog/2012/line-by-li ... ory-usage/
https://github.com/fabianp/memory_profi ... rofiler.py
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: mnimograph.pl - Σχεδιασμός γραφήματος κατανάλωσης μνήμης

Δημοσίευσηαπό evolgen » 01 Αύγ 2012, 00:37

Όχι, δεν υπάρχει οποιοδήποτε θέμα με τη μνήμη. ((Πάντως στην Perl υπάρχει αυτό για profiling και είναι αρκετά καλό.)) Απλώς ο καθηγητής μου μου ζήτησε να γράψω μια υποενότητα στη διπλωματική μου για την κατανάλωση μνήμης από το πρόγραμμα γενικά.
Το να μειώνεις ένα έργο ελεύθερου λογισμικού, επειδή θεωρείς το δικό σου καλύτερο,
είναι απαράδεκτη συμπεριφορά και δε συμβαδίζει με τις αρχές του ελεύθερου λογισμικού.

Γνώσεις Linux: Μέτριο++ ┃ Προγραμματισμός: Perl, R, Python, SQL, C, Common Lisp, BashΑγγλικά: Άριστα

1. Ubuntu 14.04 trusty
2. Intel Core i7-3520M CPU @ 2.90GHz ‖ RAM 7892 MiB
3. Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
4. eth0: Broadcom NetXtreme BCM57765 Gigabit Ethernet PCIe [14e4:16b4] (rev 10) ⋮ eth1: Broadcom BCM4331 802.11a/b/g/n [14e4:4331] (rev 02)
Άβαταρ μέλους
evolgen
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1031
Εγγραφή: 28 Ιούλ 2010, 14:22
Τοποθεσία: UK
IRC: bioevolgenec
Εκτύπωση

Re: mnimograph.pl - Σχεδιασμός γραφήματος κατανάλωσης μνήμης

Δημοσίευσηαπό pmav99 » 01 Αύγ 2012, 03:23

Από ότι είδα, χρησιμοποιείς την free -m. Αν θες απλά να βρεις την τάξη μεγέθους είναι οκ. Αν θέλεις περισσότερη ακρίβεια όμως θα πρέπει να χρησιμοποιήσεις άλλα εργαλεία. Δες πχ εδώ
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: mnimograph.pl - Σχεδιασμός γραφήματος κατανάλωσης μνήμης

Δημοσίευσηαπό evolgen » 01 Αύγ 2012, 10:35

Το πρόγραμμα για το οποίο ήθελα να μετρήσω την κατανάλωση μνήμης δεν είναι ένα ενιαίο script. Στην πραγματικότητα είναι 2 scripts συνδεδεμένα (σε Perl και R), τα οποία καλούν 5-6 άλλα προγράμματα, από τα οποία λαμβάνουν πληροφορίες και συνεχίζουν την ανάλυση. Η περισσότερη ώρα λειτουργίας του προγράμματος και το μεγαλύτερο μέρος της μνήμης που καταναλώνεται οφείλεται στα εξωτερικά προγράμματα και όχι στα δικά μου scripts. Ήθελα να δω την κατανάλωση μνήμης από όλο το πακέτο των προγραμμάτων, όχι σε επίπεδο γραμμής κώδικα, αλλά τύπου μέγιστο ποσό μνήμης, ελάχιστο κλπ "χοντρά-χοντρά".
Το να μειώνεις ένα έργο ελεύθερου λογισμικού, επειδή θεωρείς το δικό σου καλύτερο,
είναι απαράδεκτη συμπεριφορά και δε συμβαδίζει με τις αρχές του ελεύθερου λογισμικού.

Γνώσεις Linux: Μέτριο++ ┃ Προγραμματισμός: Perl, R, Python, SQL, C, Common Lisp, BashΑγγλικά: Άριστα

1. Ubuntu 14.04 trusty
2. Intel Core i7-3520M CPU @ 2.90GHz ‖ RAM 7892 MiB
3. Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
4. eth0: Broadcom NetXtreme BCM57765 Gigabit Ethernet PCIe [14e4:16b4] (rev 10) ⋮ eth1: Broadcom BCM4331 802.11a/b/g/n [14e4:4331] (rev 02)
Άβαταρ μέλους
evolgen
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1031
Εγγραφή: 28 Ιούλ 2010, 14:22
Τοποθεσία: UK
IRC: bioevolgenec
Εκτύπωση

Re: mnimograph.pl - Σχεδιασμός γραφήματος κατανάλωσης μνήμης

Δημοσίευσηαπό evolgen » 19 Αύγ 2012, 21:03

Έβγαλα νέα έκδοση του mnimograph.pl, τώρα και με GUI! ;)

Δείτε το πρώτο post για περισσότερες λεπτομέρειες.

Χρησιμοποιώντας το Makefile, θα δημιουργηθεί μια καταχώρηση για την εφαρμογή στην κατηγορία System του menu.
Το να μειώνεις ένα έργο ελεύθερου λογισμικού, επειδή θεωρείς το δικό σου καλύτερο,
είναι απαράδεκτη συμπεριφορά και δε συμβαδίζει με τις αρχές του ελεύθερου λογισμικού.

Γνώσεις Linux: Μέτριο++ ┃ Προγραμματισμός: Perl, R, Python, SQL, C, Common Lisp, BashΑγγλικά: Άριστα

1. Ubuntu 14.04 trusty
2. Intel Core i7-3520M CPU @ 2.90GHz ‖ RAM 7892 MiB
3. Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
4. eth0: Broadcom NetXtreme BCM57765 Gigabit Ethernet PCIe [14e4:16b4] (rev 10) ⋮ eth1: Broadcom BCM4331 802.11a/b/g/n [14e4:4331] (rev 02)
Άβαταρ μέλους
evolgen
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1031
Εγγραφή: 28 Ιούλ 2010, 14:22
Τοποθεσία: UK
IRC: bioevolgenec
Εκτύπωση

Επόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι