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

用于远程java服务器的CPU ram和可用空间,java,cpu,ram,Java,Cpu,Ram,我想用java为许多服务器提供CPU ram可用空间 任何想法。我只是一名实习生,但我的解决方案是编写一个服务器套接字并在服务器上运行它。 而不是通过客户端套接字打开连接并询问信息 然后我将simpel返回使用过的Mb或简单地将其转换为%值 无论如何,我宁愿使用现有的和经过测试的解决方案 编辑: 这里有一个关于如何获得免费、最大和已用RAM的教程。 编辑2: 下面是我的想法代码: 服务器部件: public static void main(String[] args) { try

我想用java为许多服务器提供CPU ram可用空间
任何想法。

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

然后我将simpel返回使用过的Mb或简单地将其转换为%值

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

编辑:

这里有一个关于如何获得免费、最大和已用RAM的教程。

编辑2: 下面是我的想法代码:

服务器部件:

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);

        }

    }

}
我希望这对你有帮助。
无论如何,我认为您不需要连接或连接到服务器就无法获取数据。

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

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

您尝试了什么,遇到了什么问题?我建议你使用一个已经为你做了这件事的工具,你可以用谷歌搜索它;但是我的本地机器有system inf,其他服务器有ram cpu我也尝试过getTotalSpace(),但结果是本地机器也有system inf Process=new ProcessBuilder(“C:\\Windows\\System32\\cmd.exe”,“\\\\\xxxxx”,“systeminfo |查找可用物理内存”).start();但是如果没有CPU利用率的结果,我还有另一个问题谢谢,但问题是我想要一个简单的本机代码,因为我将在测试之后使用junit,但是您与服务器的连接是什么?请给我一个例子