Практический вопрос: TCP-прокси работает корректно, но в production CPU сразу улетел до 100%. Почему?

Причины 100% загрузки CPU в TCP-прокси при корректной работе могут быть связаны с:

Короткий ответ

Что ответить на собеседовании

Причины 100% загрузки CPU в TCP-прокси при корректной работе могут быть связаны с:

Подробный разбор

Ответ с пояснениями

Причины 100% загрузки CPU в TCP-прокси при корректной работе могут быть связаны с:

  • Busy-waiting (активное ожидание) — если в коде используется цикл без блокирующих операций, например, чтение из сокета без ожидания данных.
  • Неправильное использование горутин — слишком много горутин, которые постоянно опрашивают состояние без пауз.
  • Отсутствие или неправильное использование блокирующих вызовов или системных вызовов ожидания (например, epoll, select).

Пример на Go, вызывающий высокую загрузку CPU:

def func busyWait(conn net.Conn) {
    buf := make([]byte, 1024)
    for {
        n, err := conn.Read(buf)
        if err != nil {
            return
        }
        process(buf[:n])
    }
}

Если conn.Read не блокирует (например, установлен в неблокирующий режим), цикл будет крутиться без пауз.

Решение — использовать блокирующие операции ввода-вывода или механизмы ожидания событий, чтобы CPU не загружался без необходимости.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее