Есть ли способ автоматического запуска CPULIMIT, чтобы уменьшить чрезмерное потребление ресурсов процессора

процессы tracker-miner-f, tracker-store, tracker-extract и dropbox убивают мой процессор, они заставляют его работать более чем на 100%, перегревая мой ноутбук.

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

Я следовал этому , но он не работает, демон запускается, но я думаю, что при создании сценария произошла ошибка, и он фактически не ограничивает какие-либо процессы.

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

Ubuntu 14.04

Скрипт, который я нашел ниже , только частично работает и не определяет PID правильно.

Если кто-то знает меня лучше, не могли бы вы проверить строку:

NEW_PIDS_COMMAND="top -b -n1 -c | grep -E '$BLACK_PROCESSES_LIST' | gawk '\$9>CPU_LIMIT {print \$1}' CPU_LIMIT=$CPU_LIMIT"

Это правильно?

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

# Variables
CPU_LIMIT=40        # Maximum percentage CPU consumption by each PID
DAEMON_INTERVAL=3   # Daemon check interval in seconds
BLACK_PROCESSES_LIST="dropbox" # 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.

#PID Variables
NEW_PIDS_COMMAND=       
NEW_PIDS=
LIMITED_PIDS=
QUEUE_PIDS=

# Check if both of the variables BLACK_PROCESSES_LIST or WHITE_PROCESSES_LIST are 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

# If Black_Processes_List is defined
elif [[ -n "$BLACK_PROCESSES_LIST" ]]
then  
# Set NEW_PIDS_COMMAND variable to below command
NEW_PIDS_COMMAND="top -b -n1 -c | grep -E '$BLACK_PROCESSES_LIST' | gawk '\$9>CPU_LIMIT {print \$1}' CPU_LIMIT=$CPU_LIMIT"

# If White_Processes_List is defined
elif [[ -n "$WHITE_PROCESSES_LIST" ]]   
then                                 
# Set NEW_PIDS_COMMAND variable to below 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 '^ 

Я только хочу внести в черный список определенные приложения поэтому я изменил это:

#!/bin/bash
# CPU limit of a process
#
# Variables
CPU_LIMIT=50        # Maximum percentage CPU consumption by each PID 
                    # NOTE: If your machine has one processor you can limit the percentage from 0% to 100%, which means that if you set for example 50%, your process cannot use more than 500 ms of cpu time for each second. But if your machine has four processors, percentage may vary from 0% to 400%, so setting the limit to 200% means to use no more than half of the available power.
DAEMON_INTERVAL=3   # Daemon check interval in seconds
PROCESS_1="" # Processes to be limited. If variable is empty (default) all violating processes are limited.


if [ -n "$PROCESS_1" ] # Process_1 entered
then  

    PID_1="pidof $PROCESS_1" # Set NEW_PIDS_COMMAND variable to below command

echo "Limit Process of: $PROCESS_1"

    cpulimit --pid "$PID_1" -b -l "$CPU_LIMIT" # Run cpulimit with selected paramters

else

   echo "All Processes limited to: $CPU_LIMIT"

   PID_1="top -b -n1 -c | gawk 'NR>6 && \$9>CPU_LIMIT {print \$1}' CPU_LIMIT=$CPU_LIMIT" # Set global CPU limit
fi


# Search and limit violating PIDs
while sleep $DAEMON_INTERVAL
do
   NEW_PIDS=$(eval "$PID_1")                                                                    # 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

Это работает, но как мне ограничить несколько процессов? На данный момент это либо один, либо все ... Спасибо

) # PIDs in queue for i in $QUEUE_PIDS do cpulimit -p $i -l $CPU_LIMIT -z & # Limit new violating processes done done

Я только хочу внести в черный список определенные приложения поэтому я изменил это:

#!/bin/bash
# CPU limit of a process
#
# Variables
CPU_LIMIT=50        # Maximum percentage CPU consumption by each PID 
                    # NOTE: If your machine has one processor you can limit the percentage from 0% to 100%, which means that if you set for example 50%, your process cannot use more than 500 ms of cpu time for each second. But if your machine has four processors, percentage may vary from 0% to 400%, so setting the limit to 200% means to use no more than half of the available power.
