У меня есть пример использования производительности, с помощью которого мне нужно идентифицировать определенные вызовы process()
в EntryProcessor
, которые занимают более 300 миллисекунд. Я попытался использовать SlowOperationDetector
со следующей конфигурацией.Hazelcast SlowOperationDetector для определения операций с временем выполнения менее 1 секунды
<!-- SlowOperation Detector Configuration -->
<property name="hazelcast.slow.operation.detector.enabled">true</property>
<property name="hazelcast.slow.operation.detector.stacktrace.logging.enabled">true</property>
<property name="hazelcast.slow.operation.detector.log.purge.interval.seconds">60000</property>
<property name="hazelcast.slow.operation.detector.log.retention.seconds">60000</property>
<property name="hazelcast.slow.operation.detector.threshold.millis">300</property>
Я дал код тестового образца, который спит в течение 1 секунды внутри process()
.
public static void main(String args[])
{
Config cfg = null;
try {
cfg = new FileSystemXmlConfig("C:\\workarea\\hazelcast\\hazelcast-perf.xml");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(cfg);
IMap<String, Employee> employeesMap = hazelcastInstance.getMap("anyMap");
employeesMap.put("100", new Employee(100));
SlowEntryProcessor slowEntryProcessor = new SlowEntryProcessor();
employeesMap.executeOnKey("100", slowEntryProcessor);
}
static public class SlowEntryProcessor implements EntryProcessor<String, Employee>
{
private static final long serialVersionUID = 1L;
@Override
public EntryBackupProcessor<String, Employee> getBackupProcessor()
{
return null;
}
@Override
public Object process(Entry<String, Employee> arg0)
{
System.out.println("About to sleep");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("done processing");
return null;
}
}
Я не вижу никаких журналов, когда настроенный порог меньше 1000 мс. Поэтому в этом примере я не вижу трассировки стека медленной работы или журналов.
Если я изменяю время сна на 2 сек и медленный рабочий порог до 1 с, срабатывает детектор медленной работы и регистрируются журналы.
Это ошибка в SlowOperationDetector
или я что-то упустил?
привет, спасибо за помощь. Вы видите какой-либо другой способ достичь этого с помощью hz? У меня есть процессор ввода, который получает запрос 10 раз в запросе. Из-за большего количества вызовов (которые я не могу уменьшить) даже 300 мс становится большой сделкой, так как она составляет ~ 3 сек. В целом, как вы анализируете производительность EPE-рендеринга? – Dinesh