如何使用 JProfiler 自定义探针遥测来监控 Guava 缓存统计信息
Posted
技术标签:
【中文标题】如何使用 JProfiler 自定义探针遥测来监控 Guava 缓存统计信息【英文标题】:How to use JProfiler custom probe telemetry for monitoring Guava cache statistics 【发布时间】:2011-12-13 15:13:44 【问题描述】:在 JPL,我们在系统工程工作中使用模型转换技术。 我们使用 OMG 的 QVT 规范的 Eclipse QVTO 实现。
http://www.eclipse.org/modeling/m2m/downloads/index.php?project=qvtoml
但是,Eclipse QVTO 编译器速度慢得令人沮丧。 通过明智地应用 Guava 的缓存,我成功地做出了重大贡献 Eclispe QVTO 编译器的性能改进。可以做的更多 但有了我所拥有的,我想了解一下效果 通过在运行时监控缓存统计信息来进行缓存优化; 即 com.google.common.cache.CacheStats
有没有人建议w.r.t。如何定义 JProfiler 自定义遥测探针 这样做?
http://resources.ej-technologies.com/jprofiler/help/doc/indexRedirect.html?http&&&resources.ej-technologies.com/jprofiler/help/doc/helptopics/probes/custom.html
尼古拉斯。【问题讨论】:
【参考方案1】:对于可以使用静态方法访问的单个缓存,这相当容易。在自定义探测向导中,将元数据脚本设置为
metaData.recordOnStartup(true);
metaData.telemetry(true);
metaData.addCustomTelemetry("Request count", Unit.PLAIN, 1f);
metaData.addCustomTelemetry("Hit count", Unit.PLAIN, 1f);
metaData.addCustomTelemetry("Hit rate", Unit.PERCENT, 1f);
metaData.addCustomTelemetry("Miss count", Unit.PLAIN, 1f);
metaData.addCustomTelemetry("Miss rate", Unit.PERCENT, 1f);
metaData.addCustomTelemetry("Load success count", Unit.PLAIN, 1f);
metaData.addCustomTelemetry("Load exception count", Unit.PLAIN, 1f);
metaData.addCustomTelemetry("Load exception rate", Unit.PERCENT, 1f);
metaData.addCustomTelemetry("Eviction count", Unit.PLAIN, 1f);
metaData.addCustomTelemetry("Total load time", Unit.MICROSECONDS, 1f);
metaData.addCustomTelemetry("Average load penalty", Unit.MICROSECONDS, 1f);
和遥测脚本
import test.CacheTest;
import com.google.common.cache.*;
Cache cache = CacheTest.getSingleCache();
if (cache == null)
return;
CacheStats stats = cache.stats();
data[0] = (int)stats.requestCount();
data[1] = (int)stats.hitCount();
data[2] = (int)(stats.hitRate() * 100);
data[3] = (int)stats.missCount();
data[4] = (int)(stats.missRate() * 100);
data[5] = (int)stats.loadSuccessCount();
data[6] = (int)stats.loadExceptionCount();
data[7] = (int)(stats.loadExceptionRate() * 100);
data[8] = (int)stats.evictionCount();
data[9] = (int)stats.totalLoadTime() / 1000;
data[10] = (int)stats.averageLoadPenalty() / 1000;
CacheTest.getSingleCache()
是获取缓存的钩子。
这将为您提供所有缓存统计数据测量的遥测数据,如下面的屏幕截图所示:
【讨论】:
谢谢!您对多个缓存有何建议? 比如说,一个 GraphTest 类,它有一个图形变量,如 CacheBuilder 文档中所示:docs.guava-libraries.googlecode.com/git/javadoc/com/google/… 您可以以相同的方式合并遥测的多个缓存。每个缓存视图将是用于控制对象视图的东西,但目前这是不可能的,因为控制对象只能通过事件而不是定期更新。 JProfiler 问题跟踪器中有一个专门的 Guava 缓存探针,可用于 7.1 或 8.0。以上是关于如何使用 JProfiler 自定义探针遥测来监控 Guava 缓存统计信息的主要内容,如果未能解决你的问题,请参考以下文章
转载:JProfiler远程监控LINUX上的Tomcat过程细讲
jprofiler_监控远程linux服务器的JVM进程(转 非常棒)