Leggere i nomi e lo stato dei Thread in esecuzione su un Server

di il
13 risposte

Leggere i nomi e lo stato dei Thread in esecuzione su un Server

Ciao a tutti,
vorrei sviluppare un programma che fosse in grado di rilavare lo stato e il nome dei Thread in esecuzione sul mio Server.
Immaginiamo di avere 2 Programmi in esecuzione (Sul Server), ed in ognuno di essi vengano creati N Thread; Ad ogni Thread gli viene assegnato un nome, come ad esempio <<Programma1.Thread1, Programma1.Thread2, Programma2.Thread1....>>
Quello che vorrei sapere, è come leggere tutti i nomi dei Thread in esecuzione sul mio server, ovviamente, conoscendone lo stato (isAlive).
Spero possiate aiutarmi Grazie

13 Risposte

  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    Il nome dei thread? In che senso? Non sono assegnati nomi ai thread ...

    Di che parli?
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    Ciao Oregon,
    quando istanzio un Thread, posso settare il nome, ovvero thread.setName("nameThread");
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    Joe Joe ha scritto:


    è come leggere tutti i nomi dei Thread in esecuzione sul mio server, ovviamente, conoscendone lo stato (isAlive).
    Se vuoi solo fare verifiche o valutazioni ogni tanto "a mano", allora usa i tools di monitoring del JDK.
    Se invece vuoi farlo "programmaticamente", è possibile, ma devi precisare se la "lettura" dei thread vuoi farla all'interno della stessa istanza della JVM che crea quei thread o se da un'altra istanza della JVM (e in tal caso se "locale" sulla stessa macchina o addirittura remota).
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    No .... pensavo ai thread del sistema operativo non a quelli gestiti dalla jvm ..
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    oregon ha scritto:


    No .... pensavo ai thread del sistema operativo non a quelli gestiti dalla jvm ..
    E allora c'è bisogno di usare API "native" del sistema quindi:
    a) cerchi una libreria Java già fatta che sfrutta JNI (Java Native Interface) per accedere alle API native per ottenere le informazioni sui thread.
    b) scrivi tu una DLL nativa da usare tramite JNI ma: devi conoscere JNI, devi avere basi solidissime di C e/o C++, devi conoscere le API native del S.O.
    c) sfrutti la libreria JNA (Java Native Access) per invocare API native senza dover usare JNI (perché la JNA fa già da "ponte"). Ma devi comunque conoscere il S.O. e le sue API native.

    A parte la a) nessuna delle altre è "banale".
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    Ciao andbin,
    io intendo effettuare tali verifiche in modo sistematico/da codice e non occasionale/manuale.
    Quello che intendo effettuare, è un programma in grado di leggere da una istanza di jvm (quella del mio programma) i thread istanziati in altre jvm (Thread da monitorare). Per iniziare, mi basta effettuarlo localmente sulla stessa macchina, magari successivamente via rete.
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    Joe Joe ha scritto:


    io intendo effettuare tali verifiche in modo sistematico/da codice
    Scegli una delle a)/b)/c) dette prima
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    Sai darmi qualche suggerimento per il punto a?
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    Devi studiarti la documentazione relative alle API per il profiling.
    Direi che se ti fai queste domande, e non conosci le risposte, allora

    0) non hai capito, o hai descritto male, il problema
    1) non hai le basi per affrontare il problema
    2) stai sbagliando approccio al problema
    3) non stai utilizzando gli strumenti pensati per risolvere tale problema

    Quindi, tu hai chiesto COME FARE qualcosa.
    Ora spiegaci PERCHE' LO VUOI FARE.

    Quasi sicuramente la soluzione e': USARE LO STRUMENTO CORRETTO (Performance Profiler)
    Ma protrebbe anche essere quello di conoscere i thread NATIVI associati al processo relativo al tuo Server,
    Facile anche questo, basta sapere come fare
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    Ciao migliorabile,
    il perchè è semplice. Voglio sviluppare un programma che sia in grado di monitorare (esternamente) i thread attivi in altri miei programmi scritti in java. Al momento mi interessa monitorare solo quello che "gira" sul mio computer.
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    Joe Joe ha scritto:


    il perchè è semplice. Voglio sviluppare un programma che sia in grado di monitorare (esternamente) i thread attivi in altri miei programmi scritti in java. Al momento mi interessa monitorare solo quello che "gira" sul mio computer.
    Se non hai competenze e/o tempo riguardo gli scenari b)/c) detti prima, allora non c'è altra soluzione che la a), ovvero cercare una libreria già fatta.
    Io sapevo, di nome, della Sigar API (cerca in rete) ma: 1) non so se è ancora in sviluppo/aggiornata e 2) fornisce molte informazioni "native" ma non so dire ora se fornisce informazioni sui thread dei processi.
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    Grazie per le dritte. Aggiorno il post se trovo qualcosa di interessante.
    migliorabile ha scritto:
    Quasi sicuramente la soluzione e': USARE LO STRUMENTO CORRETTO (Performance Profiler)
    A me serve effettuare una cosa simile a quelle che fanno i Performance Profiler, ovvero poter accedere a tutte le info dei processi java attivi sul mio computer. Nello specifico non proprio a tutte, ma, solo sapere il nome e se è vivo o morto.
  • Re: Leggere i nomi e lo stato dei Thread in esecuzione su un Server

    Joe Joe ha scritto:


    ciao migliorabile,
    il perchè è semplice. Voglio sviluppare un programma che sia in grado di monitorare (esternamente) i thread attivi in altri miei programmi scritti in java. Al momento mi interessa monitorare solo quello che "gira" sul mio computer.
    Lo hai gia' detto, ma PERCHE'???

    NON E' un lavoro semplice.
    E' molto intrusivo
    RICHIEDE ottime conoscenze di programmazione, di come funziona la VM, delle API a supporto del profiling.

    Ma NON TI SERVE!

    C'e' gia' Java Mission Control che FA ESATTAMENTE QUANTO HAI DESCRITTO.

    Ma non solo!

    Se ti studi JMX, puoi aggiungere alla tua applicazione TUTTE LE INFORMAZIONI di monitoraggio che ti servono, usando un framework standard, che JMC e' gia' in grado di gestire.
Devi accedere o registrarti per scrivere nel forum
13 risposte