Подтвердить что ты не робот

Ограничение некоторых процессов на CPU% - Linux

У меня есть следующая проблема: некоторые процессы, генерируемые динамически, имеют тенденцию есть 100% CPU. Я хотел бы ограничить весь процесс, сопоставляющий некоторый критерий (например, имя процесса) с определенным процентом процента процессора.

Конкретная проблема, которую я пытаюсь решить, заключается в том, чтобы использовать функции фолдинга @home work. Лучшее решение, о котором я мог думать, это perl script, который выполняется периодически и использует утилиту cpulimit для ограничения процессов (если вас интересует более подробная информация, проверьте сообщение в блоге). Это работает, но это взломать:/

Любые идеи? Я хотел бы оставить обработку процессов в ОС:)


Еще раз спасибо за предложения, но мы по-прежнему не замечаем:)

Решение "slowdown" - это, по сути, то, что делает утилита "cpulimit". Мне все равно нужно позаботиться о том, какие процессы замедлятся, убейте процесс "slowdown" после завершения рабочего процесса и запуска нового для новых рабочих процессов. Это именно то, что я сделал с Perl script и заданием cron.

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

Может быть, есть способ ограничить все процессы одного пользователя определенным процентом процессора? Я уже создал пользователя для выполнения складных @домашних заданий, надеясь, что я могу ограничить его файлом /etc/security/limits.conf. Но ближайший я мог бы получить общее время процессора для пользователя...

Было бы здорово, если бы иметь что-то, что позволяет вам сказать: Msgstr "Сумма использования CPU% этого пользовательского процесса не может превышать 50%". А затем пусть процессы будут бороться за 50% процессора в отношении их приоритетов...


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

Я бы просто хотел, чтобы процессор не работал на 100% в течение длительного времени...

4b9b3361

Ответ 1

У меня была небольшая проблема с gzip.

Предполагая, что мы хотим уменьшить процессор процесса gzip:

    gzip backup.tar & sleep 2 & cpulimit --limit 10 -e gzip -z

Параметры:

  • Я нашел sleep полезным, поскольку cpulimit иногда не сразу запускал новый gzip процесс
  • --limit 10 пределы gzip Использование ЦП до 10%
  • -z автоматически закрывает cpulimit, когда процесс gzip завершается

Другой вариант - запустить демон cpulimit.

Ответ 2

Я не помню и не думаю, что в планировщике unix есть что-то подобное. Вам нужна небольшая программа, которая управляет другим процессом и делает следующее:

loop
    wait for some time tR
    send SIGSTOP to the process you want to be scheduled
    wait for some time tP
    send SIGCONT to the process.
loopEnd

отношение tR/tP контролирует загрузку процессора.


Вот небольшое доказательство концепции. "Занят" - это программа, которая использует ваше время процессора и которое вы хотите замедлить "slowDown":

> cat > busy.c:
    main() { while (1) {}; }

> cc -o busy busy.c
> busy &
> top

Tasks: 192 total,   3 running, 189 sleeping,   0 stopped,   0 zombie
Cpu(s): 76.9% us,  6.6% sy,  0.0% ni, 11.9% id,  4.5% wa,  0.0% hi,  0.0% si
Mem:   6139696k total,  6114488k used,    25208k free,   115760k buffers
Swap:  9765368k total,  1606096k used,  8159272k free,  2620712k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
26539 cg        25   0  2416  292  220 R 90.0  0.0   3:25.79 busy
...

> cat > slowDown
while true; do
 kill -s SIGSTOP $1
 sleep 0.1
 kill -s SIGCONT $1
 sleep 0.1
done

> chmod +x slowDown
> slowDown 26539 &
> top
Tasks: 200 total,   4 running, 192 sleeping,   4 stopped,   0 zombie
Cpu(s): 48.5% us, 19.4% sy,  0.0% ni, 20.2% id,  9.8% wa,  0.2% hi,  2.0% si
Mem:   6139696k total,  6115376k used,    24320k free,    96676k buffers
Swap:  9765368k total,  1606096k used,  8159272k free,  2639796k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
26539 cg        16   0  2416  292  220 T 49.7  0.0   6:00.98 busy
...

