Задать вопрос
AshBlade
@AshBlade
Просто хочу быть счастливым

Как обнаружить высокое потребление CPU?

Есть процесс (на линуксе), на который приходят запросы (разные). Я хочу обнаружить какие запросы потребляют слишком много CPU.

Изначально планировал так: в начале запроса получаю текущее время (start_time) и сохраняю текущее значение getrusage (в частности user_start_time - время в режиме пользователя), а в конце запроса высчитываю потребление таким образом:
(end_time - start_time) / (user_end_time - user_start_time)
.

Но:

1. Правильна ли эта формула?
2. Стоит ли учитывать системное время (из того же rusage)?
3. Есть ли другие подходы?
  • Вопрос задан
  • 85 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@vitaly_il1
DevOps Consulting
3 - есть готовые инструменты. Искать APM - например, от New Relic, или OpenTelemetry.
Ответ написан
Комментировать
@rPman
Для определения нагрузки однопоточного не асинхронного приложения достаточно считать время, которое выполняется запрос. Если у тебя несколько процессов, то считать нагрузку для каждого отдельно.

Если тебе нужно понять, какой тип запроса дает какую нагрузку, для каждого типа запроса накапливай свое время... тот тип у которого будет большее значение, тот и дает большую нагрузку.

Но, так как часто бывает, процесс большую часть времени чего то ждет, например IO операции с базой, сетью или диском, то таким образом не получится вычислить нагрузку именно на процессор. Поэтому, либо перед каждой такой операцией отключаешь счетчик (т.е. снова засекаешь время начала и конца) либо используешь средства операционной системы, для определения нагрузки на процессор конкретным процессом/потоком... они для каждой ОС и фреймворков/языков программирования - свои
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы