Мониторинг повышения доступности io_contextC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Мониторинг повышения доступности io_context

Сообщение Anonymous »

Я хочу настроить сторожевой таймер, который проверит, могут ли рабочие io_context выполнять задачи в течение разумного времени и не застревать при длительной работе или блокировании операций.
Для этого я реализовал проверку, которая проверяет правильность работы очереди io_context, планируя задачу каждые 30 секунд. Эта задача просто устанавливает флаг в значение true, чтобы мы могли убедиться, что очередь по-прежнему отвечает.

Код: Выделить всё

using PeriodicTask = BasicScheduledTask;

std::shared_ptr
 io_context_alive_task_ = std::make_shared
(io_context_,
[this](const auto& ec) {
if (ec) {
print_error("Could not report io_context as alive: {}", ec.message());
return;
}
print_debug("Marking io_context as alive");
is_context_alive_ = true;
}, 30s));
Сторожевой таймер запускается в своем независимом потоке вне io_context и каждые 2 минуты проверяет, установлен ли флаг в значение true.

Код: Выделить всё

std::unique_ptr context_watchdog_ = std::make_unique([this] {
while (!io_context_.stopped()) {
io_context_alive_cv_.wait_for(lock, 2min, [this] { return io_context_.stopped(); });
if (!is_context_alive_) {
print_critical("io_context is not responding");
std::abort();
}
print_debug("io_context is ok, setting back to false");
is_context_alive_ = false;
}
print_debug("io_context stopped. stopping thread");
});
Я заметил, что получаю несколько ложных сигналов тревоги, когда система выходит из спящего режима.
Это происходит, поскольку 30-секундная периодическая задача, которая помечает контекст как активный, не выполняется более 2 минут. В результате сторожевой таймер предполагает, что io_context не отвечает, и пытается прервать службу.
Интересно, io_context_alive_cv_ типа std::condition_variable тикает во время спящего режима, в то время как время, основанное на ускорении задачи поддержания активности, в это время простаивает. Если да, возможно, вы подскажете мне способ решения этой проблемы?
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/798 ... ailability
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»