node-jmx icon indicating copy to clipboard operation
node-jmx copied to clipboard

Use a long[] parameter?

Open flaviolsousa opened this issue 7 years ago • 2 comments

Code:

"use strict";
var jmx = require("jmx");

var client = jmx.createClient({
  host: "localhost",
  port: 9011
});

client.connect();
client.on("connect", function () {

  client.getAttribute("java.lang:type=Memory", "HeapMemoryUsage", function (data) {
    var used = data.getSync('used').longValue;
    var max = data.getSync('max').longValue;
    var percent = used / max;
    console.log("Threads used: " + used + " / " + max + " = " + percent.toFixed(2) + "%");
  });

  client.getAttribute("java.lang:type=Threading", "AllThreadIds", function (data) {
    console.log('data: ' + JSON.stringify(data));

    var ids = [data[0].longValueSync(), data[1].longValueSync()];
    console.log(Object.prototype.toString.call(ids) === "[object Array]"); // true
    console.log('ids[0].longValue: ', JSON.stringify(ids[0].longValue));
    console.log('ids: ', JSON.stringify(ids));

    client.invoke("java.lang:type=Threading", "getThreadInfo", [ids], ['long[]'], function (data) { // ????????????????
      console.log("Threading.getThreadInfo", JSON.stringify(data));
    });
  });

  client.setAttribute("java.lang:type=Memory", "Verbose", true, function () {
    console.log("Memory verbose on"); // callback is optional 
  });
});

Output:

PS C:\tmp\watch-jmx> node index.js
Threads used: 923329448 / 1048576000 = 0.88%
data: [{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},
{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{
},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}
,{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},
{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]
true
ids.longValue:  "30285"
ids:  [30285,30284]
C:\tmp\watch-jmx\node_modules\jmx\lib\javaJmx.js:116
          value = java.newInstanceSync(className, value);
                       ^

Error: Could not create class long[]
java.lang.NoClassDefFoundError: long[]
Caused by: java.lang.ClassNotFoundException: long[]
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

    at Error (native)
    at C:\tmp\watch-jmx\node_modules\jmx\lib\javaJmx.js:116:24
    at Array.forEach (native)
    at JavaJmx.jsParams2JavaParams (C:\tmp\watch-jmx\node_modules\jmx\lib\javaJmx.js:111:15)
    at JavaJmx.invoke (C:\tmp\watch-jmx\node_modules\jmx\lib\javaJmx.js:133:40)
    at Client.invoke (C:\tmp\watch-jmx\node_modules\jmx\lib\client.js:61:16)
    at C:\tmp\watch-jmx\index.js:31:12
    at C:\tmp\watch-jmx\node_modules\jmx\lib\adapters\javaReflection.js:49:7
    at C:\tmp\watch-jmx\node_modules\jmx\lib\adapters\javaReflection.js:43:7

flaviolsousa avatar Oct 27 '17 21:10 flaviolsousa

@flaviolsousa thanks for the report.

If you have a fix, PRs are welcome :smiley:

zuazo avatar Oct 30 '17 07:10 zuazo

Although it is slower and consuming more of the VM I am doing:

var jmx = require("jmx");

var client = jmx.createClient({
  host: "localhost",
  port: 9011
});

client.connect();
client.on("connect", function () {
  client.getAttribute("java.lang:type=Threading", "AllThreadIds", function (data) {
    for (var i = 0; i < data.length; i++) {
      var id = 0 + data[i].longValueSync();

      client.invoke("java.lang:type=Threading", "getThreadInfo", [id], ['long'], function (data) {
        console.log("threadName: ", data.getSync('threadName'));
      });
    }
  });
});

Output:

threadName:  JMX server connection timeout 29948
threadName:  [ACTIVE] ExecuteThread: '113' for queue: 'weblogic.kernel.Default (self-tuning)'
threadName:  pool-2-thread-5
threadName:  [ACTIVE] ExecuteThread: '106' for queue: 'weblogic.kernel.Default (self-tuning)'
threadName:  [ACTIVE] ExecuteThread: '104' for queue: 'weblogic.kernel.Default (self-tuning)'
threadName:  pool-2-thread-4
threadName:  [ACTIVE] ExecuteThread: '103' for queue: 'weblogic.kernel.Default (self-tuning)'
threadName:  [ACTIVE] ExecuteThread: '102' for queue: 'weblogic.kernel.Default (self-tuning)'
threadName:  pool-2-thread-3
threadName:  DynamicListenThread[Default]
threadName:  pool-2-thread-2

flaviolsousa avatar Oct 30 '17 17:10 flaviolsousa