Как использовать пользовательскую телеметрию JProfiler для мониторинга статистики кэша Guava

#java #guava #jprofiler #qvt #telemetry

#java #guava #jprofiler #qvt #телеметрия

Вопрос:

В JPL мы используем методы преобразования моделей для нашей работы по системному проектированию. Мы используем реализацию Eclipse QVTO спецификации OMG QVT.

http://www.eclipse.org/modeling/m2m/downloads/index.php?project=qvtoml

Однако компилятор Eclipse QVTO удручающе медленный. Благодаря разумному применению кэша Guava мне удалось значительно повысить производительность компилятора Eclispe QVTO. Можно было бы сделать больше, но с тем, что у меня есть, я хотел бы получить представление об эффективности оптимизации кэширования путем мониторинга статистики кэша во время выполнения; т.е. com.google.common.cache.CacheStats

Есть ли у кого-нибудь предложения относительно того, как определить пользовательский зонд телеметрии JProfiler для этого?

http://resources.ej-technologies.com/jprofiler/help/doc/indexRedirect.html?httpamp;amp;amp;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() находится крючок для доступа к вашему кэшу.

Это позволит получить телеметрию для всех измерений статистики кэша, как показано на снимке экрана ниже:

введите описание изображения здесь

Комментарии:

1. Спасибо! Что вы предлагаете для нескольких кэшей?

2. Скажем, класс GraphTest, который будет иметь переменную graphs, как показано в документе CacheBuilder: docs.guava-libraries.googlecode.com/git/javadoc/com/google /…

3. Вы можете объединить несколько кэшей для телеметрии таким же образом. Представление для каждого кэша было бы чем-то для представления объектов управления, но в настоящее время это невозможно, поскольку объекты управления могут обновляться только по событиям, а не периодически. Выделенный зонд кэша Guava находится в системе отслеживания проблем JProfiler и будет доступен для версий 7.1 или 8.0.