free, awk und Google Charts

Status
Für weitere Antworten geschlossen.

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Wir sind erstmal mit dem Telnet auf der Linux-Kommandozeile und schauen uns die Memory-Belegung mit free an:

Rich (BBCode):
free
              total         used         free       shared      buffers
  Mem:       126904       119860         7044            0        20528
 Swap:       522040         7732       514308
Total:       648944       127592       521352

Wenn uns nur die Zeile 2 und dort die Werte für used, free, shared und buffers interessieren, dann können wir das free-Kommando mit einer Pipe an das awk-Kommando weiterleiten, welches uns komfortabel auf einzelne Zeilen und Werte in einer Zeile zugreifen lässt. Die Zeilennummer heißt NR, die Spalten $3,$4,$5,$6, also zusammen:

Rich (BBCode):
free | awk 'NR==2 {print $3,$4,$5,$6}'
119916 6988 0 20608

Wir könnten auch die Zeile mit einem eindeutigen Suchbegriff herausfiltern:

Rich (BBCode):
free | awk '/Mem/ {print $3,$4,$5,$6}'
119916 6988 0 20608

Wenn wir die prozentualen Anteile erhalten möchten, dann ginge das so:

Rich (BBCode):
free | awk '/Mem/ {print $3/$2*100,$4/$2*100,$5/$2*100,$6/$2*100}'
94.4935 5.50652 0 16.2517

Noch Kommas zwischen die Zahlen:

Rich (BBCode):
free | awk '/Mem/ {print $3/$2*100 "," $4/$2*100 "," $5/$2*100 "," $6/$2*100}'
94.4935,5.50652,0,16.2517

Nun wollen wir das graphisch darstellen und benutzen dazu das Google-Chart-API. Ein einfaches Kreisdiagramm geht so (im Browser eingegeben):

http://chart.apis.google.com/chart?cht=p&chs=250x200&chd=t:10,20,5,15&chl=A|B|C|D&chtt=Test

http://chart.apis.google.com/chart?cht=p&chs=250x200&chd=t:10,20,5,15&chl=A|B|C|D&chtt=Test

Nun packen wir das in eine CGI-Datei namens free.cgi ins Verzeichnis /usr/syno/synoman/phpsrc/free/ und müssen nun die &-Zeichen gegen HTML-Entities & austauschen:

Rich (BBCode):
#!/bin/ash
cat <<EOT
Content-type: text/html

<html><head><title>System-Info</title></head><body>
<img src="http://chart.apis.google.com/chart?cht=p&
chs=250x200&chd=t:10,20,5,15&chl=A|B|C|D&chtt=Test">
</div></body></html>
EOT

Jetzt noch chmod 755 free.cgi und einmal testen mit: https://DS_name:5001/phpsrc/free/free.cgi

Jetzt ersetzen wir die Werte 10,20,5,15 gegen die Werte aus dem free | awk ... und machen die Legende passend:

Rich (BBCode):
#!/bin/ash
cat <<EOT
Content-type: text/html

<html><head><title>System-Info</title></head><body>
<img src="http://chart.apis.google.com/chart?cht=p&chs=250x200&chd=t:
$(free | awk '/Mem/ {print $3/$2*100 "," $4/$2*100 "," $5/$2*100 "," $6/$2*100}')
&chl=used|free|shared|buffers&chtt=Mem">
</div></body></html>
EOT

und rufen jetzt das ganze noch mal auf https://DS_name:5001/phpsrc/free/free.cgi und haben ab jetzt eine schöne graphische Anzeige unserer Memory-Belegung. Wer mag, kanns nun noch als 3rd-party-Application integrieren.:)
 

Anhänge

  • free.jpg
    free.jpg
    4,9 KB · Aufrufe: 104

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Hab gerade gesehen, dass es leichte Abweichungen hinsichtlich der Ausgaben zwischen dem ersten Code-Beispiel und dem zweiten in dem Beitrag gibt. Sorry - hatte das einfach aus dem Telnet-Fenster in den Post kopiert und da sich ja ständig die Memorybelegung ändert, haben sich auch die Werte geändert. Ich hoffe, dass es nicht zu allzu großen Verwirrungen geführt hat.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
hi _TokTok_, das ist doch reiner Zufall ;) mal grad 1,3MB von 128MB Differenz. Ist doch sowieso nicht von Bedeutung. Denk mal 50% des Memories (also bei mir 64MB) gehen ab fürs tmpfs und stehen eigentlich auch nicht für die Programmausführung zur Verfügung (/tmpfs ist rein virtuell, steht als garantiert nicht auf der Platte). Die Bedeutung des freien Speichers wird bei Linux (und auch Windows) sowieso meist überschätzt. Ein Problem gibts nur für Programme, die zur Ausführung nicht genügend Platz für Daten/Stack im Memory haben und deswegen die Speicherseiten immerzu ein- und auslagern müssen, deswegen unterbrechen und laufend Prozeß-Kontext-Wechsel in Kauf nehmen müssen. Für alle anderen Programme ist das völlig nebensächlich, wenn genügend virtueller Speicher da ist (=Mem + Swap für die Daten, die Code_Segments werden beim Pagen ja eh immer von der Platten nachgeladen).

So, dass war mal wieder tiefschürfendes Gestammle eines C-Programmierer :D, was eh nur Schlaumeier genau verstehen. Ich wollte damit nur sagen, dass deine Befürtungen, du hättest ein 'schlechteres' System, auf keinen Fall zutreffen. ;)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat