Hazelcast SlowOperationDetector для идентификации операций с временем выполнения менее 1 секунды
У меня есть сценарий использования производительности, по которому мне нужно определить определенные process()
звонки в EntryProcessor
что занимает более 300 миллисекунд. Я пытался использовать SlowOperationDetector
со следующей конфигурацией.
<!-- 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
или я что-то здесь упускаю?
1 ответ
Это не ошибка; но дизайн. Мы периодически сканируем текущие выполняемые операции. Так что это зависит от частоты сканирования. Детектор медленной работы не предназначен (и поэтому не предназначен) для обнаружения таких коротких операций. Он действительно предназначен для выполнения нескольких секунд операции.