2017-04-20 4 views
-1

Je veux obtenir l'espace libre de RAM du processeur avec Java pour beaucoup de serveur aucune idée.RAM du processeur et de l'espace libre pour les serveurs distants java

+0

Qu'avez-vous déjà essayé? – dunni

+0

Qu'avez-vous essayé et qu'est-ce qui vous pose problème? Je vous suggère d'utiliser un outil qui fait déjà cela pour vous et que vous pouvez rechercher en utilisant google. –

+0

J'ai essayé Process c = Runtime.getRuntime(). Exec (commande); mais j'ai système inf pour ma machine locale je wich j'ai ram cpu pour l'autre serveur – oulaya

Répondre

0

Im juste un stagiaire mais ma solution serait d'écrire une prise de serveur et l'exécuter sur les serveurs. Ensuite, ouvrez une connexion sur un socket client et demandez des informations. Comme je voudrais simpel retourner le Mb utilisé ou simple le convertir en un% Value.

De toute façon, je préférerais utiliser une solution existante et testée.

EDIT:

Voici un tutoriel sur la façon d'obtenir votre libre, Max et RAM utilisée. http://crunchify.com/java-runtime-get-free-used-and-total-memory-in-java/

EDIT2: Voici le code de mon Idear:

partie serveur:

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


    } 
} 

partie client:

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

     } 

    } 

} 

J'espère que vous aide. De toute façon, je ne pense pas que vous pouvez obtenir des données sans connexion ou avoir une connexion à votre serveur.

+0

Merci, mais le problème est que je veux un code simple natif parce que je vais utiliser junit après pour faire mon test – oulaya

+0

Mais quelle est votre connexion au serveur? – Ice

1

en fonction bien sur la plate-forme cible il y a de multiples façons:

  • ont des clients java en cours d'exécution sur chaque système qui collecte ces informations sur demande et avoir un serveur qui collecte et afficher toutes ces informations. C'est la solution la plus indépendante de la plate-forme, mais vous devez écrire le client et le serveur et installer les clients sur chaque système.
  • Si SSH est pris en charge sur les plates-formes, vous pouvez utiliser le programme Java pour vous connecter à chaque système et utiliser les utilitaires de ligne de commande pour interroger la ressource. Cela nécessite toutefois que vous ayez des informations d'identification pour chaque système ou les clés SSH disponibles.
  • Utilisez NET-SNMP sur les plates-formes cibles si elles sont prises en charge et activez la collecte de ressources. Le programme Java peut alors interroger l'agent SNMP pour collecter l'utilisation des ressources. Vous auriez besoin d'une bibliothèque pour parler avec les agents SNMP. Vous pouvez SNMP4J ou AdventNet à cette fin.
+0

s'il vous plaît pouvez-vous me donner un exemple – oulaya