You are not logged in.

  • Login
Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

BlvckBytes

User / Kunde

  • "BlvckBytes" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

Occupation: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Send private message

1

Tuesday, August 29th 2017, 12:40am

Linux RAM-Werte über Minecraft auslesen

Hey!

Ich möchte euch hier kurz eine Methode geben, welche ich gerade geschrieben habe. Ich finde, dass sie sehr hilfreich ist, und ein Must-Have für Server-Besitzer darstellt.

Hier die Methode:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// [1] = total | [2] = used | [3] = free
    private double[] memories() {
        try {
            double[] buffer = new double[ 3 ];

            int counter = 0;
            for( int i = 2; i <= 4; i++ ) {
                String[] cmd = { "/bin/bash", "-c", "echo "DEINROOTPASSWORTHIER" | sudo free -m  | grep ^Mem | tr -s ' ' | cut -d ' ' -f " + i };
                Process p = runtime.exec( cmd );

                p.waitFor();
                BufferedReader buf = new BufferedReader( new InputStreamReader( p.getInputStream() ) );

                String line = "";
                String output = "";
                while ( ( line = buf.readLine() ) != null) {
                    output += line + "\n";
                }
                buffer[ counter ] = Double.parseDouble( output ) / 1000D;
                counter++;
            }

            return buffer;

        } catch ( Exception ex ) {
            ex.printStackTrace();
        }
        return new double[]{ 0, 0, 0 };
    }


Diese Methode gibt euch ein double[] zurück. Welcher Index welcher Wert ist, steht als Kommentar über der Methode. Die Werte besitzen die Einheit GigaByte ( GB ).

Ich habe diese Methode wie folgt eingesetzt:

Spoiler Spoiler

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package me.powerfulenergy.sbs.modules;

import me.powerfulenergy.sbs.Main;
import me.powerfulenergy.sbs.Module;
import me.powerfulenergy.sbs.pStr;
import me.powerfulenergy.sbs.utils.PlayerCommand;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.DecimalFormat;

public class ServerInfo extends PlayerCommand implements Module {

    private Runtime runtime;

    public ServerInfo() {
        Main.get().regMan.register( this, "serverinfo" );
        this.runtime = Runtime.getRuntime();
    }

    @Override
    public boolean cmd( Player p, Command cmd, String[] args ) {

        if( !p.hasPermission( "software.serverinfo" ) ) {
            p.sendMessage( pStr.noPerm );
            return true;
        }

        double[] mem = memories();
        DecimalFormat df = new DecimalFormat( "#.##" );

        p.sendMessage( "§8§m------------§8[ §bAuslastung §8]§8§m------------" );
        p.sendMessage( "§8> §7OS: §b" + System.getProperty( "os.name" ) );
        p.sendMessage( "§8> §7Arch: §b" + System.getProperty( "os.arch" ) );
        p.sendMessage( "§8> §7Total-Mem: §b" + df.format( mem[ 0 ] )  + "GB" );
        p.sendMessage( "§8> §7Used-Mem: §b" + df.format( mem[ 1 ] )  + "GB" );
        p.sendMessage( "§8> §7Free-Mem: §b" + df.format( mem[ 2 ] )  + "GB" );
        p.sendMessage( "§8> §7Processors: §b" + runtime.availableProcessors() );
        p.sendMessage( "§8§m------------§8[ §bAuslastung §8]§8§m------------" );
        return true;
    }

    // [1] = total | [2] = used | [3] = free
    private double[] memories() {
        try {
            double[] buffer = new double[ 3 ];

            int counter = 0;
            for( int i = 2; i <= 4; i++ ) {
                String[] cmd = { "/bin/bash", "-c", "echo "nein_das_zeig_ich_dir_nicht" | sudo free -m  | grep ^Mem | tr -s ' ' | cut -d ' ' -f " + i };
                Process p = runtime.exec( cmd );

                p.waitFor();
                BufferedReader buf = new BufferedReader( new InputStreamReader( p.getInputStream() ) );

                String line = "";
                String output = "";
                while ( ( line = buf.readLine() ) != null) {
                    output += line + "\n";
                }
                buffer[ counter ] = Double.parseDouble( output ) / 1000D;
                counter++;
            }

            return buffer;

        } catch ( Exception ex ) {
            ex.printStackTrace();
        }
        return new double[]{ 0, 0, 0 };
    }
}


Wenn ihr es ebenfalls so einsetzt, wie ich, kann das ganze sehr Informativ werden, und so ähnlich aussehen:


Folgende Dinge sollten auf deinem Linux-Server vorhanden sein:
- sudo
- grep
- cut

Falls du nicht weißt, was diese Dinge sind, einfach mal testen, ob die Methode funktioniert! :) Falls ja, hast du alles, falls nein, kannst du ja danach googeln.

Wenn euch diese Methode geholfen hat, würde ich mich sehr über einen Kommentar freuen!

Viel Spaß damit,
LG BlvckBytes

xtrumb

User / Kunde

  • "xtrumb" is male

Posts: 2,295

Location: hier

Occupation: Fachinformatiker für Systemintegration

Thanks: 16

  • Send private message

2

Wednesday, August 30th 2017, 8:59am

Sehr cool, wird bestimmt nochmal hilfreich sein :)
:thumbup:
Mit freundlichen Grüßen
TrueMB

Dienstleistungs Service
Unser Csgo Team

BlvckBytes

User / Kunde

  • "BlvckBytes" is male
  • "BlvckBytes" started this thread

Posts: 797

Location: (*blvckbytes).home

Occupation: Schüler -> HTL für Informationstechnologie und Netzwerktechnik

  • Send private message

3

Thursday, August 31st 2017, 3:56pm

Kleines Update:

So geht die CPU-Load in %:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  private double getCPULoad() {
        try {

            String[] cmd = { "/bin/bash", "-c", "echo "nein" | sudo grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage}'" };
            Process p = runtime.exec( cmd );

            p.waitFor();
            BufferedReader buf = new BufferedReader( new InputStreamReader( p.getInputStream() ) );

            String line = "";
            String output = "";
            while ( ( line = buf.readLine() ) != null) {
                output += line + "\n";
            }

            return Double.parseDouble( output );
        } catch( Exception ex ) {
            ex.printStackTrace();
        }
        return 0.0;
    }


LG BlvckBytes

BtoBastian

Moderator

  • "BtoBastian" is male

Posts: 3,612

Occupation: Softwareentwickler

  • Send private message

4

Sunday, September 3rd 2017, 8:21am

Standard Standart eines Flamingos ist einbeinig.

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net