DAEMON_INTERVAL=3   # Daemon check interval in seconds
PROCESS_1="" # Processes to be limited. If variable is empty (default) all violating processes are limited.


if [ -n "$PROCESS_1" ] # Process_1 entered
then  

    PID_1="pidof $PROCESS_1" # Set NEW_PIDS_COMMAND variable to below command

echo "Limit Process of: $PROCESS_1"

    cpulimit --pid "$PID_1" -b -l "$CPU_LIMIT" # Run cpulimit with selected paramters

else

   echo "All Processes limited to: $CPU_LIMIT"

   PID_1="top -b -n1 -c | gawk 'NR>6 && \$9>CPU_LIMIT {print \$1}' CPU_LIMIT=$CPU_LIMIT" # Set global CPU limit
fi


# Search and limit violating PIDs
while sleep $DAEMON_INTERVAL
do
   NEW_PIDS=$(eval "$PID_1")                                                                    # 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

Это работает, но как мне ограничить несколько процессов? На данный момент это либо один, либо все ... Спасибо

3
задан 11 June 2015 в 01:16

3 ответа

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

, Как я запускаю приложения автоматически на входе в систему?

0
ответ дан 11 June 2015 в 01:16

Это - то, что я сделал для решения моего вопроса:

sudo apt-get install cpulimit ; sudo apt-get install gawk ; sudo apt-get install top

Тогда я изменил сценарий для удовлетворения:

    #!/bin/bash
    # CPU limit of a process
    #
    # Variables
    # NOTE: If your machine has one processor you can limit the percentage from 0% to 100%, which means that if you set for example 50%, your process cannot use more than 500 ms of cpu time for each second. But if your machine has four processors, percentage may vary from 0% to 400%, so setting the limit to 200% means to use no more than half of the available power.

    CPU_LIMIT_1=50    # Maximum percentage CPU consumption by PROCESS_1
    CPU_LIMIT_2=55    # Maximum percentage CPU consumption by PROCESS_2
    CPU_LIMIT_3=60    # Maximum percentage CPU consumption by PROCESS_3
    CPU_LIMIT_4=40    # Maximum percentage CPU consumption by PROCESS_4
    PROCESS_1="dropbox"  # Process 1 to be limited. If variable 1 is empty (default) all violating processes are limited.
    PROCESS_2="tracker-miner-f"   # Process 2 to be limited
    PROCESS_3="tracker-store"   # Process 3 to be limited
    PROCESS_4="tracker-extract"   # Process 4 to be limited
    PROCESS_5="chrome"   # Process 5 to be limited

    gnome-terminal -x top

    if [ -n "$PROCESS_1" ] || [ -n "$PROCESS_2" ] || [ -n "$PROCESS_3" ] || [ -n "$PROCESS_4" ] || [ -n "$PROCESS_5" ] ; then
      while true;
        do  
        echo "Limit the Process of: $PROCESS_1 to $CPU_LIMIT_1"
            cpulimit --exe "$PROCESS_1" -b -l "$CPU_LIMIT_1"
            sleep 3 
        echo "Limit the Process of: $PROCESS_2 to $CPU_LIMIT_1"
            cpulimit --exe "$PROCESS_2" -b -l "$CPU_LIMIT_1"
            sleep 3   
        echo "Limit the Process of: $PROCESS_3 to $CPU_LIMIT_1"
            cpulimit --exe "$PROCESS_3" -b -l "$CPU_LIMIT_1"
            sleep 3  
        echo "Limit the Process of: $PROCESS_4 to $CPU_LIMIT_1"
            cpulimit --exe "$PROCESS_4" -b -l "$CPU_LIMIT_1"
            sleep 3 
        echo "Limit the Process of: $PROCESS_5 to $CPU_LIMIT_3"
            cpulimit --exe "$PROCESS_5" -b -l "$CPU_LIMIT_4"
            sleep 60
     done       

    else
       echo "Process fields empty"
    fi
  exit 1

Созданный папка в моем домашнем меню звонила, это запускает и переместило сценарий туда.

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

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

Спасибо