ok, чтобы script нуждался в дополнительной работе (например, чтобы заботиться о том, чтобы быть включенным INTR, и позволить контролируемому процессу продолжать в случае, если он был остановлен в этот момент), но вы поняли суть. Я бы также написал этот маленький script в C или аналогичный и вычислил отношение cpu от аргумента строки comand....

рассматривает

Ответ 3

Я думаю, что в Linux нет решения для ограничения использования процессора, но есть приемлемый способ ограничить любой процесс определенным использованием ЦП: http://ubuntuforums.org/showthread.php?t=992706

В случае удаления информации, здесь снова


  • УСТАНОВИТЬ ПАКЕТЫ

  • Установите пакет cpulimit. Код:

    sudo apt-get install cpulimit

  • Установите пакет gawk. Код:

    sudo apt-get install gawk

  • СОЗДАТЬ ФАЙЛ DAEMON CPULIMIT

Откройте текстовый редактор с привилегиями root и сохраните следующий демоном script текст в новый файл /usr/bin/cpulimit _daemon.sh

код:

#!/bin/bash
# ==============================================================
# CPU limit daemon - set PID max. percentage CPU consumptions
# ==============================================================

# Variables
CPU_LIMIT=20        # Maximum percentage CPU consumption by each PID
DAEMON_INTERVAL=3   # Daemon check interval in seconds
BLACK_PROCESSES_LIST=   # Limit only processes defined in this variable. If variable is empty (default) all violating processes are limited.
WHITE_PROCESSES_LIST=   # Limit all processes except processes defined in this variable. If variable is empty (default) all violating processes are limited.

# Check if one of the variables BLACK_PROCESSES_LIST or WHITE_PROCESSES_LIST is defined.
if [[ -n "$BLACK_PROCESSES_LIST" &&  -n "$WHITE_PROCESSES_LIST" ]] ; then    # If both variables are defined then error is produced.
   echo "At least one or both of the variables BLACK_PROCESSES_LIST or WHITE_PROCESSES_LIST must be empty."
   exit 1
elif [[ -n "$BLACK_PROCESSES_LIST" ]] ; then                                 # If this variable is non-empty then set NEW_PIDS_COMMAND variable to bellow command
   NEW_PIDS_COMMAND="top -b -n1 -c | grep -E '$BLACK_PROCESSES_LIST' | gawk '\$9>CPU_LIMIT {print \$1}' CPU_LIMIT=$CPU_LIMIT"
elif [[ -n "$WHITE_PROCESSES_LIST" ]] ; then                                 # If this variable is non-empty then set NEW_PIDS_COMMAND variable to bellow command
   NEW_PIDS_COMMAND="top -b -n1 -c | gawk 'NR>6' | grep -E -v '$WHITE_PROCESSES_LIST' | gawk '\$9>CPU_LIMIT {print \$1}' CPU_LIMIT=$CPU_LIMIT"
else
   NEW_PIDS_COMMAND="top -b -n1 -c | gawk 'NR>6 && \$9>CPU_LIMIT {print \$1}' CPU_LIMIT=$CPU_LIMIT"
fi

# Search and limit violating PIDs
while sleep $DAEMON_INTERVAL
do
   NEW_PIDS=$(eval "$NEW_PIDS_COMMAND")                                                                    # Violating PIDs
   LIMITED_PIDS=$(ps -eo args | gawk '$1=="cpulimit" {print $3}')                                          # Already limited PIDs
   QUEUE_PIDS=$(comm -23 <(echo "$NEW_PIDS" | sort -u) <(echo "$LIMITED_PIDS" | sort -u) | grep -v '^$')   # PIDs in queue

   for i in $QUEUE_PIDS
   do
       cpulimit -p $i -l $CPU_LIMIT -z &   # Limit new violating processes
   done
done
  1. ИЗМЕНИТЬ ПЕРЕМЕННЫЕ ПОТРЕБНОСТИ В ОБЛАСТИ ОКРУЖАЮЩЕЙ СРЕДЫ

CPU_LIMIT Измените эту переменную выше script, если вы хотите опустить потребление ЦП для каждого процесса на любой другой процент, а затем на 20%. Пожалуйста, прочитайте главу "Если вы используете SMP-компьютер" ниже, если у вас есть SMP-компьютер (более 1 процессор или процессор с более чем 1 ядром).

DAEMON_INTERVAL Измените эту переменную выше script, если вы хотите иметь более/менее регулярную проверку. Интервал находится в секундах, а по умолчанию установлено значение 3 секунды.

BLACK_PROCESS_LIST и WHITE_PROCESSES_LIST Переменная BLACK_PROCESSES_LIST ограничивает только указанные процессы. Если переменная пуста (по умолчанию), все нарушающие процессы ограничены.

Переменная WHITE_PROCESSES_LIST ограничивает все процессы, кроме процессов, определенных в этой переменной. Если переменная пуста (по умолчанию), все нарушающие процессы ограничены.

Одна или обе переменные BLACK_PROCESSES_LIST и WHITE_PROCESSES_LIST должны быть пустыми - это не логично, что обе переменные определены.

Вы можете указать несколько процессов в одной из этих двух переменных, используя символы-разделители "|" (без двойных кавычек). Образец: если вы хотите cpulimit все процессы, кроме переменной mysql, firefox и gedit, установите переменную WHITE_PROCESSES_LIST = "mysql | firefox | gedit"

  1. ПРОЦЕДУРА АВТОМАТИЧЕСКОГО НАЧАЛЬНОГО ДАЕМОНА НА ВРЕМЕНИ ВРЕМЕНИ

  2. Задайте разрешения для пользователя root: Код:

    sudo chmod 755/usr/bin/cpulimit_daemon.sh

  3. Откройте текстовый редактор с правами root и сохраните ниже script в новый файл /etc/init.d/cpulimit

код:

#!/bin/sh
#
# Script to start CPU limit daemon
#
set -e

case "$1" in
start)
if [ $(ps -eo pid,args | gawk '$3=="/usr/bin/cpulimit_daemon.sh"  {print $1}' | wc -l) -eq 0 ]; then
    nohup /usr/bin/cpulimit_daemon.sh >/dev/null 2>&1 &
    ps -eo pid,args | gawk '$3=="/usr/bin/cpulimit_daemon.sh"  {print}' | wc -l | gawk '{ if ($1 == 1) print " * cpulimit daemon started successfully"; else print " * cpulimit daemon can not be started" }'
else
    echo " * cpulimit daemon can't be started, because it is already running"
fi
;;
stop)
CPULIMIT_DAEMON=$(ps -eo pid,args | gawk '$3=="/usr/bin/cpulimit_daemon.sh"  {print $1}' | wc -l)
CPULIMIT_INSTANCE=$(ps -eo pid,args | gawk '$2=="cpulimit" {print $1}' | wc -l)
CPULIMIT_ALL=$((CPULIMIT_DAEMON + CPULIMIT_INSTANCE))
if [ $CPULIMIT_ALL -gt 0 ]; then
    if [ $CPULIMIT_DAEMON -gt 0 ]; then
        ps -eo pid,args | gawk '$3=="/usr/bin/cpulimit_daemon.sh"  {print $1}' | xargs kill -9   # kill cpulimit daemon
    fi

    if [ $CPULIMIT_INSTANCE -gt 0 ]; then
        ps -eo pid,args | gawk '$2=="cpulimit" {print $1}' | xargs kill -9                    # release cpulimited process to normal priority
    fi
    ps -eo pid,args | gawk '$3=="/usr/bin/cpulimit_daemon.sh"  {print}' | wc -l | gawk '{ if ($1 == 1) print " * cpulimit daemon can not be stopped"; else print " * cpulimit daemon stopped successfully" }'
else
    echo " * cpulimit daemon can't be stopped, because it is not running"
fi
;;
restart)
$0 stop
sleep 3
$0 start
;;
status)
ps -eo pid,args | gawk '$3=="/usr/bin/cpulimit_daemon.sh"  {print}' | wc -l | gawk '{ if ($1 == 1) print " * cpulimit daemon is running"; else print " * cpulimit daemon is not running" }'
;;
esac
exit 0
  1. Измените владельца файла на root:

код:

sudo chown root:root /etc/init.d/cpulimit
  1. Изменить разрешения:

код:

sudo chmod 755 /etc/init.d/cpulimit
  1. Добавьте script в каталоги начальной загрузки: Код:

    sudo update-rc.d cpulimit defaults

  2. Перезагрузитесь, чтобы проверить, запускает ли script демона cpulimit во время загрузки: Код:

    sudo reboot

  3. MANUALLY CHECK, STOP, START AND RESTART DAEMON

Примечание. Демон и служба в этом учебнике имеют одинаковое значение.

Примечание. Для пользователей, использующих до Ubuntu 8.10 (например, Ubuntu 8.04 LTS) вместо служебной команды, используйте синтаксис "sudo/etc/init.d/cpulimit status/start/stop/restart" или установите пакет sysvconfig с помощью команды: sudo apt-get install sysvconfig

Проверьте, запущена ли служба cpulimit Проверка команды возвращает: "запущен демон qpulimit", если служба запущена, или "демон cpulimit не запущен", если служба не запущена. Код:

sudo service cpulimit status

Запустить службу cpulimit Вы можете вручную запустить демон cpulimit, который начнет пропускать потребление ЦП. Код:

sudo service cpulimit start

Остановить службу cpulimit Команда Stop останавливает демон cpulimit (поэтому новый процесс не будет ограничен), а также устанавливает для всех существующих ограниченных процессов полный доступ к ЦП, как и до того, как cpulimit не был запущен. Код:

sudo service cpulimit stop

Перезапустить службу cpulimit Если вы измените некоторые параметры переменных в /usr/bin/cpulimit _daemon.sh, например CPU_LIMIT, DAEMON_INTERVAL, BLACK_PROCESSES_LIST или WHITE_PROCESSES_LIST, то после изменения настроек вы должны перезапустить службу. Код:

sudo service cpulimit restart
  1. ПРОВЕРЬТЕ ПОТРЕБЛЕНИЕ ЦЕНА С ИЛИ БЕЗ CPULIMIT DAEMON

Без демона 1. остановить демон cpulimit (sudo service cpulimit stop) 2. выполнять интенсивные задачи ЦП в фоновом режиме 3. выполнить команду: сверху и проверить на столбец% CPU Результат% CPU, вероятно, составляет более 20% для каждого процесса.

С включенным демоном 1. Запустить cpulimit daemon (sudo service cpulimit start) 2. Выполнять те же самые интенсивные задачи ЦП в фоновом режиме 3. выполнить команду: сверху и проверить на столбец% CPU Результат% CPU должен быть максимум 20% для каждого процесса. Примечание. Не забывайте, что при запуске% CPU может составлять более 20%, потому что демона приходится ловить нарушающий процесс с интервалом в 3 секунды (устанавливается по умолчанию script)

  1. ЕСЛИ ИСПОЛЬЗОВАТЬ КОМПЬЮТЕР SMP

Я тестировал этот код на двухъядерном процессоре Intel, который ведет себя как SMP-компьютер. Не забывайте, что верхняя команда, а также cpulimit по умолчанию ведет себя в режиме Irix, где 20% означает 20% одного процессора. Если есть два процессора (или двухъядерный), то общий% CPU может составлять 200%. В верхней команде режим Irix можно отключить с помощью команды я (нажатие + я при запуске верхней команды), а режим Solaris включен, где общий объем ЦП делится на количество процессоров, поэтому% CPU может быть не более 100 % на любом количестве CPU. Пожалуйста, прочитайте больше информации о верхней команде на странице верхнего уровня (найдите команду I). Также читайте, как cpulimit работает на SMP-компьютере на официальной странице cpulimit.

Но как работает cpulimit daemon на SMP-компьютере? Всегда в режиме Irix. Поэтому, если вы хотите потратить 20% мощности процессора на 2-процессорный компьютер, тогда 40% следует использовать для переменной CPU_LIMIT в демоном cpulimit script.

  1. НЕПРЕРЫВНАЯ ПРОГРАММА CPULIMIT DAEMON И CPULIMIT

