Как рассчитать нагрузку на сервер

«Как рассчитать нагрузку на сервер» — вопрос из категории DevOps, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для расчета нагрузки на сервер можно использовать метрики:

  • CPU: runtime.NumCPU() и runtime.GOMAXPROCS() для понимания доступных ядер.
  • Память: runtime.MemStats (Alloc, Sys, HeapInuse).
  • Goroutines: runtime.NumGoroutine() для мониторинга количества горутин.

Пример сбора метрик:

var m runtime.MemStats
runtime.ReadMemStats(&m)
fmt.Printf("CPU: %d/%dnGoroutines: %dnMemory: %v MBn",
    runtime.GOMAXPROCS(0), runtime.NumCPU(),
    runtime.NumGoroutine(), m.Alloc/1024/1024)

Инструменты:

  • pprof для профилирования CPU/memory.
  • expvar для экспорта метрик в реальном времени.
  • Prometheus + Grafana для визуализации.

Оптимизация:

  • Лимитирование горутин (например, через semaphore).
  • Балансировка нагрузки (round-robin, least connections).