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

Langage Java Discussion :

Usage CPU intensif !


Sujet :

Langage Java

  1. #1
    Membre régulier
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Points : 99
    Points
    99
    Par défaut Usage CPU intensif !
    Bonjour Bonjour

    J'ai en main une application serveur tcp/ip (pas mon code source !) que je modifie à-ma-guise et j'ai un petit soucis avec ; En effet, après environ 6-7 heures d'uptime l'usage du processeur s'envole ( il passe d'environ 0-10% au démarrage du server, à 100% sur les deux coeurs ) mais celui de la RAM reste normal.
    J'en ai parlé avec un ami, qui me disait que les threads en java mourraient après un certain temps .... est-ce vrai ? Ou qu'une exception non attrapée pouvait détruire le thread également.
    Du coup j'ai ajouté au début du démarrage du serveur ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Thread.setDefaultUncaughtExceptionHandler((Thread t, Throwable e) -> {
                    System.out.println(t.getName()+": "+e);
                });
    En pensant que si jamais un thread avait un soucis j'aurais un petit log, mais que-dalle.
    J'ai également un log des threads en cours que le serveur écrit dans un fichier chaque heure, mais ceci s'arrete soudainement.
    Voici la classe qui lance les worker threads (Si jamais cela peut etre utile..):

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    package server;
     
    import java.util.concurrent.ScheduledFuture;
    import java.util.concurrent.ScheduledThreadPoolExecutor;
    import java.util.concurrent.ThreadFactory;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.atomic.AtomicInteger;
     
    public class TimerManager {
        private static TimerManager instance = new TimerManager();
        private ScheduledThreadPoolExecutor ses;
     
        public static TimerManager getInstance() {
            return instance;
        }
     
        public void start() {
            if (ses != null && !ses.isShutdown() && !ses.isTerminated()) {
                return;
            }
            final ThreadFactory thread = new ThreadFactory() {
                private final AtomicInteger threadNumber = new AtomicInteger(1);
     
                @Override
                public Thread newThread(Runnable r) {
                    final Thread t = new Thread(r);
                    t.setName("Timermanager-Worker-" + threadNumber.getAndIncrement());
                    return t;
                }
            };
            ses = new ScheduledThreadPoolExecutor(4, thread);
        }
     
        public boolean isExistent() {
            return ses != null;
        }
     
        public boolean isShutdown() {
            return ses.isShutdown();
        }
     
        public void stop() {
            ses.shutdownNow();
            ses = null;
        }
     
        public void unregister(Runnable r) {
            ses.remove(r);
        }
     
        public void executeNow(Runnable r) {
            ses.execute(r);
        }
     
        public ScheduledFuture<?> register(Runnable r, long repeatTime, long delay) {
            return ses.scheduleAtFixedRate(r, delay, repeatTime, TimeUnit.MILLISECONDS);
        }
     
        public ScheduledFuture<?> register(Runnable r, long repeatTime) {
            return ses.scheduleAtFixedRate(r, 0, repeatTime, TimeUnit.MILLISECONDS);
        }
     
        public ScheduledFuture<?> schedule(Runnable r, long delay) {
            return ses.schedule(r, delay, TimeUnit.MILLISECONDS);
        }
     
        public ScheduledFuture<?> scheduleAtTimestamp(Runnable r, long timestamp) {
            return schedule(r, timestamp - System.currentTimeMillis());
        }
     
        public void purgeTM() {
            ses.purge();
        }
    }
    étant donne que je n'ai aucune trace du problème, je suis ouvert à toute proposition qui ameliorerait l'uptime de ce serveur

    merci

    nico

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu peux utiliser Visual VM (dans les outils du JDK) pour analyser ton application.
    Utilises le sampler pour détecter les méthodes qui utilisent le plus de CPU...


    a++

  3. #3
    Membre régulier
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Points : 99
    Points
    99
    Par défaut
    Je suis sur un serveur que je lance sur un VPS Ubuntu, donc pas possible cette solution.
    De plus, le serveur bouffe quasi aucune ram ni cpu, jusqu'a un certain point qui est d'environ T + 6-10h.
    Il s'arrete completement de fonctionner, neanmoins il est toujours lancé (liste des processus avec la commande htop)

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Le fait que ça tourne sur un VPS ubuntu n'empeche pas d'utiliser visualvm. VisualVM peux se connecter à un serveur distant (pour autant qu'on ajoute quelques paramètres au démarrage de l'appli java), tu peux aussi le faire tourner sur le VPS et exporter l'affichage, tu peux lancer l'application java sur ta propre machine si le problème est systématique.


    Sinon, la méthode à l'ancienne: quand ça commence à bouffer, tu tappe quelques

    et tu aura des threads dumps que tu pourra poster ici

  5. #5
    Membre régulier
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Points : 99
    Points
    99
    Par défaut
    Je tente de mon windows d'ouvrir une connexion avec la vm de mon vps distant,
    mon appli est lancée comme ceci:

    nice -n -15 nohup java -Xmx1024m -Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar dist/wt.jar -cp net.server.Server &

    Et dans visualVM, j'ai cette erreur lorsque je tente d'ouvrir la connex:

    java.lang.NoClassDefFoundError: Could not initialize class javax.crypto.JceSecurityManager
    at javax.crypto.Cipher.getConfiguredPermission(Cipher.java:2543)
    at javax.crypto.Cipher.getMaxAllowedKeyLength(Cipher.java:2567)
    at sun.security.ssl.CipherSuite$BulkCipher.isAvailable(CipherSuite.java:548)
    at sun.security.ssl.CipherSuite$BulkCipher.isAvailable(CipherSuite.java:527)
    at sun.security.ssl.CipherSuite.isAvailable(CipherSuite.java:194)
    at sun.security.ssl.SSLContextImpl.getApplicableCipherSuiteList(SSLContextImpl.java:350)
    at sun.security.ssl.SSLContextImpl.getDefaultCipherSuiteList(SSLContextImpl.java:308)
    at sun.security.ssl.SSLSocketImpl.init(SSLSocketImpl.java:607)
    at sun.security.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:405)
    at sun.security.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:88)
    at javax.rmi.ssl.SslRMIClientSocketFactory.createSocket(SslRMIClientSocketFactory.java:121)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:118)
    at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:205)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1929)
    at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1896)
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:287)
    at com.sun.tools.visualvm.jmx.impl.JmxModelImpl$ProxyClient.tryConnect(JmxModelImpl.java:569)
    at com.sun.tools.visualvm.jmx.impl.JmxModelImpl$ProxyClient.connect(JmxModelImpl.java:506)
    at com.sun.tools.visualvm.jmx.impl.JmxModelImpl.connect(JmxModelImpl.java:234)
    at com.sun.tools.visualvm.jmx.impl.JmxModelImpl.<init>(JmxModelImpl.java:223)
    at com.sun.tools.visualvm.jmx.impl.JmxModelProvider.createModelFor(JmxModelProvider.java:60)
    at com.sun.tools.visualvm.jmx.impl.JmxModelProvider.createModelFor(JmxModelProvider.java:41)
    at com.sun.tools.visualvm.core.model.ModelFactory.getModel(ModelFactory.java:111)
    at com.sun.tools.visualvm.tools.jmx.JmxModelFactory.getJmxModelFor(JmxModelFactory.java:69)
    at com.sun.tools.visualvm.jmx.impl.JmxApplicationProvider.addJmxApplication(JmxApplicationProvider.java:295)
    at com.sun.tools.visualvm.jmx.impl.JmxApplicationProvider.createJmxApplication(JmxApplicationProvider.java:200)
    at com.sun.tools.visualvm.jmx.JmxApplicationsSupport.createJmxApplicationImpl(JmxApplicationsSupport.java:319)
    at com.sun.tools.visualvm.jmx.JmxApplicationsSupport.createJmxApplicationInteractive(JmxApplicationsSupport.java:296)
    at com.sun.tools.visualvm.jmx.impl.AddJMXConnectionAction$1.run(AddJMXConnectionAction.java:80)
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1423)
    [catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2033)
    Je pensais a un java obsolete... ce nest pas ca

    merci nico

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Du coté de ta jvm, il semble qu'il te manque le java cryptography extension, tu peux le télécharger sur le site d'oracle. Pour des raisons de législation américaine, ces extensions (cryptographie avancée) ne peuvent pas être distribuées avec le JVM.

    Version java 7: http://www.oracle.com/technetwork/ja...ad-432124.html
    Version java 8: http://www.oracle.com/technetwork/ja...d-2133166.html

  7. #7
    Membre régulier
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Points : 99
    Points
    99
    Par défaut
    java.lang.NoClassDefFoundError: Could not initialize class javax.crypto.JceSecurityManager
    at javax.crypto.Cipher.getConfiguredPermission(Cipher.java:2543)
    at javax.crypto.Cipher.getMaxAllowedKeyLength(Cipher.java:2567)
    at sun.security.ssl.CipherSuite$BulkCipher.isAvailable(CipherSuite.java:548)
    at sun.security.ssl.CipherSuite$BulkCipher.isAvailable(CipherSuite.java:527)
    at sun.security.ssl.CipherSuite.isAvailable(CipherSuite.java:194)
    at sun.security.ssl.SSLContextImpl.getApplicableCipherSuiteList(SSLContextImpl.java:350)
    at sun.security.ssl.SSLContextImpl.getDefaultCipherSuiteList(SSLContextImpl.java:308)
    at sun.security.ssl.SSLSocketImpl.init(SSLSocketImpl.java:607)
    at sun.security.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:405)
    at sun.security.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:88)
    at javax.rmi.ssl.SslRMIClientSocketFactory.createSocket(SslRMIClientSocketFactory.java:121)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:118)
    at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:205)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1929)
    at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1896)
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:287)
    at com.sun.tools.visualvm.jmx.impl.JmxModelImpl$ProxyClient.tryConnect(JmxModelImpl.java:569)
    at com.sun.tools.visualvm.jmx.impl.JmxModelImpl$ProxyClient.connect(JmxModelImpl.java:506)
    at com.sun.tools.visualvm.jmx.impl.JmxModelImpl.connect(JmxModelImpl.java:234)
    at com.sun.tools.visualvm.jmx.impl.JmxModelImpl.<init>(JmxModelImpl.java:223)
    at com.sun.tools.visualvm.jmx.impl.JmxModelProvider.createModelFor(JmxModelProvider.java:60)
    at com.sun.tools.visualvm.jmx.impl.JmxModelProvider.createModelFor(JmxModelProvider.java:41)
    at com.sun.tools.visualvm.core.model.ModelFactory.getModel(ModelFactory.java:111)
    at com.sun.tools.visualvm.tools.jmx.JmxModelFactory.getJmxModelFor(JmxModelFactory.java:69)
    at com.sun.tools.visualvm.jmx.impl.JmxApplicationProvider.addJmxApplication(JmxApplicationProvider.java:295)
    at com.sun.tools.visualvm.jmx.impl.JmxApplicationProvider.createJmxApplication(JmxApplicationProvider.java:200)
    at com.sun.tools.visualvm.jmx.JmxApplicationsSupport.createJmxApplicationImpl(JmxApplicationsSupport.java:319)
    at com.sun.tools.visualvm.jmx.JmxApplicationsSupport.createJmxApplicationInteractive(JmxApplicationsSupport.java:296)
    at com.sun.tools.visualvm.jmx.impl.AddJMXConnectionAction$1.run(AddJMXConnectionAction.java:80)
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1423)
    [catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2033)


    Meme chose apres avoir installer les fichiers ( dans lib7security )
    Une nouvelle piste ?

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu a bien installé les extensions JCE dans le répertoire de la jvm que tu utilise pour lancer visualVM?
    Normalement le jar de JCE doit avoir été placé dans lib/ext/

  9. #9
    Membre régulier
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Points : 99
    Points
    99
    Par défaut
    oui ! et dans lib/security aussi

Discussions similaires

  1. [2012] FREEPROCACHE - usage CPU 100%
    Par Trady dans le forum Administration
    Réponses: 15
    Dernier message: 09/02/2015, 15h35
  2. Usage CPU SQL Server CE 3.5
    Par Sidiart dans le forum C#
    Réponses: 10
    Dernier message: 20/04/2012, 14h01
  3. Usage CPU et Bash
    Par minimoi1234 dans le forum Administration système
    Réponses: 0
    Dernier message: 08/01/2009, 13h49
  4. CPU usage from remote linux machine
    Par snipper dans le forum Administration système
    Réponses: 1
    Dernier message: 13/01/2007, 16h47
  5. L'usage du CPU atteint 100% pour une Form
    Par Ben_Le_Cool dans le forum Composants VCL
    Réponses: 14
    Dernier message: 21/09/2005, 11h52

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