Если вы хотите избавиться от демона cpulimit, вы можете очистить свою систему, удалив cpulimit daemon и удалив программу cpulimit.

  • Остановить cpulimit daemon Код:

    sudo service cpulimit stop # Стоп cpulimit daemon и все cpulimited процессы

  • Удалить демон из начальной загрузки Код:

    sudo update-rc.d -f cpulimit remove # Удалить символические ссылки

  • Удалить процедуру загрузки Код:

    sudo rm/etc/init.d/cpulimit # Удалить cpulimit boot-up script

  • Удалить демон cpulimit Код:

    sudo rm/usr/bin/cpulimit_daemon.sh # Удалить cpulimit daemon script

  • Удалить программу cpulimit Код:

    sudo apt-get удалить cpulimit

  • Удалить программу gawk Если вам не нужна эта программа для любого другого script, вы можете удалять ее. Код:

    sudo apt-get удалить gawk

  • ПРИМЕЧАНИЕ ОБ АВТОРЕ

Я только что написал демон для cpulimit (bash скриптов выше). Я не автор проекта cpulimit. Если вам нужна дополнительная информация о программе cpulimit, пожалуйста, прочитайте официальную веб-страницу cpulimit: http://cpulimit.sourceforge.net/.

С уважением, Abcuser

Ответ 4

Зачем ограничивать процент CPU, когда вы можете просто настроить приоритет процесса с помощью renice? Использование renice и установка низкого приоритета позволяют процессу по-прежнему использовать 100% процессора, если он доступен, но любой другой процесс с более высоким приоритетом получит процесс, когда он ему понадобится, практически без заметного запаздывания.

Ответ 5

У меня была аналогичная проблема, и другие решения, представленные в потоке, вообще не затрагивают ее. Мое решение работает для меня прямо сейчас, но оно неоптимально, особенно для случаев, когда процесс принадлежит root.
Моим обходным решением на данный момент является попытка очень сильно убедиться, что у меня нет длительных процессов, принадлежащих root (например, если делать резервную копию только как пользователь)

Я только что установил апплет аппаратных датчиков для gnome и настроил аварийные сигналы для высоких и низких температур на CPU, а затем настроил следующие команды для каждого аварийного сигнала:

низкий:

mv /tmp/hogs.txt /tmp/hogs.txt.$$ && cat /tmp/hogs.txt.$$ | xargs -n1 kill -CONT

высокая:

touch /tmp/hogs.txt && ps -eo pcpu,pid | sort -n -r | head -1 | gawk '{ print $2 }' >> /tmp/hogs.txt && xargs -n1 kill -STOP < /tmp/hogs.txt

Хорошей новостью является то, что мой компьютер больше не перегревается и не падает. Недостатком является то, что терминальные процессы отсоединяются от терминала, когда они останавливаются, и не перехватываются, когда они получают сигнал CONT. Другое дело, что если это была интерактивная программа, которая вызвала перегрев (например, какой-то плагин для веб-браузера!), Тогда он замерзнет в середине того, что я делаю, пока он ждет охлаждения процессора. Было бы лучше, если бы процессорное масштабирование позаботилось об этом на глобальном уровне, но проблема в том, что у меня есть только две выбираемые настройки на моем процессоре, и медленная настройка не достаточно медленная, чтобы предотвратить перегрев.

Просто для повторной итерации здесь это не имеет ничего общего с приоритетом процесса, повторной привязкой и, очевидно, не имеет ничего общего с остановкой заданий, которые работают в течение длительного времени. Это связано с тем, что чрезмерное использование процессора не должно оставаться на уровне 100%, поскольку аппаратное обеспечение не может быстро рассеять тепло при работе на полную мощность (в режиме ожидания процессор вырабатывает меньше тепла, чем полностью загруженный CPU).

Некоторые другие очевидные возможности, которые могут помочь:

Уменьшите общую скорость процессора в BIOS

Замените радиатор или повторно примените термический гель, чтобы убедиться, что это помогает

Очистите радиатор некоторым сжатым воздухом

Замените вентилятор процессора

[править] Примечание: больше нет перегрева при 100% CPU, когда я отключу переменную скорость вращения вентилятора в BIOS (asus p5q pro turbo). Когда процессор полностью загружен, каждое ядро ​​заканчивается на уровне 49 celcius.

Ответ 6

