IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

Récupérer informations systèmes


Sujet :

API standards et tierces Java

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut Récupérer informations systèmes
    Bonjour,

    Je souhaite savoir comment faire pour récupérer des informations systèmes dont une précise : les rams dispo.

    J'ai trouvé de quoi récupérer le nom de l'os, sa version, etc, mais pas la mémoire vive restante.

    Est-ce que quelqu'un sait comment faire pour récupérer cette information.


    Merci d'avance.


    NB : j'ai vu que GlobalMemoryStatus est censé le faire, mais je dois faire une appli multi plateforme, et cette fonction est pure windows.

    Pareil pour ce bout de code qui est pure linux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    import java.io.*;
     
    public class test{
     
    public static void main(String [] args){
     
      String r="ERREUR";
     
      try {
        LineNumberReader lnr=new LineNumberReader
          (new FileReader("/proc/meminfo"));
        long total=0,free=0;
        while((total==0)||(free==0)) {
          String s=lnr.readLine();
          if(s==null)
            break;
          else if(s.startsWith("MemTotal:")) {
            s=s.substring(10,s.length()-2).trim();
    	total=Long.valueOf(s).longValue();
          }
          else if(s.startsWith("MemFree:")) {
            s=s.substring(10,s.length()-2).trim();
    	free=Long.valueOf(s).longValue();
          }
        }
        lnr.close();
        r=(100l*(total-free)/total)+"%";
     
     
        System.out.println("Free Memory:"+free+" Ko");
        System.out.println("Total Memory:"+total+" Ko");
        System.out.println(r+" of Memory is used");
      } catch(Exception ex) {System.out.println("An error occured when reading Memory statut "+ex);}
     
      //***************************************************************************
      try {
        LineNumberReader lnr=new LineNumberReader
          (new FileReader("/proc/cpuinfo"));
        long cpu=0;
        while(cpu==0) {
          String s=lnr.readLine();
          if(s==null)
            break;
          else if(s.startsWith("cpu MHz")) {
          //System.out.println(s+"\n");
          int pos=s.indexOf(':');
          s=s.substring(pos+1); 
          //System.out.println("["+s+"]\n");
         // s=s.substring(10,s.length()-2).trim();
    	double cpu_speed=Double.valueOf(s).longValue();
    	   System.out.println("CPU speed: "+cpu_speed);
         //	System.out.println("["+cpu_speed+"].......NOT CPU....\n");
          }
     
        }
        lnr.close();
     
     
      } catch(Exception ex) {System.out.println("An error occured when reading Cpu statut "+ex);}
      //***************************************************************************
     
      }
     }

  2. #2
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Java n'est pas le langage le plus adapté pour récupérer des informations si bas niveau. Le sujet a été abordé pas mal de fois sur le forum, tu peux utiliser jni (java native interface) pour recuperer ces informations via des fonctions en C

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Citation Envoyé par leyee
    Java n'est pas le langage le plus adapté pour récupérer des informations si bas niveau. Le sujet a été abordé pas mal de fois sur le forum, tu peux utiliser jni (java native interface) pour recuperer ces informations via des fonctions en C
    Aurais-tu un exemple d'utilisation ?

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par PP(Team)
    je dois faire une appli multi plateforme
    Tu vas être obligé de faire du code lié à chaque plateforme car ces informations systèmes ne sont pas récupérables de la même façon sur chaque.

    Comme le dis leyee, Java n'est pas adapté à ce genre de chose à moins de passer par JNI.
    Tu trouveras plusieurs exemples sur ce forum, dans la FAQ, dans les tutos, etc... en cherchant un peu.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  5. #5
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Si il est possible de répondre à ta question via une ligne de commande (DOS ou Unix) éxécute là avec la classe Runtime. Ca t'évitera de coder dans un autre language.
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  6. #6
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Voilà la réponse.
    Pour que ce code fonctionne, votre classe doit importer java.lang.management.*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    com.sun.management.OperatingSystemMXBean composantSystem = (com.sun.management.OperatingSystemMXBean)
     
    ManagementFactory.getOperatingSystemMXBean();
    Long memRAM = new Long(composantSystem.getTotalPhysicalMemorySize()/1024);
     
    Long memTOT = new Long(composantSystem.getTotalSwapSpaceSize()/1024);
     
    Long memSWAP = memTOT - memRAM;
    Attention, si vous voulez utiliser cette technique dans une applet, comme elle fait appelle à des ressources système, l'applet devra être signée !
    Ici je divise la réponse par 1024 pour avoir des Ko, car la réponse trouvée est donnée en octets.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  7. #7
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Précision sur la solution
    La technique précédente ne fait que récupérer la taille totale de la RAM et la taille de la swap. Mais l'objet OperatingSystemMXBean possède d'autre méthodes, en voici la liste :

    ( Extrait de l'URL : http://java.sun.com/javase/6/docs/jr...temMXBean.html )

    long getCommittedVirtualMemorySize() : Returns the amount of virtual memory that is guaranteed to be available to the running process in bytes, or -1 if this operation is not supported.

    long getFreePhysicalMemorySize() : Returns the amount of free physical memory in bytes.

    long getFreeSwapSpaceSize() : Returns the amount of free swap space in bytes.

    long getProcessCpuTime() : Returns the CPU time used by the process on which the Java virtual machine is running in nanoseconds.

    long getTotalPhysicalMemorySize() : Returns the total amount of physical memory in bytes.

    long getTotalSwapSpaceSize() : Returns the total amount of swap space in bytes.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Merci beaucoup pour l'aide, je vais tester tout ceci.
    Je suis rassuré, car la 1e solution(jni) n'avait pas l'air portable.
    je présume que celle-ci l'est, vu que c'est une librairie de Java.

  9. #9
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par PP(Team)
    vu que c'est une librairie de Java.
    C'est une librairie com.sun.* qui fait partie du code non officiellement supporté et pas forcément documenté. Ce code peut disparaitre, changer de nom, etc... d'une version à l'autre de java sans notice particulière.
    A utiliser avec parcimonie donc.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Points : 301
    Points
    301
    Par défaut
    Citation Envoyé par natha
    C'est une librairie com.sun.* qui fait partie du code non officiellement supporté et pas forcément documenté. Ce code peut disparaitre, changer de nom, etc... d'une version à l'autre de java sans notice particulière.
    A utiliser avec parcimonie donc.

    OK, ok. Je ferais attention à cela lors de la prochaine MAJ de Java.
    J'ai testé sous Linux, et ca marche, donc .

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. récupérer information système à distance
    Par willytito dans le forum Administration
    Réponses: 3
    Dernier message: 09/10/2013, 10h49
  2. Réponses: 2
    Dernier message: 01/02/2013, 13h12
  3. Récupérer des informations système
    Par Mika2008 dans le forum C
    Réponses: 2
    Dernier message: 13/05/2010, 21h00
  4. Récupérer certaines informations système
    Par Leobaillard dans le forum Composants VCL
    Réponses: 13
    Dernier message: 23/12/2005, 10h54
  5. Récupérer informations IP, ...
    Par jpdelx dans le forum ASP
    Réponses: 6
    Dernier message: 16/11/2003, 05h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo