p99 задержки подскакивает до 80 мс, хотя медиана — 0,3 мс
Обработчик заявок пишет лог каждой операции:
void Gateway::onOrder(const Order& o) {
std::lock_guard lk(logMutex_);
logFile_ << format(o) << '\n';
logFile_.flush();
// ... обработка
}
Медиана задержки 0,3 мс, но p99 периодически уходит в 50–80 мс, и всплески совпадают по времени во всех 8 рабочих потоках. На сервере параллельно идёт резервное копирование на тот же диск. Что изменить?
- Писать лог асинхронно из отдельного потока
- Увеличить число рабочих потоков до 32
- Заменить std::mutex на std::recursive_mutex
- Перейти с std::ofstream на fprintf
