процессы 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
Это работает, но как мне ограничить несколько процессов? На данный момент это либо один, либо все ... Спасибо
Если требуется запустить программу автоматически на запуске, можно добавить его к приложениям запуска. См. следующий ответ для получения дополнительной информации.
, Как я запускаю приложения автоматически на входе в систему?
Это - то, что я сделал для решения моего вопроса:
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 /
Я понимаю, что этот поток немного стар; однако, существует очень более легкий способ выполнить Вашу установленную цель. Используя процессы и пределы Вы, кажется, требуете, можно просто создать сценарий оболочки, такой как:
#!/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 будет наблюдать за ним для становления активным снова, и повторения процесса.