Наш многопоточный сервер имеет сотни потоков подключения, которые отвечают за обработку ввода-вывода и ответы на входящие запросы.
Существует еще один асинхронный поток, который время от времени (скажем, каждые несколько секунд) выполняет относительно тяжелые задачи с большим количеством аллокаций.
После того, как я преобразовал этот поток в небольшой пул потоков (т. е. эти задачи теперь каждый раз выполняются из разных потоков), наш сервер обычно имеет одинаковое использование ЦП, но он может внезапно достичь состояния, в котором выделение ресурсов для всех операций занимает гораздо больше времени, а общий ЦП использование сервера почти удваивается с 2 ядер до 3,7 ядер.
Моя основная теория до сих пор заключается в том, что я каким-то образом изменил шаблон доступа к библиотеке tcmalloc, и это вызывает случайные подъемы ЦП. Что я должен посмотреть в статистике tcmalloc, чтобы подтвердить эту теорию? Может ли быть так, что один и тот же код, работающий сейчас из разных потоков (но не одновременно), заставляет tcmalloc выделять из центрального кеша больше, чем из кеша потоков?