Потоки в Linux: как найти и контролировать все нити вашего процесса

Потоки в Linux: как найти и контролировать все нити вашего процесса

Ваш сервер снова "лег" от нагрузки, а вы не понимаете, какой процесс съедает все ресурсы? Часто проблема кроется не в самом процессе, а в его скрытых потоках, которые работают в фоне. В Linux потоки — это мощный механизм для параллельного выполнения задач, но они же могут стать источником серьезных проблем с производительностью. Представьте, что один процесс может породить десятки невидимых "клонов", которые делят между собой память и процессорное время. И если один из них "сойдет с ума", это отразится на всей системе. Как же заглянуть внутрь процесса и увидеть всю эту многопоточную кухню? Мы подготовили для вас подробный гид по самым эффективным инструментам. Вы узнаете, как с помощью классических команд ps и top вытащить на свет все потоки любого приложения. Мы покажем, как заставить утилиту top отображать потоки в реальном времени и как фильтровать их по нужному процессу. Но самое интересное ждет вас в конце — вы познакомитесь с мощнейшим инструментом htop, который превращает скучный список процессов в наглядное интерактивное дерево потоков. Готовы стать настоящим детективом многопоточных приложений? Тогда читайте дальше и откройте для себя все секреты управления потоками в Linux!


Потоки это популярная программная абстракция для параллельного выполнения в современных операционных системах. Когда программа делиться на потоки для многопоточного выполнения, ресурсы такие как адресное пространство оперативной памяти и открытые файлы делятся между потоками чтобы минимизировать накладные расходы и более эффективно использовать процессорное время. Эти возможности делают потоки эффективным механизмом много поточного выполнения.

Для планировщика ядра потоки ничем не отличаются от обычных процессов которые имеют общие ресурсы. Поэтому для просмотра потоков можно использовать такие классические инструменты командной строки как ps и top. В этой статье мы поговорим о том как посмотреть потоки процесса Linux.


Содержание статьи

Потоки процессов в Linux

Сразу необходимо разобраться в том что же такое процессы и потоки в linux и чем они отличаются от друг от друга. В Linux есть два способа наладить многопоточное выполнение какого-либо действия. Первый, когда процесс создает свои копии с помощью механизма fork и затем эти процессы взаимодействуют через сокеты или IPC. Тогда мы получаем отдельные процессы, каждый процесс имеет свои ресурсы и занимает память. Второй же способ подразумевает выделение потоков в рамках одного процесса. Все протоки одного процесса будут иметь один идентификатор группы потоков, а также уникальный идентификатор потока. Они будут иметь доступ ко всем ресурсам родительского процесса и занимать меньше памяти.

1. Утилита ps

В утилите ps показ потоков процесса включается опцией -T. Например вот такой командой можно посмотреть все потоки процесса с PID, например, для Chromium:

ps -T -p <PID>

Потоки в Linux: как найти и контролировать все нити вашего процесса

В колонке SPID отображается идентификатор потока, а в CMD его имя.

2. Утилита top

Команда top позволяет просматривать потоки в реальном времени. Для включения отображения потоков запустите top с опцией -H. Также можно включить или отключить показ потоков во время выполнения с помощью клавиши H:

top -H

Если вы хотите посмотреть только потоки нужного процесса выполните:

top -H -p pid

Потоки в Linux: как найти и контролировать все нити вашего процесса

3. Утилита htop

Ну и как всегда под конец самое интересное. Самой удобной утилитой для просмотра потоков процесса я считаю команду htop. Это основный на ncurces интерактивный просмотрщик процессов. С помощью этой утилиты вы можете наблюдать за потоками в реальном времени в виде дерева.

Для того чтобы включить просмотр потоков в htop откройте программу, войдите в меню нажав клавишу F2, затем выберите Display Options, в разделе Setup. Теперь отметьте Tree view и Show custom thread names. Все, можно нажимать F10 для сохранения настроек:

Потоки в Linux: как найти и контролировать все нити вашего процесса

Теперь вы можете просматривать потоки в виде дерева отдельно для каждого процесса. Здесь снова отображаются потоки для браузера Chromium:

Потоки в Linux: как найти и контролировать все нити вашего процесса

Оставить комментарий


Кликните на изображение чтобы обновить код, если он неразборчив