Sobes.tech
Middle+
27

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

Companies where asked
МВидеоМВидео

Answer from AI

sobes.tech AI

Причины 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 не загружался без необходимости.