আমি কি কোনও প্রক্রিয়া দ্বারা ব্যবহৃত% সিপিইউ ম্যানুয়ালি সীমাবদ্ধ করতে পারি?


52

আমি নির্দিষ্ট প্রসেসের জন্য উত্সর্গীকৃত সিপিইউ সময়ের পরিমাণ সীমাবদ্ধ করতে চাই (যেমন ফায়ারফক্স, সাফারি, ...)।

আমি বুঝতে পারি না কেন এই জাতীয় প্রোগ্রামগুলি ব্যবহার না করা সত্ত্বেও (কোনও কিছুই লোড হচ্ছে না, কোনও অ্যানিমেশন নেই, পটভূমিতে চলছে, ...) কেন এত উত্সাহিত। কেন একটি ব্রাউজারে আমার সিপিইউ 50% বা তার বেশি খেতে হবে? আমি কি এটি 10% সীমাবদ্ধ করতে পারি?


এটি সরাসরি আপনার প্রশ্নের উত্তর নয়, তবে সাফারি এবং ফায়ারফক্স সাধারণত সিপিইউ ক্ষুধার্ত হয় না। তারা কী করছে তা আপনি দেখতে চাইতে পারেন। সম্ভবত কোনও এক্সটেনশন / প্লাগ-ইন অতিরিক্ত সংস্থান ব্যবহারের জন্য দায়ী হতে পারে এবং আপনি এটিকে অক্ষম করতে সক্ষম হতে পারেন (বা আপনি যদি এটি আর ব্যবহার না করেন তবে এটি মুছে ফেলুন
Tim

উত্তর:


7

এটি আপনি যা চেয়েছিলেন ঠিক তা নয়, তবে গুগল ড্রাইভ এবং ক্রোমের ক্ষেত্রে এটি আমার পক্ষে কৌশলটি কী করেছিল:

গুগল ড্রাইভ ("ব্যাকআপ এবং সিঙ্ক")

  • ডি অগ্রাধিকার:

    for f in $(pgrep 'Backup and Sync'; pgrep 'FinderSyncAPIExtension'); do renice +20 -p $f; done
    
  • স্বাভাবিক অবস্থায় ফিরে যান:

    for f in $(pgrep 'Backup and Sync'; pgrep 'FinderSyncAPIExtension'); do renice 0 -p $f; done
    

ক্রৌমিয়াম

  • সমস্ত বর্তমান প্রক্রিয়া ডি-অগ্রাধিকার:

    for f in $(pgrep 'Chrome'); do renice +20 -p $f; done
    
  • সমস্ত বর্তমান প্রক্রিয়াগুলিতে ফিরে আসুন:

    for f in $(pgrep 'Chrome'); do renice 0 -p $f; done
    

44

cputhrottleআপনার প্রয়োজনীয় সরঞ্জাম। আপনি হোমব্রু দিয়ে এটি ইনস্টল করতে পারেন ।

আপনি নীচে বাশ স্ক্রিপ্টটি চালিয়ে নামের মাধ্যমে বিভিন্ন প্রক্রিয়া পর্যবেক্ষণ করতে পারেন। আমি কীভাবে এটি লগইন আইটেমে রূপান্তর করতে পারি তা সম্পর্কে নিশ্চিত নই যেহেতু cputhrottleসুপারসারের অনুমতি প্রয়োজন। একটি অটোমেটরের ওয়ার্কফ্লোতে এটি যাইহোক, স্ক্রিপ্ট হিসাবে চালান:

# Get the Process/App names from Activity Monitor and put them here
apps=("AppOne" "AppTwo" "AppThree")
# Set the respective limits here
limits={30 40 50)

while true; do
  for app in ${apps}; do
    for limit in ${limits}; do
      for pid in $(pgrep ${app}); do
        sudo /path/to/cputhrottle ${pid} ${limit}
      done
    done
  done
done

[সম্পাদিত]

আমি এই স্ক্রিপ্টের জন্য একটি আলাদা সংস্করণ (একটি bashস্ক্রিপ্ট) যুক্ত করেছি, যা একাধিক অ্যাপ্লিকেশনগুলির জন্য সিপিইউ সীমাবদ্ধ করার সন্ধানকারী লোকদের পক্ষে কার্যকর হতে পারে।

এই নতুন স্ক্রিপ্টটি আপনাকে অ্যাপ্লিকেশন নাম এবং এর জন্য সিপিইউ সীমা সহ একটি তালিকা নির্দিষ্ট করার অনুমতি দেয়।

মূল পার্থক্য হ'ল আপনি প্রতি অ্যাপ্লিকেশনতে সিপিইউ সীমা যুক্ত করতে পারেন এবং এটি প্রতি প্রয়োগে একবারে চলবে। আমি সমস্ত cputhrottleপ্রক্রিয়া হত্যার বিকল্পও যুক্ত করেছি ।

স্ক্রিপ্ট অনুমান উভয় যে cputhrottleএবং pidofএটা চালানোর আগে ইনস্টল করা নেই।

#!/bin/bash

if [[ $EUID > 0 ]]; then
  echo "Please run this script as root/sudo"
  exit 1
fi

# Pass --kill as argument to kill all running cputhrottles
if [ $1 = "--kill" ]; then  
  echo "Looking for running cputhrottles..."
  pids=`pidof cputhrottle`
  for pid in ${pids}; do
    echo "> Killing PID ${pid}"
    sudo kill ${pid}
  done
  echo "Done!"
  exit 0
fi

declare -a applications

# Syntax='application;max-cpu'
applications[0]='Chrome;40'
applications[1]='Firefox;50'
applications[2]='pycharm;40'
applications[3]='webstorm;40'
applications[4]='Safari;35'

for i in "${applications[@]}"; do
  app=(${i//;/ })
  app_name=${app[0]}
  cpu_limit=${app[1]}

  printf "\nLooking for ${app_name}...\n"
  pids=`pidof ${app}`
  for pid in ${pids}; do
    echo "> PID=${pid}, CPU=${cpu_limit}"
    sudo cputhrottle ${pid} ${cpu_limit} &
  done
done

printf "\nDone!\n"
echo "Run this script passing '--kill' as argument to remove all cputhrottles."

উৎস:


3
অন্য মন্তব্যে উল্লেখ করা হয়েছে যে , cputhrottleফোরামুলা 17 ফেব্রুয়ারী, 2019 এ হোমব্রু থেকে সরানো হয়েছিল কারণ এটি আর কাজ করে না । ইয়োসেমাইট MacOS শেষ সংস্করণটিকে সমর্থন ছিল cputhrottle
কাসিমির

@ ক্যাসিমির এবং এখন, কী করব?
পিটার সামোখিন

@ পিটারসামোখিন দুঃখিত, আমি এর বিকল্প সম্পর্কে জানি না। তবে আমিও সম্প্রতি অনুসন্ধান করি নি।
ক্যাসিমির

15

আপনি সত্যিই করতে পারেন! এখানে সিপিইউথ্রোটল রয়েছে , যা একটি পিআইডি নির্দিষ্ট করে সীমাবদ্ধ করতে দেয়।

দ্রষ্টব্য, তারা এ কারণেই অনেক কিছু ব্যবহার করার চেষ্টা করছেন এটি একটি দরকারী সরঞ্জাম তবে এটি আপনার পক্ষে দিনে দিনে এটি আরও ভাল বা খারাপ করে তুলবে কিনা তা আপনার আবিষ্কার হতে পারে।


1
মজাদার. তবে এই ইউটিলিটিটির সাথে আমাকে একটি প্রোগ্রাম চালু করতে হবে, এর পিআইডি (গুলি) সন্ধান করতে হবে এবং ম্যানুয়ালি সিপুথ্রোলটি ব্যবহার করতে হবে। প্রতিবারই এটি চালু করি। এমন কিছু আছে যা আমাকে সিস্টেমটি বলতে দেয়: "আজ থেকে সর্বদা সর্বোচ্চ 25% সিপিইউ দিয়ে এই প্রোগ্রামটি চালান"?
পিট্রো

আমি যতটা জানি না, আমি কেবল সিপিইউথ্রোটল জুড়ে এসেছি।
নিকোলাস স্মিথ

404 ফাইল পাওয়া যায় নি
আন্দ্রে লেভি

11

যদিও ওপি-র প্রশ্নের সরাসরি উত্তর না হলেও, আপনি যদি কোনও নির্দিষ্ট প্রক্রিয়া নিয়ে আপনার সিপিইউ সময় বেশি সময় গ্রহণ করে এবং আপনার কম্পিউটারকে অকেজো করে তুলছেন এবং যদি এই প্রক্রিয়াটি শেষ হতে কত সময় নেয় আপনার কোনও আপত্তি নেই don't যে টাস্কটিতে এটি কাজ করছে, আপনি reniceসেই প্রক্রিয়াটির অগ্রাধিকার পরিবর্তন করতে ব্যবহার করতে পারেন , এটি সুন্দরভাবে আচরণ করে (তাই নাম)।

প্রথমত, আপনাকে সেই প্রক্রিয়াটির পিআইডি সন্ধান করতে হবে যা সিপিইউ সংস্থান ব্যবহার করে। আপনি এটি ক্রিয়াকলাপ মনিটরে, বা টার্মিনাল.এপ psকমান্ড দিয়ে করতে পারেন - যেমন- সাফারি ব্রাউজারের পিআইডি সন্ধান করতে, টাইপ করুন:

MacBook:~😈  ps -ef | grep Safari
  501 17452   263   0 11:36pm ??         4:15.60 /Applications/Safari.app/Contents/MacOS/Safari

উপরের দ্বিতীয় লাইনটি আউটপুট এবং পিআইডি এই বিশেষ ক্ষেত্রে 17452।

তারপরে, পরবর্তী কাজটি প্রক্রিয়াটির অগ্রাধিকার পরিবর্তন করা (আসুন আমরা এটি সাফারি বলি যে আমরা সুন্দরভাবে আচরণ করতে চাই)। এটি করতে, টার্মিনাল.এপ টাইপ করুন:

MacBook:~😈  renice -n 10 -p 17452

-nবিকল্প বর্তমান মান (ডিফল্টরূপে 0) 10 যোগ করে চমৎকার স্তর পরিবর্তন। মানগুলির পরিসীমা -20 থেকে 20, সর্বনিম্ন মান অর্থ সর্বোচ্চ অগ্রাধিকার সহ। সাধারণ ব্যবহারকারী হিসাবে আপনি 0 থেকে 20 টি মান ব্যবহার করতে পারেন aণাত্মক মান নির্ধারণ করতে আপনার রুট সুবিধাগুলি থাকা দরকার (যেমন sudoকমান্ড ব্যবহার করুন )। সম্পর্কে আরও পড়ুন niceএবং reniceটাইপ করে man niceএবং man reniceTerminal.app হবে।

niceএবং reniceপ্রতি সেপি প্রদত্ত অ্যাপ্লিকেশনটিতে যে পরিমাণ সিপিইউ উপলব্ধ তা সীমাবদ্ধ রাখবেন না, তবে তারা শিডিয়ুলিং অগ্রাধিকার পরিবর্তন করতে পারবেন না, বা অন্য কথায় সিপিইউয়ের সময় কতটা প্রসেস পাবেন। এটি আপনার সিস্টেমে সিপিইউ লোডের সাথে সম্পর্কিত, সুতরাং যদি সিস্টেমটি ব্যবহার করা হয় তবে আপনি সম্ভবত কোনও পার্থক্য দেখতে পাবেন না।


কোনও প্রক্রিয়ার বর্তমান অগ্রাধিকার দেখার কোনও উপায় আছে কি?
theonlygusti

কোনও প্রক্রিয়াটির বর্তমান দুর্দান্ত মান দেখতে শীর্ষ বা হ্যাপ ব্যবহার করুন। (ব্রিট ইনস্টল হটপ), (সুডো অ্যাপ্লিকেশন হটপ ইনস্টল)। আপনি মান সহ কলামগুলির মধ্যে একটি দেখতে পাবেন।
টিমানোক

6

এগুলি করার জন্য একটি সহজ ওয়ানলাইনার রয়েছে:

ps axu | grep Chromium | grep -v grep | awk '{print $2}' | sudo xargs -n 1 -I'{}' sh -c 'cputhrottle {} 10 &'

10 এর পরিবর্তে আপনার অ্যাপের নাম ক্রোমিয়ামের পরিবর্তে এবং পছন্দসই শতাংশ লিখুন এবং আপনি যেতে ভাল!


এই, ভাল কাজ যদিও এটা কমে যাবে: pgrep Dropbox | sudo xargs -n 1 -I'{}' sh -c 'cputhrottle {} 10 &'। তবে ম্যাকওএস pgrepইনস্টলড নিয়ে আসে কিনা তা আমি নিশ্চিত নই ।
বিগসুইটার

5

এটি পূর্ববর্তী উত্তরের ভিত্তিতে তৈরি হয়েছে, তবে প্রক্রিয়াটি থ্রটল করা হচ্ছে একটি চালিত অবস্থায় রেখে দেওয়া হয়েছে তা নিশ্চিত করার জন্য সিটিটিএল + সি এর জন্য ফাঁদ যুক্ত করা set -eএবং প্রসেসটি নিজে থেকে প্রস্থান করলে এই স্ক্রিপ্টটি পরিষ্কারভাবে প্রস্থান করবে:

trap ctrl_c_fn INT

function ctrl_c_fn() {
    echo "caught CTRL-C, exiting"
    kill -SIGCONT $pid
    exit
}

echo "enter process id"
read pid
echo "press Ctrl-C to exit"

set -e

while true; do
    kill -SIGSTOP $pid
    sleep 0.009
    kill -SIGCONT $pid
    sleep 0.001
done

3

নিকোলাস স্মিথ যে লিঙ্কটি পোস্ট করেছে সেটি আর কাজ করে না। সুতরাং আমি অন্য একটি অ্যাপ্লিকেশন পেয়েছি যা সেই লোকদের জন্য কৌশল করে যা আবার অনুসন্ধান করছে। অ্যাপ্লিকেশন কল করে অ্যাপপ্লিসাকে।

http://www.macupdate.com/app/mac/49836/apppolice


2
অ্যাপপোলিসের মতো, এখানে অ্যাপটেমার রয়েছে ( stclairsw.com/appTamer )। সাবধানতার একটি শব্দ: আমি এই মন্তব্যটি লিখছি, অ্যাপটেমার এখনও ওএসএক্স সিয়েরা সামঞ্জস্যপূর্ণ হতে পারে।
জন মার্ক মিশেল

ওহ আমার, কি সন্ধান। সবেমাত্র অ্যাপটেমার ইনস্টল করা হয়েছে। রিপোর্ট করতে পেরে দুর্দান্তভাবে দুর্দান্ত কাজ করে। আমি Alt-ট্যাবটি আউট করার সময় নতুন স্টারক্রাফ্টটিকে পুনরায় লাইনে রাখতে ব্যবহার করি। ওহ এবং আমি উল্লেখ করতে ভুলে গেছি, আমি ম্যাকস সিয়েরা 10.12.6 চালাচ্ছি। পরামর্শের জন্য ধন্যবাদ!
অশ্বারোহী

অ্যাপ্লিকেশন বন্ধ করা হয়েছে।
LаngLаngС

কিন্তু এখনও বেশ সূক্ষ্ম কাজ করে।
ফিল পিরোজকভ

3

এটি আমার চূড়ান্ত স্ক্রিপ্ট, সিপুথ্রোলাল কমান্ডটি পরিষ্কার রাখুন কেবলমাত্র যদি একটি বিদ্যমান থাকে তবে এটি কার্যকর করুন

#!/bin/bash

###
# setup cputhrottle if doesn't exists
###
set_service_cpu_limit(){
    service_pid=$(pgrep $1)
    limit=$2
    if [[ ! -z $service_pid  ]]; then
        service_cpu=$(ps aux | grep "sudo cputhrottle $service_pid $limit" | grep -v grep | wc -l)
        if [[ ! $service_cpu -gt 0 ]]; then
            sudo cputhrottle $service_pid $limit &
        fi
    fi
}

###
# main loop
###
while true; do
    set_service_cpu_limit bzfilelist 2
    set_service_cpu_limit bztransmit 2
    sleep 0.5
done

3

দিমিত্রি লিখিত স্ক্রিপ্টটি (ম্যাকোজে) ভাল কাজ করে তবে অ্যাপ্লিকেশন বন্ধ হয়ে যাওয়ার পরে এটি ত্রুটিগুলি নিয়ে চলতে থাকে keeps আমি এটি শেষ করতে এটি পরিবর্তন করেছি (পিআইডি সম্পর্কে একটি ত্রুটি বার্তা পাওয়া যায় নি):

echo "enter process id"
read pid
echo "press Ctrl-C to exit"

while kill -SIGSTOP $pid; do
    sleep 0.009
    kill -SIGCONT $pid
    sleep 0.001
done

উত্তরটি উন্নত করার জন্য এটি সম্ভবত দিমিত্রির মূল উত্তরটিতে সম্পাদিত হওয়া উচিত এবং একই তথ্যের সাথে পৃথক উত্তর নয় (মূলত)।
fsb

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.