【问题标题】:Jmeter PerfMon Metrics collection on different jmx port不同 jmx 端口上的 Jmeter PerfMon Metrics 收集
【发布时间】:2017-02-23 21:19:02
【问题描述】:

想发布这个,因为我搜索了很多,但找不到解决方案。

使用 jmeter 和 ServerAgent (2.2.1),我无法让它在自定义 JMX 端口(不是 4711)上工作。根据文档,您需要像这样指定参数:

By default the Server Agent will try to connect to JMX server at localhost with port 4711. If you started JMX server at different host/port or using authentication with username/password, please, use following additional parameters:

url=<hostname>\:<port>
user=<username>
password=<password>
Available JMX metric types:

gc-time - time spent in garbage collection, milliseconds (used method)
memory-usage - heap memory used by VM, bytes (method used)
memory-committed - heap memory committed by VM, bytes (method used)
memorypool-usage - heap memory pool usage, bytes (method used)
memorypool-committed - heap memory pool committed size, bytes (method used)
class-count - loaded class count in VM (used method)
compile-time - time spent in compilation, milliseconds (used method)
Examples:

gc-time - monitor GC time at localhost:4711
memory-usage:url=somehost.com\:4715 - use alternative hostname/password
class-count:url=somehost.com\:4715:user=apc:password=SecurityPlease123 - some secure setup access

Source

所以我尝试使用

localhost 4444 JMX gc-time:url=localhost:9080

然而,这导致服务器代理具有以下堆栈跟踪

INFO    2017-02-23 20:53:51.352 [kg.apc.p] (): Starting measures: jmx:gc-time:url=localhost\:9080
ERROR   2017-02-23 20:53:51.445 [kg.apc.p] (): Failed to get MX Bean data provider
java.lang.IllegalArgumentException: Can't define JMX type
        at kg.apc.perfmon.metrics.jmx.AbstractJMXDataProvider.getProvider(AbstractJMXDataProvider.java:48)
        at kg.apc.perfmon.metrics.JMXMetric.<init>(JMXMetric.java:42)
        at kg.apc.perfmon.metrics.AbstractPerfMonMetric.createMetric(AbstractPerfMonMetric.java:65)
        at kg.apc.perfmon.PerfMonMetricGetter.setUpMetrics(PerfMonMetricGetter.java:138)
        at kg.apc.perfmon.PerfMonMetricGetter.processCommand(PerfMonMetricGetter.java:63)
        at kg.apc.perfmon.PerfMonMetricGetter.processNextCommand(PerfMonMetricGetter.java:101)
        at kg.apc.perfmon.PerfMonWorker.read(PerfMonWorker.java:210)
        at kg.apc.perfmon.PerfMonWorker.processCommands(PerfMonWorker.java:97)
        at kg.apc.perfmon.AgentTool.processParams(AgentTool.java:72)
        at kg.apc.cmdtools.PluginsCMD.processParams(PluginsCMD.java:63)
        at kg.apc.cmdtools.PluginsCMD.processParams(PluginsCMD.java:23)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at kg.apc.cmd.UniversalRunner.main(UniversalRunner.java:175)
ERROR   2017-02-23 20:53:51.446 [kg.apc.p] (): Invalid metric specified: jmx
java.lang.RuntimeException: Failed to get MX Bean data provider
        at kg.apc.perfmon.metrics.JMXMetric.<init>(JMXMetric.java:45)
        at kg.apc.perfmon.metrics.AbstractPerfMonMetric.createMetric(AbstractPerfMonMetric.java:65)
        at kg.apc.perfmon.PerfMonMetricGetter.setUpMetrics(PerfMonMetricGetter.java:138)
        at kg.apc.perfmon.PerfMonMetricGetter.processCommand(PerfMonMetricGetter.java:63)
        at kg.apc.perfmon.PerfMonMetricGetter.processNextCommand(PerfMonMetricGetter.java:101)
        at kg.apc.perfmon.PerfMonWorker.read(PerfMonWorker.java:210)
        at kg.apc.perfmon.PerfMonWorker.processCommands(PerfMonWorker.java:97)
        at kg.apc.perfmon.AgentTool.processParams(AgentTool.java:72)
        at kg.apc.cmdtools.PluginsCMD.processParams(PluginsCMD.java:63)
        at kg.apc.cmdtools.PluginsCMD.processParams(PluginsCMD.java:23)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at kg.apc.cmd.UniversalRunner.main(UniversalRunner.java:175)
Caused by: java.lang.IllegalArgumentException: Can't define JMX type
        at kg.apc.perfmon.metrics.jmx.AbstractJMXDataProvider.getProvider(AbstractJMXDataProvider.java:48)
        at kg.apc.perfmon.metrics.JMXMetric.<init>(JMXMetric.java:42)
        ... 14 more

令人难以置信的是,解决方案是将 url 部分放在首位。希望有人能找到这个页面并且可以节省时间。

例如

url=localhost:9080:gc-time

【问题讨论】:

    标签: java jmeter performance-testing


    【解决方案1】:

    我知道这个问题,您在 JMeter 监控中没有使用 JMX 端口,但您可能正在使用应用程序端口,但 JMeter 监控需要 JMX 端口。

    验证您的应用程序服务器的 JMX 端口详细信息。以下是最常用的应用服务器和获取端口详细信息的步骤。

    “Tomcat”: 在 catalina.sh 或 setenv.sh 文件中,查找“Dcom.sun.management.jmxremote.port”=9004,如果没有看到此条目,请尝试配置通过以下链接您的 Tomcat 服务器 https://www.mkyong.com/tomcat/jconsole-jmx-remote-access-on-tomcat/

    Jboss: 在standalone.conf 中查找“Dcom.sun.management.jmxremote.port”=9004,如果您没有看到此条目,请尝试通过以下链接配置您的 tomcat 服务器 Connect to JBoss 7 using VisualVM.

    一旦你有了 JMX 端口,JMeter 就可以监控了。

    Monitoring Demo App:
    
    
         1. Start you JMeter instance
         2. Start java application (New instance jmeter, cd {JMeter_home}/bin) using following command 
    
            java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=6969 -Dcom.sun.management.jmxremote.rmi.port=6969 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar ApacheJMeter.jar
    
        3. Download jmeter_mon.jmx file from Github using [link][1]
        4. Open "jmeter_mon.jmx" file from JMeter instance 1.
        5. Start Server monitoring script sh {ServerAgent}/startAgent.sh 
        6. Run the Jmeter
    

    【讨论】:

    • Madhu,感谢您的回复,但如果您阅读了整个内容,我将在我的问题中发布答案,作为可能遇到相同问题的人的参考
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    相关资源
    最近更新 更多