Developing JConsole

I am using JConsole to monitor my application, but would like to tweak the UI slightly. ie when viewing threads you are unable to maximize the stack trace or resize the thread name panel.
I know the source code is available, but was wondering how straight forward it is to make the changes and rebuild the GUI.

<br>
Hi,
In fact, it is very easy to build the JConsole sources.
First get the latest JDK 6 source snapshot.
JConsole's source code can be found under:
sun/tools/jconsole/
sun/tools/jconsole/inspector/
sun/tools/jconsole/resources/
com/sun/tools/jconsole/In order to be able to build the sources:
<ul>
<li>Rename [jdk-jrl-sources]/jdk6/trunk/j2se/src/share/classes/sun/tools/jconsole/Version-template.java into [jdk-jrl-sources]/jdk6/trunk/j2se/src/share/classes/sun/tools/jconsole/Version.java</li>
<li>Specify the build time dependency on [jdk-home]/lib/tools.jar</li>
</ul>
If you want to build the sources using ant have a look at the following blog entry that explains how to build parts of the JDK.
Regards,
Luis-Miguel Alventosa
JMX - JConsole - Java SE development team
Sun Microsystems, Inc.
<br>

Similar Messages

  • JConsole Development

    Hello,
    I know limited Java, but I good with several other programming languages (PHP, C#, VB6, VBA, HTML, and JavaScript), so I am looking to learn. My company is using a black box application developed in Java and we are having performance issues with it. That the moment we have set the Java VM to reboot every night at 10am, which seems to help. I have setup JConsole to monitor the JVM, but with the restarts it loses connection every night and all the associated data that it has collected.
    The performance issues are causing same angry customers and they would like them fix. I am trying to find correlations between the JVM load and performance, but I need to be able to search the data to a given time frame. I can do this in excel, if I had an CSV output.
    I would like some help in modifying JConsole to automatically append the collected data to a CSV file OR recommendations on other tools that I can use to do this for me?
    I would also like some help modifying JConsole to automatically attempt reconnect at a specified time interval OR recommendations on other tools that I can use to do this for me?
    Can people recommend resources?
    Thanks
    jlimited
    Edited by: jlimited on Apr 2, 2009 9:25 AM

    jlimited wrote:
    I would like some help in modifying JConsole to automatically append the collected data to a CSV file OR recommendations on other tools that I can use to do this for me?Get a profiler.
    Create or find a client that will force the server to do stuff.
    Run the server in the profiler while using the client (or several) to produce a moderate load on the system. That should show where the system spends most of its time. Correct problems from that.
    After the above step tun the server in the profiler while using the client (or several) to produce a heavy load on the system. That should show where the system spends most of its time. Correct problems from that.
    ..and we are having performance issues with it. Helps to identify that more specifically. For example.
    1. At 8:00am everything runs fast. By 4:00pm every action from the user standpoint is slow.
    2. The customer activity report which is run at 5:00pm by all of the customers is slower and gets slower every day that the server is not rebooted. Everything else is ok.

  • Jconsole can't access MBeans in windows XP

    I developed a sample Mbean and started in windowsXP. when i started jconsole it is not showing any java process. but the same code runs in linux fine. The jconsole in the windows xp can access the MBeans running in Linux . My temp dir is in FAT32. I tried to acees the MBeans running in windows XP using jconsole in linux but that was in vain. I disabled authentication and ssl.
    plz help me!!!!!!!!!!!!!!!

    Hi,
    Sorry for the late reply - with the summer time it seems that many messages
    have slipped through my attention ;-(
    I cannot answer your question directly for lack of information on the specific
    problem you're experiencing.
    You may want however to use the information provided here:
    http://blogs.sun.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole
    in order to figure out what is happening.
    If your agent has security enabled you may want to have a look at the new
    JMX advanced example that's been added to JDK 6 build 96 (you will need
    JDK 6 to run the example) - see here:
    http://blogs.sun.com/jmxetc/entry/an_advanced_jmx_example_for
    Hope this helps,
    -- daniel

  • Problem with JConsole

    Following the instructions given in
    http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html
    ,I tried to monitor a local Java VM with JConsole, but the connection dialog box of JConsole doesn't display any locally running Java VMs ( I confirmd the Java VMs running using the "Task Manager" of windows XP and I also made sure that the Java VMs and JConsole were all running with the same username).
    I will be grateful if somebody could suggest where things might have gone wrong....
    P.S: I executed the Java VM shipped with JDK1.5 and with the -Dcom.sun.management.jmxremote option.
    Thanks

    Sorry for the trouble. I guess I have figured out the problem. Seemingly , java monitoring and management doesn't work for local VMs in Windows XP when the Windows temporary folder is in a FAT32 partition.
    But I was successful to work it out the other way round, using remote connection.

  • How to View BI Server Config parameters with Jconsole

    Hi Experts
    I want to examine the OBIEE 10g Server config params using the JConsole. I tried to start the Java agent by, navigating to the directory *"<oraclebi home>\systemdmanagement”*, and issuing the command *“runagent”.*
    I guess I am missing some options /variables that I would need to pass when issuing *“runagent”.*
    Please suggest . Thanks in advance.
    Edited by: 858793 on May 22, 2013 6:42 AM

    one you have the data in the infosource, for performance and holding history, you shoudl move the data in a ods or a cube.
    ODS for daily report, only daily data no history
    CUbe for historical Reporting and daily reporting.
    you wil need to create update rules. and process chain to load data in yoru data targets( ODS or CUbe). then create a query on them. play with the query how you want the data to show. try to USe 7.0 as its more flexible if not 3.5.
    you can broadcast it straight to e-mails using web broadcasting. other wise create web template( as define in the steps in the previous post).
    remember do everything in yoru SANDBOX system or Development system. do not under any circumstances do this in production or testing.
    any question feel free to post
    hope this helps.
    Amer

  • How does jconsole know of all monitored JVMs in system?

    When you run jconsole, the tab named "local" lists JVMs running and their PIDs. By what mechanism is it able to 'know' which JVMs are running that have been started with the arguments that enable JMX management?
    Does jconsole connect to JVMs or to MBeanServers? (Assume each JVM has multiple MBeanServers, and each MBeanServer has multiple domains.)
    Also, what's the difference between using the 'remote' and 'advanced' tabs to connect to a JVM? They both have usernames and passwords, but while the 'remote' tab has a host and port, the 'advanced' tab has a URL that contains a host and port within it. So what's the difference - when would you pick one method of connection over another?
    Thanks.

    If jconsole connects to MBeanServers rather than
    JVMs, then how can it tell the difference between
    multiple MBeanServers that have been started by a
    single JVM?JConsole connects to a given JMX connector server which is associated with a given MBeanServer at creation time.
    For example, if I have a simple application (i.e. one
    JVM) that starts up two MBeanServers in its main
    method, using
    MBeanServerFactory.createMBeanServer(name). To start
    the application, you run the JVM with the
    com.sun.management.jmxremote and
    com.sun.management.jmxremote.port variables.
    How will jconsole know to differentiate between the
    two MBeanServers? After all, there's only one JVM -
    and it's been started with only one port number.In your example JConsole will not see any of your MBeanServers. It'll see the platform MBeanServer which is the one used by the out-of-the-box management agent.
    The next question I have is regarding the JVM - does
    any JVM that's started locally show up in the "local"
    tab of JConsole (because the JVM is always
    instrumented by default - true?), or does it only
    appear if you run it with the
    com.sun.management.jmxremote variable?The new Attach API in JDK 6 allows JConsole 6 to show all the JVMs running on the local machine although you will only be able to connect to the ones running on JDK 6 (and JDK 5.0 if started with the com.sun.management.jmxremote or com.sun.management.jmxremote.port system properties).
    JConsole 5 only shows the JVMs running on JDK 5.0 and started with the com.sun.management.jmxremote or com.sun.management.jmxremote.port system properties.
    Have a look at the link below for more detailed info:
    http://java.sun.com/javase/6/docs/technotes/guides/management/index.html
    Regards,
    Luis-Miguel Alventosa
    Java SE JMX/JConsole development team
    Sun Microsystems, Inc.
    http://blogs.sun.com/lmalventosa/

  • Jconsole.exe not present in my JDK bin

    Hi,
    I installed JDK 1.5 but could not find jconsole in my bin.I also tried with the JDK 1.6 but that was also not of any help.
    Could anybody tell me why this is happening?
    I also have IBM JDK which does have jconsole in its bin.But the problem is, that it does not have the local view.Only Remote and advanced options are present.I want to monitor some MBeans that I have written.So I would require the local view.
    Could the IBM JDK be responsible for absence of sun jconsole in my bin?
    Regards,
    Pooja

    Hi Guys,
    I think this thread is useful to me. So trying to get some info on Jconsole and Jdk. In fact I was able to get Jconsole from the JDK that I downloaded from sun.
    But now I doubt is this:
    I have an app running on J9 JVM which is from IBM. I want to get some performance parameter from this app. I tried using the Jconsole packaged from sun. I also use the options that were given in the instructions. But I was not able to connect to my app. The JConsole GUI showed Connection Refused.
    Now the questions:
    1. Can I use sun JConsole to query and app runnning on IBM JVM (J9) ?? My app was developed and compiled in Sun JDK 1.5. But runnin on J9 JVM.
    2. Where can I get the IBM JDK so that I can get IBM JConsole ?? I searched in google but in vain ... ( Pooja, will you be able to point me to any site where I can download that from ??)
    Any help would be highly appreciated .
    Regards
    Sibu

  • Re: Unable to make a secure connection to Weblogic 9 with Jconsole

    Hi,
    I'm after some help configuring my jconsole 5 (or 6) command line and service URL to create a secure connection to a Weblogic 9.2 server (1.5 JVM). The weblogic runtime mbeans server is being used to host my custom mbeans. Here are the settings I'm currently using:-
    "D:\jdk1.6.0_13\bin\jconsole.exe" -J-Djmx.remote.protocol.provider.pkgs=weblogic.management.remote -J-Djava.class.path="D:\jdk1.6.0_13\lib\jconsole.jar;D:\jdk1.6.0_13\lib\tools.jar;D:\gmac\weblogic_client_jars\wljmxclient.jar" -J-Djavax.net.ssl.keyStore=d:\keystores\????????.jks -J-Djavax.net.ssl.keyStorePassword=??????? -debug service:jmx:<strong>t3s</strong>:///jndi/<strong>t3s</strong>://w.x.y.z:ppppppp/weblogic.management.mbeanservers.runtime
    This fails with the following error:-
    09-Apr-2009 11:40:18 com.sun.corba.se.impl.legacy.connection.SocketFactoryConnectionImpl <init><br />
    WARNING: "IOP00410201: (COMM_FAILURE) Connection failure: socketType: IIOP_SSL_WLS; hostname: 1.2@; port: 2089"<br />
    org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 201 completed: No<br />
    at com.sun.corba.se.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2172)<br />
    at com.sun.corba.se.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2193)<br />
    at com.sun.corba.se.impl.legacy.connection.SocketFactoryConnectionImpl.<init>(SocketFactoryConnectionImpl.java:73)<br />
    at com.sun.corba.se.impl.legacy.connection.SocketFactoryContactInfoImpl.createConnection(SocketFactoryContactInfoImpl.java:70)<br />
    at com.sun.corba.se.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:152)<br />
    at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:118)<br />
    at com.sun.corba.se.impl.protocol.CorbaClientDelegateImpl.is_a(CorbaClientDelegateImpl.java:211)<br />
    at org.omg.CORBA.portable.ObjectImpl._is_a(ObjectImpl.java:112)<br />
    at weblogic.corba.j2ee.naming.Utils.narrowContext(Utils.java:126)<br />
    at weblogic.corba.j2ee.naming.InitialContextFactoryImpl.getInitialContext(InitialContextFactoryImpl.java:94)<br />
    at weblogic.corba.j2ee.naming.InitialContextFactoryImpl.getInitialContext(InitialContextFactoryImpl.java:31)<br />
    at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:41)<br />
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)<br />
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)<br />
    at javax.naming.InitialContext.init(InitialContext.java:223)<br />
    at javax.naming.InitialContext.<init>(InitialContext.java:197)<br />
    at weblogic.management.remote.common.ClientProviderBase.makeConnection(ClientProviderBase.java:138)<br />
    at weblogic.management.remote.common.ClientProviderBase.newJMXConnector(ClientProviderBase.java:79)<br />
    at javax.management.remote.JMXConnectorFactory.newJMXConnector(JMXConnectorFactory.java:338)<br />
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:247)<br />
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:207)<br />
    at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:336)<br />
    at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:296)<br />
    at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:280)<br />
    Caused by: java.net.UnknownHostException: 1.2@<br />
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)<br />
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)<br />
    at java.net.Socket.connect(Socket.java:519)<br />
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550)<br />
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:353)<br />
    at com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:71)<br />
    at weblogic.corba.client.security.SSLORBSocketFactory.createSocket(SSLORBSocketFactory.java:275)<br />
    at weblogic.corba.client.iiop.BiDirSSLORBSocketFactory.createSocket(BiDirSSLORBSocketFactory.java:61)<br />
    at com.sun.corba.se.impl.legacy.connection.SocketFactoryConnectionImpl.<init>(SocketFactoryConnectionImpl.java:55)<br />
    ......I've tried all secure protocols (IIOPS, T3S, and HTTPS) with the same result. Until I added the following to the command line I got an "unknown protocol error".
    -J-Djmx.remote.protocol.provider.pkgs=weblogic.management.remote
    I know the service URL works as I have a standalone java client which can make the connection using the same JVM arguments and service URL from my development machine, using any of the mentioned protocols. I can also access the server using IIOP from jconsole unencrypted, but this will need to be turned off eventually.
    Any help would be appreciated.
    Regards
    Andrew
    </p>
    Edit : 15-Apr-2009 :
    I've Also tried using weblogic.jar in the jconsole classpath rather than wljmxclient.jar and get the following error:-
    java.io.IOException
    at weblogic.management.remote.common.ClientProviderBase.makeConnection(ClientProviderBase.java:151)
    at weblogic.management.remote.common.ClientProviderBase.newJMXConnector(ClientProviderBase.java:79)
    at javax.management.remote.JMXConnectorFactory.newJMXConnector(JMXConnectorFactory.java:338)
    Caused by: javax.naming.ConfigurationException Root exception is java.net.MalformedURLException: no host: t3s://:0
    at weblogic.jndi.internal.ExceptionTranslator.toNamingException(ExceptionTranslator.java:45)
    at weblogic.jndi.WLInitialContextFactoryDelegate.toNamingException(WLInitialContextFactoryDelegate.java:773)
    at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:365)
    at weblogic.jndi.Environment.getContext(Environment.java:307)
    I did find one sun forum posting relating to problems connecting JConsole to SSL/TLS. In that case the poster ended up creating a new connector provider for jconsole to use. I don't know if this is relevant to my situation, and no code examples were made available for me to try. If anyone can offer some advice on things to check it would be a great help, or free alternatives to JConsole which are proven to work with secure protocols.
    Edited by: APD on Apr 15, 2009 2:55 AM

    Solution *Part 1"
    Well I've managed to get JConsole and Weblogic 9.2 working over a secure connection. Getting to the solution has involved a
    lot of searching on the web, and some help from Oracle support, but the biggest credit goes to a team from Xebia (France)
    for their blogsite with an informative article on the subject.
    Here are the links to the article
    Original in French:-
    http://blog.xebia.fr/2007/06/28/jconsole-et-weblogic-9
    Put through Google's translation toolset into English:-
    http://translate.google.com/translate?hl=en&sl=fr&u=http://blog.xebia.fr/2007/06/28/jconsole-et-weblogic-9
    Originally I reviewed this without translation, but not being a French speaker/reader I just skipped the text and looked at
    the code / setup examples. This lead me to my first breakthrough which was to add the following to the JConsole startup
    command:-
    -J-Djmx.remote.protocol.provider.pkgs=weblogic.management.remote
    and
    -J-Djava.class.path="D:\jdk1.5.0_16\lib\jconsole.jar;D:\jdk1.5.0_16\lib\tools.jar;D:\weblogic_client_jars\wljmxclient.jar"
    This forces JConsole to use the weblogic classes for the various protocols, rather than its own classes, and cured the problem
    of JConsole throwing an "Unknown protocol" exception when I tried to use T3, T3S, IIOPS or HTTPS. However it didn't cure the
    next problem, which depending on the version of JConsole, was either "Unknown host" or "Malformed URL".
    I experimented with using "Weblogic.jar" in place of "wljmxclient.jar" (both taken from my Weblogic installation), and got a
    different set of errors.
    After further searching on the web, with no success, I had the inspiration to put the Xebia article through Google
    translate to see if anything else popped out, and it did. It turns out that there is a mismatch in the way the userid and
    password typed into JConsole's GUI is passed to the underlying protocol "client provider", and then the server (this may
    just be a weblogic issue), so it becomes necessary to extend the weblogic classes with a version that puts the
    userid/password in the correct place before calling the original weblogic methods. Once done the classpath needs updating
    to include the jar for the new client provider classes, and the jmx.remote.protocol.provider.pkgs needs to point at those
    classes instead of the weblogic ones.
    Here's one of the client providers I created, derived from the sample code in the Xebia article:-
    package myproviders.jmx.remote.t3;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    import javax.management.remote.JMXConnector;
    import javax.management.remote.JMXServiceURL;
    * Extended from the original Weblogic provider to correct the userid/password location problem.
    * Credit to the team from Xebia Business Intelligence Architects for the solution.
    public class ClientProvider extends weblogic.management.remote.t3.ClientProvider {
         private static final String local_protocol = "t3"; // just a debug constant
         public JMXConnector newJMXConnector(JMXServiceURL serviceURL,
                   Map environment) throws IOException {
              System.out.println("inside myproviders clientProvider.newJMXConnector()");
              System.out.println("Protocol is " + local_protocol);
              Map newMap = checkCredentials (environment);
              System.out.println("continuing with super.newJMXConnector()");
              return super.newJMXConnector(serviceURL, newMap);
         @SuppressWarnings ("unchecked")
         private Map checkCredentials (Map map)
              System.out.println("...inside myproviders clientProvider.checkCredentials()");
              // if the old map doesn't contain the new security properties
              if (!map.containsKey("java.naming.security.principal") && ! map.containsKey("java.naming.security.credentials"))
                   System.out.println("......Missing new format credentials");
                   // but it does contain the old one
                   if (map.containsKey("jmx.remote.credentials"))
                        System.out.println("......found old format credentials - transforming old to new.");
                        // build a new map containing the correct properties, as well as the old ones, so whichever
                        // version the server is expecting, it will get the values.
                        Map newMap = new HashMap();                    
                        newMap.putAll(map);
                        String[] cred = (String[])map.get("jmx.remote.credentials");
                        newMap.put("java.naming.security.principal", cred[0]);
                        newMap.put("java.naming.security.credentials",cred[1]);
                        return newMap;
              return map;
    ---------------------------------------------------------------------------------------------------------------

  • Using JConsole to Change Logger Level at runtime

    Is it possible to use JConsole to change Java's Logger logging level at runtime?
    If so could someone tell me how I could go about doing this?
    Thanks,

    Never mind, found a nice site to help out for this.
    http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html

  • Cannot see local process list in JConsole of JDK6

    When I run JConsole (JDK6)without parameters I cannot see list of local proceseses. JConsole with PID as a parameter works well. JConsole of JDK5 works ok. Does anybody help me?

    Hi Michael,
    Do you mind cd'ing to the directory that TMP is defined as and see if there is a directory named hsperfdata_<user> where <user> is your login. That is the directory where the instrumentation buffers are mapped (as shared memory files). Each time a java process starts it should create a file in that directory. The file name is the pid and that is how jps and the other jvmstat tools get the process list. If you don't see any pid-like files in the directory then it might be a permission problem. Can you try to create a file in the directory? If you get an "access denied" error then that would explain the issue. If you don't get an error then it would be interesting to see the cacls.exe output on the directory - that's the Windows command line tool to print the ACL on the directory.
    A workaround might be to create a new temporary directory and just update the TMP variable in your environment (Control Panel -> System -> Advanced -> Environment Variables).
    Regards,
    Luis-Miguel Alventosa
    Java SE JMX/JConsole development team
    Sun Microsystems, Inc.

  • Geting remote management example work with 1.5 jconsol.exe

    Hello, I had a difficulty getting remote manegement exaple work with jconsole.
    I follow the guidence of:
    http://java.sun.com/developer/technicalArticles/J2SE/jmx.html
    Working with HTTP adaptor going fine,
    Tring to invoke example with jconsole.exe produces exception (the situation happens unsing jre 1.4 and 1.5):
    the code:
    public class Server {
        public static void main(String[] args) {
            try {
                // Instantiate the MBean server
                System.out.println("\nCreate the MBean server");
                MBeanServer mbs = MBeanServerFactory.createMBeanServer();
                // Create a JMXMP connector server
                System.out.println("\nCreate a JMXMP connector server");
                JMXServiceURL url = new JMXServiceURL("jmxmp", null, 5551);
                JMXConnectorServer cs =
                    JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs);
                // Start the JMXMP connector server
                System.out.println("\nStart the JMXMP connector server");
                cs.start();
                System.out.println("\nJMXMP connector server successfully started");
                System.out.println("\nWaiting for incoming connections...");
            } catch (Exception e) {
                e.printStackTrace();
    }consol:
    Create the MBean server
    Create a JMXMP connector server
    Start the JMXMP connector server
    JMXMP connector server successfully started
    Waiting for incoming connections...
    20/03/2007 10:54:51 GenericConnectorServer ClientCreation.run
    WARNING: Failed to open connection: java.io.StreamCorruptedException: invalid stream header
    java.io.StreamCorruptedException: invalid stream header
         at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
         at java.io.ObjectInputStream.<init>(Unknown Source)
         at com.sun.jmx.remote.socket.SocketConnection$ObjectInputStreamWithLoader.<init>(SocketConnection.java:354)
         at com.sun.jmx.remote.socket.SocketConnection.readMessage(SocketConnection.java:204)
         at com.sun.jmx.remote.opt.security.AdminServer.connectionOpen(AdminServer.java:76)
         at com.sun.jmx.remote.generic.ServerSynchroMessageConnectionImpl.connect(ServerSynchroMessageConnectionImpl.java:58)
         at javax.management.remote.generic.GenericConnectorServer$ClientCreation.run(GenericConnectorServer.java:405)
         at com.sun.jmx.remote.opt.util.ThreadService$ThreadServiceJob.run(ThreadService.java:208)
         at com.sun.jmx.remote.opt.util.JobExecutor.run(JobExecutor.java:59)Any ideas ?
    10X
    Message was edited by:
    KIRPICH79

    Hi,
    We belive that you used the default connector RMIConnector in your jconsole to connect your JMXMP connector server.
    What you should do is to:
    1) start your jconsole with the jmxmp classes:
    jconsole -J-Djava.class.path=JAVA_HOME/lib/jconsole.jar:JAVA_HOME/lib/tools.jar:jmxremote_optional.jar
    (see http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html)
    2) specify your server url address in the jconsole connecting window:
    service:jmx:jmxmp://boat:5551
    you should substitue "boat" to your host name
    3)connect
    Hope this helps and let's know if you still have problem.
    Shanliang JIANG
    SUN JavaSE/JMX team

  • Developping jmx client

    hi
    i am developping a web application that will allow me monitoring jmx ressources.
    my application is no fonctional but with a unique limit:i didn't find how to integrate graphs that describe the evolution of my ressources(for rxample ,for the attribute ProcessCpuTime of the mbean operating system )
    i am using jsf can you help me about what tools should i use to integrate graphs

    You are seeing the result of java.lang.Class.getName(). Unfortunately this method returns somewhat user-hostile strings for array classes, and has always done so. It can't be fixed because that would risk breaking existing code. The JMX API specifies the same strings, so that for example you can give such a string to Class.forName.
    Have a look at the method getReadableClassName in [Utils.java|http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/src/share/classes/sun/tools/jconsole/inspector/Utils.java] from the JConsole sources to see how you might translate these strings into something more readable.
    By the way, the size of an array is not part of its type in Java, so typically you will want to generate int[] rather than int[32]. An attribute whose value is currently an int[32] could be an int[23] or any other size the next time you read it.
    Regards,
    Éamonn McManus -- JMX Spec Lead -- [http://weblogs.java.net/blog/emcmanus]

  • Develop application for java  Monitoring and Management

    hi
    i would like to develop an application that enables me to monitor and manage Java applications and instead of using jconsole ormc4j
    please can you tell mz how to start

    The various general JMX clients such JConsole, [MC4J|http://mc4j.org/confluence/display/mc4j/Home] (the tool referenced with "or mc4j" above), VisualVM, and jManage all use the same approach for remote JMX management that you can use ([JSR 160|http://jcp.org/en/jsr/detail?id=160]).
    Some useful resources include the [Java Tutorial on JMX Remote Management|http://java.sun.com/docs/books/tutorial/jmx/remote/index.html], [Remote JMX: Connectors and Adapters|http://marxsoftware.blogspot.com/2008/08/remote-jmx-connectors-and-adapters.html], and [Remote JMX: With and Without Spring and Proxies|http://marxsoftware.blogspot.com/2008/06/remote-jmx-with-and-without-spring-and.html] (focus on non-Spring clients with and without proxies).

  • JConsole problem

    I ran the following commands:
    JDK_HOME/bin/java -Dcom.sun.management.jmxremote -jar JDK_HOME/demo/jfc/Java2D/Java2Demo.jar
    where JDK_HOME is the directory containing the JDK 5.0. The Monitoring and Management Using JMX document provides detailed information on out-of-the-box remote management.
    To start JConsole, run
    JDK_HOME/bin/jconsole
    The app runs but I I can't execute jconsole while my app is running.
    JDK_HOME/bin/java -Dcom.sun.management.jmxremote -jar JDK_HOME/demo/jfc/Java2D/Java2Demo.jar
    What use is the JConsole if I can't run it at the same time as the application?
    Any ideas?

    Hi,
    Just a few precisions to help me understand what's going wrong:
    What do you mean by 'I can't execute jconsole while my app is running' - do
    you get an error message? which is it? which JDK version / OS are you using?
    Stupid question but: you did start jconsole in another terminal
    window, right?
    BTW: if you're planning to develop applications that make use of JMX and if
    you're new to JMX I'd suggest you try out with NetBeans, download the
    JMX NetBeans plugin module from the NetBeans update center, and
    follow the JMX NetBeans tutorial.
    More info here:
    http://www.netbeans.org/kb/articles/jmx-getstart.html
    http://management.netbeans.org/jmx/
    and there:
    http://blogs.sun.com/roller/page/jmxnetbeans
    http://blogs.sun.com/roller/page/jmxetc?entry=looking_for_jmx_overview_examples
    Best regards,
    -- daniel
    JMX, SNMP, Java etc...
    http://blogs.sun.com/roller/page/jmxetc

  • JConsole 6 PID connection problems

    I have written a small program that I would like to manage using JMX. Using JDK 5 everything works fine. But since I migrated to JDK 6 the JMX part does not work anymore. Here is the code of the MBean that I would like to manage:
    Interface
    public interface HelloMBean {
      public String test() throws java.rmi.RemoteException;
    Class
    public class Hello implements HelloMBean {
      public String test() { return "Hello"; } throws java.rmi.RemoteException;
      public Hello() {
        try { ManagementFactory.getPlatformMBeanServer().registerMBean(this, new ObjectName(getClass().getPackage().getName().concat(":type=").concat(getClass().getSimpleName()))); }
        catch (Exception E) { LOG.throwing(getClass().getName(), "<init>", E); }
      }When using JConsole from JDK 6 and try to connect using the PID method, JConsole tries to connect to the (correct) PID forever.
    I scanned through the forum and other sources in the Internet but all the proposed trouble-shoots did not help. I checked the TMP directory and inside is a directory named "hsperfdata_bwuest01". Inside this directory one file per JVM is, named for the PID of the JVM process (e.g. 2772, which I try to connect to in JConsole). The access rights to this directory are (oh, sorry, I am using Windows XP on NTFS):
    d:\document and settings\bwuest01\local settings\temp\hsperfdata_bwuest01 bwuest01:F
    d:\document and settings\bwuest01\local settings\temp\hsperfdata_bwuest01 everyone:RHope that someone can help me with this issue, because I do not want to migrate back to JDK 5.

    Hi,
    Sorry for taking some days to come back but I am no more a "hardcore" developer, but rather hope to find some time to code once a month.
    I have cleared my PC from all Java versions except JDK 6.0 with the following version information:
    java version "1.6.0_01"
    Java(TM) SE Runtime Environment (build 1.6.0_01-b06)
    Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing)
    Here is the log that is printed by the server application with logging of JMX enabled:
    *22.09.2007 22:17:47 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = JMImplementation:type=MBeanServerDelegate
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=JMImplementation:type=MBeanServerDelegate
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object JMImplementation:type=MBeanServerDelegate
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered JMImplementation:type=MBeanServerDelegate
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.ClassLoadingImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=ClassLoading
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=ClassLoading
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:type=ClassLoading
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=ClassLoading
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.MemoryImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=Memory
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=Memory
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:type=Memory
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=Memory
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for com.sun.management.OperatingSystem
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=OperatingSystem
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=OperatingSystem
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:type=OperatingSystem
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=OperatingSystem
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.RuntimeImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=Runtime
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=Runtime
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:type=Runtime
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=Runtime
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.ThreadImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=Threading
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=Threading
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:type=Threading
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=Threading
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.HotSpotDiagnostic
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = com.sun.management:type=HotSpotDiagnostic
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=com.sun.management:type=HotSpotDiagnostic
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object com.sun.management:type=HotSpotDiagnostic
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered com.sun.management:type=HotSpotDiagnostic
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.CompilationImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=Compilation
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=Compilation
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:type=Compilation
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=Compilation
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.MemoryManagerImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=MemoryManager,name=CodeCacheManager
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=MemoryManager,name=CodeCacheManager
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:name=CodeCacheManager,type=MemoryManager
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=MemoryManager,name=CodeCacheManager
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.GarbageCollectorImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=GarbageCollector,name=Copy
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=GarbageCollector,name=Copy
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:name=Copy,type=GarbageCollector
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=GarbageCollector,name=Copy
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.GarbageCollectorImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=GarbageCollector,name=MarkSweepCompact
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=GarbageCollector,name=MarkSweepCompact
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:name=MarkSweepCompact,type=GarbageCollector
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=GarbageCollector,name=MarkSweepCompact
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.MemoryPoolImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=MemoryPool,name=Code Cache
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=MemoryPool,name=Code Cache
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:name=Code Cache,type=MemoryPool
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=MemoryPool,name=Code Cache
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.MemoryPoolImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=MemoryPool,name=Eden Space
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=MemoryPool,name=Eden Space
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:name=Eden Space,type=MemoryPool
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=MemoryPool,name=Eden Space
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.MemoryPoolImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=MemoryPool,name=Survivor Space
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=MemoryPool,name=Survivor Space
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:name=Survivor Space,type=MemoryPool
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=MemoryPool,name=Survivor Space
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.MemoryPoolImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=MemoryPool,name=Tenured Gen
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=MemoryPool,name=Tenured Gen
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:name=Tenured Gen,type=MemoryPool
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=MemoryPool,name=Tenured Gen
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.MemoryPoolImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.lang:type=MemoryPool,name=Perm Gen
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.lang:type=MemoryPool,name=Perm Gen
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.lang:name=Perm Gen,type=MemoryPool
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.lang:type=MemoryPool,name=Perm Gen
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.MemoryPoolImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    *FEINER: ObjectName = java.lang:type=MemoryPool,name=Perm Gen [shared-ro]*
    *22.09.2007 22:17:48 Repository addMBean*
    *FEINER: name=java.lang:type=MemoryPool,name=Perm Gen [shared-ro]*
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    *FEINER: Send create notification of object java.lang:name=Perm Gen [shared-ro],type=MemoryPool*
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    *FEINER: JMX.mbean.registered java.lang:type=MemoryPool,name=Perm Gen [shared-ro]*
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for sun.management.MemoryPoolImpl
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    *FEINER: ObjectName = java.lang:type=MemoryPool,name=Perm Gen [shared-rw]*
    *22.09.2007 22:17:48 Repository addMBean*
    *FEINER: name=java.lang:type=MemoryPool,name=Perm Gen [shared-rw]*
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    *FEINER: Send create notification of object java.lang:name=Perm Gen [shared-rw],type=MemoryPool*
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    *FEINER: JMX.mbean.registered java.lang:type=MemoryPool,name=Perm Gen [shared-rw]*
    *22.09.2007 22:17:48 StandardMBean getMBeanInfo*
    FEINER: Building MBeanInfo for java.util.logging.Logging
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = java.util.logging:type=Logging
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=java.util.logging:type=Logging
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object java.util.logging:type=Logging
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered java.util.logging:type=Logging
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = net.eco_dom.server.registry:type=CRegistry
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=net.eco_dom.server.registry:type=CRegistry
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object net.eco_dom.server.registry:type=CRegistry
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered net.eco_dom.server.registry:type=CRegistry
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = net.eco_dom.server.service.network:type=CConnectionManager
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=net.eco_dom.server.service.network:type=CConnectionManager
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object net.eco_dom.server.service.network:type=CConnectionManager
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered net.eco_dom.server.service.network:type=CConnectionManager
    Server is running
    Echo server running and registered
    Mediator registrar is running and registered
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor registerMBean*
    FEINER: ObjectName = net.eco_dom.server.service.mediator_registrar:type=CMediatorRegistrar
    *22.09.2007 22:17:48 Repository addMBean*
    FEINER: name=net.eco_dom.server.service.mediator_registrar:type=CMediatorRegistrar
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor addObject*
    FEINER: Send create notification of object net.eco_dom.server.service.mediator_registrar:type=CMediatorRegistrar
    *22.09.2007 22:17:48 DefaultMBeanServerInterceptor sendNotification*
    FEINER: JMX.mbean.registered net.eco_dom.server.service.mediator_registrar:type=CMediatorRegistrar
    And here is the log of JConsole with the option you proposed:
    This is all that JConsole prints while having debug active => it is nothing! That is the reason why I am so puzzled about this problem. If I would get some kind of an exception, even it is one of those "nothing-saying NPE", I would have an indication that there is a problem somewhere. But looking at the current logs (well, JConsole did not print one) I cannot identify any problem, except that things are not working. However, as I already mentioned, I could manage to make it work with coding the "stay in main-method forever" in a different way.
    Best regards,
    Bjoern

Maybe you are looking for

  • Paypal - free shipping?

    Hi, We have just added paypal to our site and would like to send an email to everyone this week saying if they pay with paypal they will get free shipping. Does anyone know the best way to do this? I can't work out how to make a discount code / free

  • Do you have any procedure/function to get parent child relation ship logic?

    I am in great need. I have developed one but its has many cursor. Actually to get final leaf node, I have to keep on using cursor until last leaf found. Note: CONNECT BY PRIOR not to be used with this requirement. So need to create procedure/function

  • FRM-40735 WHEN-CUSTOM-ITEM-EVENT trigger raised unhandled exception ORA-065

    Please help....This error is comming when opening the form. The form is running on oracle 11g 64bits web logic. "FRM-40735 WHEN-CUSTOM-ITEM-EVENT trigger raised unhandled exception ORA-065"

  • HELP! ID2 to CS3 or CS4

    I have a large document that was created in ID2 several years back. When trying to open in either CS3 or 4 it crashes. My printer can open it in ID2, but it too crashes his CS versions. He has tried doing a simple save and then reopen. Is there any w

  • Count the number of Pluses Generated

    we are using the pxi-6602(counter/IO) along with SCB-68. the problem we are encountering is that,we want count the number of pulses generated. we are using the counter0 and generating the pluse, using the example VI Genrate Finite pulse(TIO).VI which