- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想做的是:通过 JMX 公开调用统计信息(主要是调用计数和平均调用时间)。问题是我想在 AspectJ 支持下执行此操作(为我的实现类自动计算它)。
我创建的是 JmxBean:
public class JmxStatistics implements Serializable {
private final String name;
private long errorCount;
private long errorCallTime;
private long successCount;
private long successCallTime;
public JmxStatistics(String name) {
this.name = name;
}
public synchronized long getCallCount() {
return errorCount + successCount;
}
public synchronized long getAvgCallTimeInMillisecs() {
return (errorCallTime + successCallTime) / getCallCount();
}
public synchronized long getAvgSuccessfulCallTimeInMillisecs() {
return (errorCallTime + successCallTime) / successCount;
}
public synchronized long getAvgFailedCallTimeInMillisecs() {
return (errorCallTime + successCallTime) / errorCount;
}
public synchronized void increaseErrorCallTime(long sumCallTime) {
this.errorCallTime += sumCallTime;
}
public synchronized void increaseSuccessCallTime(long sumCallTime) {
this.successCallTime += sumCallTime;
}
public synchronized long getErrorCount() {
return errorCount;
}
public synchronized void incrementErrorCount() {
this.errorCount++;
}
public synchronized long getSuccessCount() {
return successCount;
}
public synchronized void incrementSuccessCount() {
this.successCount++;
}
@Override
public String toString() {
return name + "{" + "callCount=" + getCallCount()
+ " (s: " + successCount + ",e:" + errorCount + "); "
+ "avgCallTime=" + getAvgCallTimeInMillisecs() + "ms "
+ "(" + getAvgSuccessfulCallTimeInMillisecs() + "ms;e:" + getAvgFailedCallTimeInMillisecs() + "ms)" + "}";
}
AOP 包装点:
public Object wrap(ProceedingJoinPoint joinPoint) throws Throwable {
JmxStatistics jmxs = store.getStatisticsBean(joinPoint);
long start = System.currentTimeMillis();
Object result;
try {
result = joinPoint.proceed();
} catch (Throwable t) {
long runtime = System.currentTimeMillis() - start;
jmxs.incrementErrorCount();
jmxs.increaseErrorCallTime(runtime);
throw t;
}
long runtime = System.currentTimeMillis() - start;
jmxs.incrementSuccessCount();
jmxs.increaseSuccessCallTime(runtime);
return result;
}
还有一个用于公开所有(以编程方式创建的)JMX bean 的存储:
public class JmxStatisticsStore {
private final HashMap<String, JmxStatistics> jmxBeans = new HashMap<>();
public HashMap<String, JmxStatistics> getJmxBeans() {
return jmxBeans;
}
JmxStatistics getStatisticsBean(ProceedingJoinPoint joinPoint) {
String id = joinPoint.getTarget().getClass().toString() + "." + joinPoint.getSignature().getName();
if (!jmxBeans.containsKey(id)) {
synchronized (jmxBeans) {
if (!jmxBeans.containsKey(id)) {
JmxStatistics jmxStatistics = new JmxStatistics(id);
jmxBeans.put(id, jmxStatistics);
}
}
}
return jmxBeans.get(id);
}
}
我想为此使用 Spring AOP 和 MBeanExporter。我的配置如下:
<bean id="jmxStatisticsStore" class="package.JmxStatisticsStore"/>
<bean id="jmxAspect" class="package.AspectJJmxCalculator" />
<aop:config>
<aop:aspect id="jmxAspectId" ref="jmxAspect">
<aop:pointcut id="pointCutAround"
expression="execution(* jmx.tester..*.*(..))" />
<aop:around method="wrap" pointcut-ref="pointCutAround" />
</aop:aspect>
</aop:config>
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
<property name="beans">
<map>
<entry key="bean:name=callStatistics" value-ref="jmxStatisticsStore"/>
</map>
</property>
</bean>
目前,我尝试在 tomcat 中运行它(jmx.tester 包有一个我在 webapp 中使用的 Spring bean)。 Web 应用程序运行正常,使用 JConsole 我可以连接到服务器。在服务器上的 beans 下,我可以看到带有 HashMap 属性的 callStatistics bean。
在我不打电话之前,散列图是空的(这很好)(在“值”框中显示 {})在我调用之后(因此 hashmap 不再为空),值变为不可用,如果我尝试通过 JMX 调用 getJmxBeans 方法,我会得到以下异常:
Problem invoking getJmxBeans: java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: package.JmxStatistics (no security manager: RMI class loader disabled)
编辑:我希望看到的是对不同 ID 的调用显示为单独的 JMX 属性。
有什么办法可以完成我想完成的事情吗?谢谢
最佳答案
设法解决这个问题。修改了 JmxStatisticsStore:
@Autowired
MBeanExporter exporter;
private static final Logger LOG = LogManager.getLogger();
private final HashMap<String, Object> jmxBeans = new HashMap();
JmxData getStatisticsBean(ProceedingJoinPoint joinPoint) {
String id = "bean:name=" + joinPoint.getTarget().getClass().toString() + "." + joinPoint.getSignature().getName();
if (!jmxBeans.containsKey(id)) {
synchronized (jmxBeans) {
if (!jmxBeans.containsKey(id)) {
JmxData jmxStatistics = new JmxData(id);
jmxBeans.put(id, jmxStatistics);
try {
exporter.registerManagedResource(jmxStatistics, new ObjectName(id));
} catch (MalformedObjectNameException ex) {
LOG.warn("Error while registering " + id, ex);
}
}
}
}
return (JmxData) jmxBeans.get(id);
}
这样可以在运行时创建新的 MBean
关于java - 使用 JMX 以编程方式公开调用统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26121524/
我目前正在学习数据挖掘,有以下问题。 机器学习和数据挖掘之间有什么关系? 我发现许多数据挖掘技术都与统计相关,而我“听说”数据挖掘与机器学习有很多关系。所以我的问题是:机器学习与统计学密切相关吗? 如
我有很多表的数据,例如: event_id player finish 1 a 1 1 b 2 1 c
我对 http_status_module 提供的统计数据感兴趣 特别是上游部分的统计数据。 http://nginx.org/en/docs/http/ngx_http_status_module.
除了 Cluster MBean 之外,是否有任何可以在 Akka (Java) 中启用的内置 JMX 公开监控/统计信息?我看过 Typesafe Console,但由于它需要许可证才能用于从多个节
我正在尝试在我的程序中使用“usage”统计信息来获取类似于 time 的数据工具。但是,我很确定我做错了什么。这些值似乎是正确的,但有时可能有点奇怪。我没有在网上找到好的资源。有人知道如何做得更好吗
我有一个带有统计表的 MySQL 数据库。我想以年历、月度的形式输出数据。对于没有点击率的几个月,我想花费一个“空”DIV。有两个ID。 $query = mysqli_query($db,"SELE
设置: 问题是经典概率问题的复杂形式: 70 colored balls are placed in an urn, 10 for each of the seven rainbow colors.
有哪些 Ruby gem 可以执行数据处理? 最佳答案 我知道有 3 种从 Ruby 访问 R 的方法: RinRuby RSRuby 通过 Rserve-Ruby-Client 预约 RinRuby
背景 图像领域内的一个国内会议快要召开了,要发各种邀请邮件,之后要录入、统计邮件回复(参会还是不参会等)。如此重要的任务,老师就托付给我了。ps: 统计回复邮件的时候,能知道谁参会或谁不参会。
我正在添加用户输入的几个数字并将它们添加到数组列表中。 到目前为止我的代码: package project143; import java.util.*; /** * @author -- */
正如标题所示,我需要做的是在各种 iO/Android/Windows 应用程序中跟踪各种用户事件 - 例如点击、滑动、在页面上花费的时间等。 这些应用程序基于响应式 HTML/CSS/JS,并具有简
我希望计算 HTML 表中每个唯一值的实例数,并在其自己的表中返回结果。该表是根据用户的文本输入生成的。例如,用户输入可能如下所示: Report 46 Bob Marley 4/20/2
如何使用 PHP 计算数字数组的 z 分数?我需要计算 z 分数,然后找到百分位数 (CDF)!我可以使用哪些 PHP 函数?谢谢! 最佳答案 以下代码将给出 CDF 的良好近似值(Abramowit
我只是想知道是否可以计算 GitHub 上空存储库的总数。 如果不适合所有用户,可以为自己做吗? 编辑 我已经尝试过size:0搜索,但似乎返回了很多包含数据的存储库。采用 size:0..1 之类的
public class Scanner { private HtmlProcessor hp; private String baseUrl; private int ste
我正在使用 Mule ESB 3.4。我想开发一个自定义 Java 组件来计算流收到的请求数量。流程将例如像这样: http inbound-endpoint -> counter -> vm-out
我喜欢借助 GitHub API 来统计存储库中所有开放的拉取请求和问题。我发现 API 端点 /repos/:owner/:repo 结果包含 open_issues 属性。然而,这是问题和拉取请求
如何使用 PHP 计算数字数组的 z 分数?我需要计算 z 分数,然后找到百分位数 (CDF)!我可以使用哪些 PHP 函数?谢谢! 最佳答案 以下代码将给出 CDF 的良好近似值(Abramowit
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在尝试以编程方式获取搜索字词列表的 Google 新闻搜索结果计数(即有多少个结果),但仅限于过去 1 年。使用用户界面搜索时,结果计数仅出现在常规搜索中,但在“工具 > 最近 > 过去一年”下时
我是一名优秀的程序员,十分优秀!