Мне также потребовалось ограничить время процессора для определенных процессов. Cpulimit - хороший инструмент, но мне всегда приходилось вручную находить PID и вручную запускать cpulimit, поэтому я хотел что-то более удобное.

Я придумал этот bash script:

#!/bin/bash

function lp
{

ps aux | grep $1 | termsql "select COL1 from tbl" > /tmp/tmpfile

while read line
do
    TEST=`ps aux | grep "cpulimit -p $line" | wc -l`
    [[ $TEST -eq "2" ]] && continue #cpulimit is already running on this process
    cpulimit -p $line -l $2
done < /tmp/tmpfile

}

while true
do
    lp gnome-terminal 5
    lp system-journal 5
    sleep 10
done

Этот пример ограничивает время процессора каждого экземпляра терминала gnome до 5%, а время процессора каждого экземпляра системного журнала - до 5%.

Я использовал другой script я создал named termsql в этом примере, чтобы извлечь PID. Вы можете получить его здесь: https://gitorious.org/termsql/termsql/source/master:

Ответ 7

Я вижу как минимум два варианта:

  • Используйте "ulimit -t" в оболочке, которая создает ваш процесс.
  • Используйте "nice" при создании процесса или "renice" во время выполнения

Ответ 8

PS + GREP + NICE

Ответ 9

Выбросы некоторых вызовов сна должны затормозить процесс с CPU в течение определенного времени. Если вы спите 30 секунд один раз в минуту, ваш процесс не должен усреднять более 50% использования ЦП в течение этой минуты.

Ответ 10

Вы можете ограничить количество процессорного времени с помощью групп. ОС будет обрабатывать управление ресурсами так же, как вы просите в вопросе.

Вот вики с примерами: https://wiki.archlinux.org/index.php/Cgroups

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

Ответ 11

Использование cpu.cares cgroups ничего не делает, что хорошее значение не будет делать. Похоже, вы хотите фактически активировать процессы, которые можно сделать определенно.

Вам нужно будет использовать script или два и/или изменить /etc/cgconfig.conf, чтобы определить нужные параметры.

В частности, вы хотите отредактировать значения cpu.cfs_period_us и cpu.cfs_quota_us. Затем процесс будет разрешен для выполнения микросекунд cpu.cfs_quota_us за микросекунды cpu.cfs_period_us.

Например:

Если cpu.cfs_period_us = 50000 и cpu.cfs_quota_us = 10000, тогда процесс получит 20% от максимального времени процессора, независимо от того, что еще происходит.

В этом скриншоте я дал процесс 2% времени процессора:

2% CPU time

Что касается процесса, то он работает на 100%.

Настройки cpu.shares, с другой стороны, могут и будут использовать 100% времени ожидания процессора.

В этом подобном примере я дал процесс cpu.shares = 100 (1024):

cpu.shares

Как вы можете видеть, процесс все еще потребляет все время ожидания процессора.

Литература:

http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.html http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups.html

Ответ 12

Возможно, поможет nice.

Ответ 13

Это можно сделать, используя setrlimit (2) (в частности, установив параметр RLIMIT_CPU).

Ответ 14

Вы можете уменьшить частоту процессора. Тогда вам не нужно беспокоиться об отдельных процессах. Когда вам нужно больше процессоров, увеличьте частоту резервного копирования.

Ответ 15

Я действительно не понимаю, почему вы хотите ограничить время процессора... вы должны ограничить общую нагрузку на эту машину, а загрузка определяется главным образом операциями ввода-вывода. Пример: если я создаю цикл while (1) {}, он получит общую нагрузку до 1.0, но если этот цикл на каком-то диске записывает переходы нагрузки на 2.0... 4.0. И то, что убивает вашу машину, а не использование ЦП. Использование ЦП может быть легко обработано с помощью nice/renice.

В любом случае вы можете сделать script, который выполняет "kill -SIGSTOP PID" для определенного PID, когда загрузка становится слишком высокой, и убить -SIGCONT, когда все вернется к нормальному состоянию... PID может быть определяется с помощью команды "px aux", потому что я вижу, что она отображает использование ЦП, и вы должны иметь возможность сортировать список, используя этот столбец. Я думаю, что все это можно было бы сделать в bash...