Также это для ограничения отдельного процесса или глобальный:

#!/bin/bash
# CPU limit of a process of one application or set global limit
#
# 
DAEMON_INTERVAL=3   # Daemon check interval in seconds

 gnome-terminal -x top

read -p "Do you want to set global CPU limitations y or n : " y

if test "$y" = "y" ; then

    read -p "Enter Global CPU limit :" CPU_LIMIT_ALL 
    echo  

Сохраняют, поскольку .sh тогда делает исполняемый файл и работает учебное руководство

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

sudo/path/to/script /

\nAll Processes shall be limited to:' $CPU_LIMIT_ALL while true do PID_1="top -b -n1 -c | awk 'NR>6 && \$9>CPU_LIMIT_ALL {print \$1}' CPU_LIMIT_ALL=$CPU_LIMIT_ALL" # Set global CPU limit reads TOP list NEW_PIDS=$(eval "$PID_1") # 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 '^

Сохраняют, поскольку .sh тогда делает исполняемый файл и работает учебное руководство

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

sudo/path/to/script /

) # PIDs in queue for i in $QUEUE_PIDS do cpulimit -p "$i" -l "$CPU_LIMIT_ALL" -z & # Limit new violating processe done done elif test "$y" = "n" ; then read -p "Enter process to be restricted or press enter :" r read -p "Enter value of CPU limit or press enter :" l while true do echo

Сохраняют, поскольку .sh тогда делает исполняемый файл и работает учебное руководство

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

sudo/path/to/script /

\nProcess Entry Found' echo

Сохраняют, поскольку .sh тогда делает исполняемый файл и работает учебное руководство

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

sudo/path/to/script /

CPU Entry Found\n' echo "Limit the Process of: $r to $l" cpulimit --exe "$r" -b -l "$l" -z & # Set CPU limit for process sleep 60 done else echo "No input found" exit 1 fi

Сохраняют, поскольку .sh тогда делает исполняемый файл и работает учебное руководство

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

sudo/path/to/script /

0
ответ дан 11 June 2015 в 01:16

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

#!/bin/bash

#Set this variable to the number of cores in your processor.  This example is for an 8-core CPU.  The reason that the number of cores is important is that you need to take it into consideration when setting cpulimit's -l option.  This is explained on the cpulimit project page (see http://cpulimit.sourceforge.net/):  "If your machine has one processor you can limit the percentage from 0% to 100%, which means that if you set for example 50%, your process cannot use more than 500 ms of cpu time for each second. But if your machine has four processors, percentage may vary from 0% to 400%, so setting the limit to 200% means to use no more than half of the available power."

NUM_CPU_CORES=8 #Change this number to reflect the number of cores in your processor.

cpulimit -e "dropbox" -l $((50 * $NUM_CPU_CORES))& #Limit "dropbox" process to 50% CPU usage.
cpulimit -e "tracker-miner-f" -l $((50 * $NUM_CPU_CORES))& #Limit "tracker-miner-f" process to 50% CPU usage.
cpulimit -e "tracker-store" -l $((50 * $NUM_CPU_CORES))& #Limit "tracker-store" process to 50% CPU usage.
cpulimit -e "tracker-extract" -l $((50 * $NUM_CPU_CORES))& #Limit "tracker-extract" process to 50% CPU usage.
cpulimit -e "chrome" -l $((40 * $NUM_CPU_CORES))& #Limit "chrome" process to 40% CPU usage.

Делают вышеупомянутый исполняемый файл сценария и устанавливают его, чтобы автоматически работать, как Вы сделали со своими другими сценариями (избавьтесь от других сценариев). В действительности cpulimit будет оставаться в фоновом режиме и наблюдать за указанными процессами и, как только каждый запускается, , cpulimit возьмет на себя управление и произведет его указанный предел. Когда указанный процесс умрет или будет уничтожен, , cpulimit будет наблюдать за ним для становления активным снова, и повторения процесса.

3
ответ дан 11 June 2015 в 11:16
  • 1
    благодарит ответ, я думаю, что проблема происходит из-за динамического раздела в окнах – vishakh km 7 September 2016 в 21:41

Другие вопросы по тегам:

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