CPU ram和远程服务器java的可用空间

时间:2017-04-20 09:51:04

标签: java cpu ram

我想为许多服务器使用java获得CPU ram可用空间 任何想法。

2 个答案:

答案 0 :(得分:1)

根据目标平台的不同,有多种方式:

  • 让每个系统上都运行java客户端,根据请求收集此信息,然后让服务器收集并显示所有这些信息。这是大多数独立于平台的解决方案,但需要您编写客户端和服务器并在每个系统上安装客户端。
  • 如果平台支持SSH,则可以使用Java程序登录每个系统并使用命令行实用程序查询资源。但是,这需要您拥有每个系统的凭据或可用的SSH密钥。
  • 如果支持,则在目标平台上使用NET-SNMP并启用资源收集。然后,Java程序可以查询SNMP代理以收集资源使用情况。您需要一个库与SNMP代理进行通信。您可以为此目的使用SNMP4J或AdventNet。

答案 1 :(得分:0)

我只是一个实习生,但我的解决方案是写一个服务器套接字并在服务器上运行它。 比通过客户端套接字打开连接并询问信息。

我会简单地返回Used Mb或简单地将其转换为%Value。

无论如何,我更愿意使用现有的经过测试的解决方案。

编辑:

这里有一个关于如何获得免费的Max和Used RAM的教程。 http://crunchify.com/java-runtime-get-free-used-and-total-memory-in-java/

EDIT2: 这里是我的理想代码:

服务器部分:

public static void main(String[] args)  {
    try {
        ServerSocket sSocket = new ServerSocket(6969);
        Socket socket = sSocket.accept(); 
        DataInputStream dis = new DataInputStream(socket.getInputStream());
        DataOutputStream dout = new DataOutputStream(socket.getOutputStream());


        String str1 = "";

        //Add Varaibles you want to return
        double ram = 15.0;

        while (!str1.equals("stop")) {
            str1=dis.readUTF();

            //Return Value you need by param 
            if (str1.equals("getRam")) {
                //Add Your calculation here
                dout.writeUTF(String.valueOf(ram));
                dout.flush();   
            }
            else if(str1.equals("stop")){
                dout.writeUTF("stop");
                dout.flush();   
            }
            else {
                dout.writeUTF("Unknown Command");
                dout.flush();
            }


        }
        sSocket.close();
        socket.close();
        dis.close();
    } catch (IOException e) {
        e.printStackTrace();
    }


    }
}

客户端部分:

public class Main {


    public static void main(String[] args) {
        try {
            String serverIp = "localhost";
            Socket socket = new Socket(serverIp, 6969);
            DataInputStream dIn = new DataInputStream(socket.getInputStream());
            DataOutputStream dOut= new DataOutputStream(socket.getOutputStream());
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            String str = "";
            String str2 = "";


                dOut.writeUTF("getRam");

                //for manual param transmitting 
                //str = br.readLine();
                //dOut.writeUTF(str);
                dOut.flush();
                str2=dIn.readUTF();
                System.out.println("Server response:" + str2);
                br.readLine();



        } catch (UnknownHostException e) {
            e.printStackTrace();
            System.out.println(e);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println(e);

        }

    }

}

我希望能帮到你。 无论如何,我不认为你可以在没有连接或连接到服务器的情况下获取数据。