Как отладить работу прерывателя? - PullRequest
0 голосов
/ 15 марта 2019

поэтому у меня есть код:

private void schedule(....) {
        long s = m_ringBuffer.next();            
.....
        m_logger.info("1 [{}]", s);
        m_ringBuffer.publish(s);                
.....
}

private void run(){
   .....
   while(true){
       ...
       final long availableSequence = m_barrier.waitFor(nextSequence);
       while (nextSequence <= availableSequence) {
              m_logger.info("2 [{}] [{}]", nextSequence, availableSequence);
             Task t = m_ringBuffer.get(nextSequence);
             m_logger.info("3");
             ...
        }
     } 
 }

.... 9 из 10 раз быстро, но у меня были бы случаи типа

13:35:46.365 [Thread-1] INFO  App - 1 [44905]
13:35:46.380 [Thread-2] INFO  App - 2 [44905] [44905]
13:35:46.380 [Thread-2] INFO  App - 3

Я использую BusySpinWaitStrategy и понятия не имею, что происходит в этих 15 миллис ... и кольцевой буфер пуст.

Мой поток 1 и поток 2 прикреплены к их изолированному процессору.

Есть ли какой-нибудь системный инструмент Linux, который позволит мне отладить это или посмотреть, что делают UNSAFE.get и UNSAFE.putOrderedInt? (похоже, что strace не помогает, и он медленный)

Мое приложение также использует несколько очередей Chronicle, поэтому я не уверен, что там есть какие-либо "столкновения", поскольку в Chronicle повсюду есть небезопасные вызовы.

Моя версия Disruptor - 3.4.2 с использованием Java 8.

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...