gpt4 book ai didi

java - 测试 Collectd 的 JMX 插件时出现异常(缺少 API getHostname())

转载 作者:行者123 更新时间:2023-12-01 10:19:03 24 4
gpt4 key购买 nike

在测试 Collectd 的 JMX 插件时,我们遇到了 NoSuchMethod 异常:

java.lang.NoSuchMethodError: Method org.collectd.api.Collectd.getHostname()Ljava/lang/String; not found.

都不是来自official api wikicollectd-api.jar的源代码中我们也找不到这个方法的定义。

此外,我们不知道为什么调用这个 API。以下是我的 collectd.conf 相关内容:

LoadPlugin "java"

<Plugin "java">
JVMARG "-Djava.class.path=/usr/share/collectd/java/collectd-api.jar:/usr/share/collectd/java/generic-jmx.jar"
LoadPlugin "org.collectd.java.GenericJMX"

<Plugin "GenericJMX">
################
# MBean blocks #
################
# Number of classes being loaded.
<MBean "classes">
ObjectName "java.lang:type=ClassLoading"
#InstancePrefix ""
#InstanceFrom ""

<Value>
Type "gauge"
InstancePrefix "loaded_classes"
#InstanceFrom ""
Table false
Attribute "LoadedClassCount"
</Value>
</MBean>

# Time spent by the JVM compiling or optimizing.
<MBean "compilation">
ObjectName "java.lang:type=Compilation"
#InstancePrefix ""
#InstanceFrom ""

<Value>
Type "total_time_in_ms"
InstancePrefix "compilation_time"
#InstanceFrom ""
Table false
Attribute "TotalCompilationTime"
</Value>
</MBean>

# Garbage collector information
<MBean "garbage_collector">
ObjectName "java.lang:type=GarbageCollector,*"
InstancePrefix "gc-"
InstanceFrom "name"

<Value>
Type "invocations"
#InstancePrefix ""
#InstanceFrom ""
Table false
Attribute "CollectionCount"
</Value>

<Value>
Type "total_time_in_ms"
InstancePrefix "collection_time"
#InstanceFrom ""
Table false
Attribute "CollectionTime"
</Value>

</MBean>

######################################
# Define the "jmx_memory" type as: #
# jmx_memory value:GAUGE:0:U #
# See types.db(5) for details. #
######################################

# Generic heap/nonheap memory usage.
<MBean "memory">
ObjectName "java.lang:type=Memory"
#InstanceFrom ""
InstancePrefix "memory"

# Creates four values: committed, init, max, used
<Value>
Type "jmx_memory"
#InstancePrefix ""
#InstanceFrom ""
Table true
Attribute "HeapMemoryUsage"
InstancePrefix "heap-"
</Value>

# Creates four values: committed, init, max, used
<Value>
Type "jmx_memory"
#InstancePrefix ""
#InstanceFrom ""
Table true
Attribute "NonHeapMemoryUsage"
InstancePrefix "nonheap-"
</Value>
</MBean>

# Memory usage by memory pool.
<MBean "memory_pool">
ObjectName "java.lang:type=MemoryPool,*"
InstancePrefix "memory_pool-"
InstanceFrom "name"

<Value>
Type "jmx_memory"
#InstancePrefix ""
#InstanceFrom ""
Table true
Attribute "Usage"
</Value>
</MBean>

### MBeans by Catalina / Tomcat ###
# The global request processor (summary for each request processor)
<MBean "catalina/global_request_processor">
ObjectName "Catalina:type=GlobalRequestProcessor,*"
InstancePrefix "request_processor-"
InstanceFrom "name"

<Value>
Type "io_octets"
InstancePrefix "global"
#InstanceFrom ""
Table false
Attribute "bytesReceived"
Attribute "bytesSent"
</Value>

<Value>
Type "total_requests"
InstancePrefix "global"
#InstanceFrom ""
Table false
Attribute "requestCount"
</Value>

<Value>
Type "total_time_in_ms"
InstancePrefix "global-processing"
#InstanceFrom ""
Table false
Attribute "processingTime"
</Value>
</MBean>

# Details for each request processor
<MBean "catalina/detailed_request_processor">
ObjectName "Catalina:type=RequestProcessor,*"
InstancePrefix "request_processor-"
InstanceFrom "worker"

<Value>
Type "io_octets"
#InstancePrefix ""
InstanceFrom "name"
Table false
Attribute "bytesReceived"
Attribute "bytesSent"
</Value>

<Value>
Type "total_requests"
#InstancePrefix ""
InstanceFrom "name"
Table false
Attribute "requestCount"
</Value>

<Value>
Type "total_time_in_ms"
InstancePrefix "processing-"
InstanceFrom "name"
Table false
Attribute "processingTime"
</Value>
</MBean>

# Thread pool
<MBean "catalina/thread_pool">
ObjectName "Catalina:type=ThreadPool,name=*"
InstancePrefix "request_processor-"
InstanceFrom "name"

<Value>
Type "threads"
InstancePrefix "total"
#InstanceFrom ""
Table false
Attribute "currentThreadCount"
</Value>

<Value>
Type "threads"
InstancePrefix "running"
#InstanceFrom ""
Table false
Attribute "currentThreadsBusy"
</Value>
</MBean>
#####################
# Connection blocks #
#####################
<Connection>
ServiceURL "service:jmx:rmi:///jndi/rmi://localhost:8899/jmxrmi"
Host "localhost"
Collect "classes"
Collect "compilation"
Collect "garbage_collector"
Collect "memory"
Collect "memory_pool"
Collect "catalina/thread_pool"
Collect "catalina/detailed_request_processor"
Collect "catalina/global_request_processor"
</Connection>
</Plugin>
</Plugin>

如果有任何答案,我将不胜感激。

最佳答案

我解决了这个问题。来自收集的 GITHUB https://github.com/collectd/collectd/blob/master/bindings/java/org/collectd/api/OConfigItem.java ,我们可以看到java api文件是最新版本,并且定义了缺少的API getHostname()。

对于使用最新的collectd 5.5版本安装的collect-api.jar,java文件不包含新的API。

这样我从github下载代码编译打包并替换旧jar后就可以正常工作了。

希望对您有帮助。

简直不敢相信正式版本中会发生这样的问题。

关于java - 测试 Collectd 的 JMX 插件时出现异常(缺少 API getHostname()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35743352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com