有没有办法自动启动CPULIMIT以减少过多的CPU消耗

tracker-miner-f,tracker-store,tracker-extract和dropbox进程正在杀死我的CPU,它们使其运行超过100%,使我的笔记本电脑过热。

我已经安装了CPULIMIT,它可以很好地限制这些过程,但是,我不能让它自动启动。

我已经遵循了这个但它不起作用,守护进程启动但我认为脚本的创建存在错误,并且它实际上并不限制任何进程。

有没有办法减少CPU使用而不必每次我开始一个新会话时通过终端手动执行它?

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 '^$') # 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 $'\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 '^$') # 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 $'\nProcess Entry Found' echo $'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然后生成可执行文件并运行教程

如果需要,您还可以以root身份运行脚本以限制所有系统进程。

sudo / path / to / script /

我意识到这个线程有点老了; 但是,有一种容易实现既定目标的方法。 使用您似乎希望的过程和限制,您可以简单地创建一个shell脚本,例如:

 #!/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将监视它再次变为活动状态,并重复该过程。