Команда top, live-мониторинг в терминале, сортировка и фильтрация
Как htop, но для Python-функций. В реальном времени.
Команда top показывает использование CPU Python-функциями в реальном времени. Это ваш инструмент для быстрого понимания того, что происходит прямо сейчас.
py-spy top --pid <PID>Пример:
# Найдите PID Python-процесса
ps aux | grep python
# Запустите top
py-spy top --pid 12345Вы увидите:
py-spy top (0.1s samples)
Total Samples 452
Command python3.9 my_app.py
%Self %Total Self Time Total Time Count Function
45.2% 45.2% 0.045s 0.045s 12 process_data (my_app.py:25)
23.1% 68.3% 0.023s 0.068s 8 parse_json (my_app.py:42)
15.4% 15.4% 0.015s 0.015s 45 <listcomp> (my_app.py:45)
8.7% 84.0% 0.009s 0.084s 3 fetch_from_db (db.py:12)
5.2% 5.2% 0.005s 0.005s 120 str.replace
2.4% 2.4% 0.002s 0.002s 34 dict.__setitem__
| Колонка | Описание |
|---|---|
| %Self | Процент CPU, проведённый непосредственно в функции (без учёта вызовов) |
| %Total | Процент CPU в функции включая вызванные ею функции |
| Self Time | Время в секундах, проведённое в функции (без вызовов) |
| Total Time | Время включая вызванные функции |
| Count | Количество сэмплов, где функция была в стеке |
| Function | Имя функции и местоположение (файл:строка) |
Ключевое различие:
Пример:
def outer():
time.sleep(0.5) # Self time
inner() # Вызов другой функции
def inner():
time.sleep(0.3) # Self timeВ top:
inner: %Self = 37.5%, %Total = 37.5% (0.3с из 0.8с)outer: %Self = 62.5%, %Total = 100% (0.5с self + 0.3с inner)Нажмите клавиши для сортировки:
| Клавиша | Сортировка |
|---|---|
| s | По Self Time (по умолчанию) |
| t | По Total Time |
| c | По Count (количество сэмплов) |
Когда что использовать:
Нажмите / и введите имя:
/filter process
Покажет только функции, содержащие "process" в имени.
/filter .py
Покажет только Python-файлы (исключит встроенные функции).
Нажмите Esc для сброса.
Нажмите Пробел для паузы обновления. Удобно для изучения снимка.
Нажмите q или Ctrl+C.
У вас есть Flask-приложение, которое отвечает 3 секунды вместо 200 мс.
flask run --port 5000lsof -i :5000
# или
ps aux | grep flaskpy-spy top --pid <PID>В другом терминале:
curl http://localhost:5000/api/slow-endpointВ top вы увидите:
py-spy top (0.1s samples)
Total Samples 312
Command python3.9 app.py
%Self %Total Self Time Total Time Count Function
52.1% 52.1% 1.56s 1.56s 1 slow_endpoint (app.py:45)
28.3% 28.3% 0.85s 0.85s 45 expensive_computation (utils.py:12)
12.4% 12.4% 0.37s 0.37s 12 json.dumps
5.2% 5.2% 0.16s 0.16s 234 str.split
2.0% 2.0% 0.06s 0.06s 89 list.append
Вывод: expensive_computation занимает 28% CPU — это кандидат на оптимизацию или кэширование.
Можно запустить программу сразу с top:
py-spy top -- python my_script.pypy-spy запустит скрипт и начнёт мониторинг.
По умолчанию py-spy обновляется каждые 0.1 секунды (10 раз в секунду).
Для изменения используйте --interval:
# Обновление каждые 0.5 секунды
py-spy top --interval 0.5 --pid 12345top показывает агрегированные данные по всем потокам. Если нужно видеть каждый поток отдельно, используйте record с последующим анализом в speedscope.
| Характеристика | top | record |
|---|---|---|
| Режим | Реальное время | Запись в файл |
| Интерактивность | Да (сортировка, фильтр) | Нет (только просмотр SVG) |
| История | Только текущее состояние | Можно перемотать, изучить детали |
| Экспорт | Нет | SVG, speedscope, raw |
| Лучше для | Быстрого анализа «что сейчас» | Глубокого анализа, отчётов |
Рекомендация: Используйте top для быстрого понимания ситуации, record для детального анализа и сохранения результатов.
Нет истории: Видите только текущий срез. Для истории используйте record.
Агрегация по потокам: Не показывает разделение по потокам.
Терминал: Требует терминал, нельзя открыть в браузере.
py-spy top --pid <PID>s — сортировка по Self Timet — сортировка по Total Time/ и введите имя функцииПробел для паузыq для выходаКлючевая идея: top — это ваш быстрый инструмент для понимания «что происходит прямо сейчас». Не требует записи, не создаёт файлов, показывает результат немедленно.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.
Далее: Снимки стека вызовов