আমি কীভাবে একটি লিনাক্স সার্ভারে উচ্চ সিপিইউ লোড উত্পাদন করতে পারি?


161

আমি বর্তমানে ক্যাকটি ইনস্টলেশন ডিবাগ করার প্রক্রিয়াধীন এবং আমার সিপিইউ ব্যবহারের গ্রাফগুলি ডিবাগ করার জন্য সিপিইউ লোড তৈরি করতে চাই।

আমি সহজভাবে চালানোর চেষ্টা করেছি cat /dev/zero > /dev/null, যা দুর্দান্ত কাজ করে তবে কেবল 1 টির ব্যবহার করে:

এখানে চিত্র বর্ণনা লিখুন

লোডের অধীনে সিস্টেম রিসোর্সগুলি টেস্টিং / ম্যাক্সিং-আউট করার আরও ভাল কোনও পদ্ধতি আছে কি?

সম্পর্কিত: আমি কীভাবে উইন্ডোজে উচ্চ সিপিইউ লোড উত্পাদন করতে পারি?


1
catএকসাথে একাধিক উদাহরণ চালানো কি সম্ভব ?
নেট কোপ্পেনহেভার

@ নাটকপেনহেভার: হ্যাঁ, এগুলি সেশনে গুটিয়ে ফেলা সম্ভব বলে মনে হচ্ছে screen। তবে সম্ভব হলে আমি আরও পরিশীলিত সমাধানটি পছন্দ করব prefer
ডের হচস্টাপলার

1
হেহ, আমি সর্বদা ব্যবহার cat /dev/random > /dev/null। অনুমানও /dev/zeroকাজ করে। :-)
oKtosiTe

8
@OKtosiTe বিড়াল / দেব / এলোমেলোভাবে / ডিভ / এলোমেলোভাবে এন্ট্রপিকে হ্রাস করার পার্শ্ব প্রতিক্রিয়া রয়েছে। আপনার এন্ট্রপি সংরক্ষণের প্রয়োজন এমন অনেক সময় আছে, সিপিইউ হগতে যাওয়ার সময় আমার কাছে এটি হবে না।
ধনী হোমোলকা

4
@OKtosiTe ধনী হোমোলকা যা বলেছেন তা সঠিক, তবে এটি করা খারাপ কাজ নয়, এটি অকেজোও কারণ এটি প্রায় অবিলম্বে অবরুদ্ধ হবে এবং সিপিইউ খাওয়া বন্ধ করবে।
লুক

উত্তর:


187

stress এটি প্রায় উইন্ডোজের সমতুল্য চেষ্টা করুন consume.exe:

oliver$ ./stress --cpu 3
stress: info: [18472] dispatching hogs: 3 cpu, 0 io, 0 vm, 0 hdd

22
উবুন্টু তে আপনার সাথে ইনস্টল করতে পারেনsudo apt-get install stress
বেন

14
ডেবিয়ান হুইজি উপর।
এ্যাপ করুন

10
sudo yum install stress
ফেডোরায়

16
আর্ট:sudo pacman -S stress
দাস_জ

9
brew install stressওএস এক্স
খ্রিস্টান লং

94

কোনও অতিরিক্ত প্যাকেজ ইনস্টল করার দরকার নেই, আপনার ভাল পুরানো শেল এটি একা করতে সক্ষম।

এই এক-লাইনের আপনার চার কোর লোড করা হবে 1 100% হয়:

for i in 1 2 3 4; do while : ; do : ; done & done

এটি কীভাবে কাজ করে তা বেশ সহজ, এটি চারটি অন্তহীন লুপগুলি শুরু করে। তাদের প্রত্যেকে নাল নির্দেশ ( :) টি পুনরাবৃত্তি করছে । প্রতিটি লুপ 100% এ সিপিইউ কোর লোড করতে সক্ষম।

আপনি ব্যবহার করেন তাহলে bash, ksh93এবং অন্যান্য শাঁস রেঞ্জ সমর্থন (অর্থাত না dashবা তার বেশী বয়সের ksh), আপনি এই অ পোর্টেবল সিনট্যাক্স ব্যবহার করতে পারেন:

for i in {1..4}; do ...

4আপনি যদি আলাদা করতে চান তবে যে পরিমাণ সিপিইউ লোড করতে চান তা প্রতিস্থাপন করুন 4

এই ধরণের কোনও লুপ চালু করার সময় আপনার ইতিমধ্যে কোনও পটভূমি কাজ চলছে না তা ধরে নিই, আপনি এই আদেশটি দিয়ে লোড উত্পাদন বন্ধ করতে পারবেন:

for i in 1 2 3 4; do kill %$i; done

@ Underscore_d এর মন্তব্য উত্তর, এখানে একটি বর্ধিত সংস্করণ যা অনেক লোড বাঁধন প্রক্রিয়া সহজ এবং যে একটি সময়সীমার (। ডিফল্ট 60 সেকেন্ড) একটি নির্দিষ্ট অনুমতি Control- Cসব পলাতক লুপ খুব মেরে ফেলবে। এই শেল ফাংশনটি অন্তত bashএবং এর নীচে কাজ করে ksh

# Usage: lc [number_of_cpus_to_load [number_of_seconds] ]
lc() {
  (
    pids=""
    cpus=${1:-1}
    seconds=${2:-60}
    echo loading $cpus CPUs for $seconds seconds
    trap 'for p in $pids; do kill $p; done' 0
    for ((i=0;i<cpus;i++)); do while : ; do : ; done & pids="$pids $!"; done
    sleep $seconds
  )
}

1 নোট করুন যে সিপিইউগুলি প্রতিটি প্রতি একাধিক থ্রেডকে সমর্থন করে (হাইপার-থ্রেডিং), ওএস সমস্ত ভার্চুয়াল সিপিইউগুলিতে লোড প্রেরণ করবে। সেক্ষেত্রে লোড আচরণটি বাস্তবায়ন নির্ভর (প্রতিটি থ্রেড 100% ব্যস্ত বা না হিসাবে রিপোর্ট করা হতে পারে)।


ধন্যবাদ, তবে &একটি আদেশ একটি পৃথক থ্রেড বা পৃথক কোর মধ্যে চালিত করে ? আমি দ্বিধান্বিত.
মিমডিমিরবাস 14

3
@ মমিডেমিরবাসস: অ্যাম্পারস্যান্ড কমান্ডকে একটি পৃথক প্রক্রিয়া হিসাবে চালিত করে। শিডিয়ুলারটি সমস্ত সক্রিয় প্রক্রিয়াগুলি সমস্ত উপলব্ধ কোরগুলিতে প্রেরণ করছে।
jlliagre

1
অনুস্মারক হিসাবে আপনি জারি করে এই পরীক্ষাটি বন্ধ করতে পারেন killall bash- কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনার সময়ে অন্য কোনও গুরুত্বপূর্ণ স্ক্রিপ্ট চলছে না।
একটি কোডার

1
@ অ্যাকোডার লুপটি শেষ করার উপায় প্রস্তাব করার জন্য ধন্যবাদ। আমি তবে এড়াতে চাই killall bash। লোড জেনারেশন শেষ করতে একটি নিরাপদ পদ্ধতি যুক্ত করতে সম্পাদনা করা উত্তর।
jlliagre

1
এলসি শেল ফাংশনের জন্য +1
আকিরা ইয়ামামোটো

20

আমি একটি সাধারণ পাইথন স্ক্রিপ্ট তৈরি করেছি যা একই কাজ করে। আপনি লোড করতে চান এমন সিপিইউ কোরগুলির সংখ্যা নিয়ন্ত্রণ করতে পারেন। এই সম্পর্কে ভাল জিনিস এটি সিপিইউ ছাড়াও অন্য কোনও সংস্থান গ্রহণ করবে না। (আমি মনে করি মার্ক জনসনের ধারণাটি প্রচুর পরিমাণে I / O সংস্থান গ্রহণ করবে, যা এখানে অনাকাঙ্ক্ষিত))

from multiprocessing import Pool

def f(x):
    # Put any cpu (only) consuming operation here. I have given 1 below -
    while True:
        x * x

# decide how many cpus you need to load with.
no_of_cpu_to_be_consumed = 3

p = Pool(processes=no_of_cpu_to_be_consumed)
p.map(f, range(no_of_cpu_to_be_consumed))

টার্মিনাল থেকে এই স্ক্রিপ্টটি চালান $ python temp1.py। আপনার কাজ শেষ হয়ে গেলে আপনাকে স্ক্রিপ্টটি মারতে হবে।

আমি যখন আমার কোরের 3 টি লোড করি তখন এখানে আমার সিপিইউ খরচ হয় output

স্ক্রিপ্ট temp1.py তিনটি প্রক্রিয়া তৈরি করে (পিআইডি - 9377, 9378, 9379) যা আমার 3 টি কোর লোড করে


3
আপনি এই জাতীয় CPU ব্যবহার প্রদর্শন করতে কোন প্রোগ্রাম ব্যবহার করেন? এটি আমাকে শীর্ষের কথা মনে করিয়ে দেয় তবে আমি সিপিইউ'র চার্টগুলি মনে করি না।
jftuga

13
@jftuga সম্ভবত htop , শীর্ষ এর সুন্দর ভাই।
বোপ্পেএইচ

2
হ্যাঁ এর হিপ সেরা রিয়েল টাইম, লিনাক্সের জন্য রঙিন ইন্টারেক্টিভ প্রক্রিয়া দর্শক - htop.sourceforge.net
পুষ্পাক দাগাদ

3
মনোযোগ দিচ্ছিল না এবং এটি একটি উইন্ডোজ বাক্সে চালাচ্ছিল। খুব খারাপ জিনিস ...
ডেরিক

13

একটি বিকল্প উপায় হবে

openssl speed -multi $(grep -ci processor /proc/cpuinfo)

বা (এনপ্রোক উপস্থিত থাকলে)

openssl speed -multi $(nproc --all)

ওপেনএসএসএল প্রায় সবসময় ডিস্ট্রোজে উপস্থিত থাকে, সুতরাং অতিরিক্ত প্যাকেজগুলির প্রয়োজন হয় না।


8

দুটি শুরু করুন

sha1sum /dev/zero &

আপনার সিস্টেমে প্রতিটি কোরের জন্য কমান্ড।

থামতে

killall sha1sum

অথবা

kill sha1sum

7

আমি সাধারণত সিপবার্ন স্যুটটি গ্রহণ করি:

sudo apt-get install cpuburn
for i in {1..4}; do burnK7 & done

আপনার কাছে থাকা কোরের সংখ্যা বা এইচটি-থ্রেড সংখ্যার সাথে 4 প্রতিস্থাপন করুন বা চাপ দিতে চান।

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

আপনি ক্রমানুসারে সিপবার্নও করতে পারেন:

burnP6 & burnP6 & burnP6 & burnP6 & 
[1] 28520
[2] 28521
[3] 28522
[4] 28523

এবং আপনি যখন তাদের থামাতে চান:

killall burnP6

আপনি burnP6 &আপনার সিস্টেমে সিপিইউ কোরের সংখ্যার সাথে মিলে গুন করতে পারেন ।


6

আমি স্ট্রেস-এনজি বিকাশ করছি, একটি আপডেট স্ট্রেস সরঞ্জাম যা লিনাক্স সিস্টেমের বিভিন্ন দিককে চাপ দিতে পারে। আরও তথ্যের জন্য, http://kernel.ubuntu.com/~cking/stress-ng/ দেখুন

ব্যবহার স্ট্রেসের মতো

$ stress-ng --cpu 4 --vm 2 --fork 8 --switch 4 --timeout 1m
stress-ng: info:  [32254] dispatching hogs: 4 cpu, 8 fork, 4 switch, 2 vm
stress-ng: info:  [32254] cache allocate: default cache size: 8192K

সাথে ইনস্টল করুন

sudo apt-get install stress-ng

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

3

আপনি যতবার চান সেই কমান্ডটি চালাতে পারেন এবং প্রতিবার এটি একটি আলাদা কোর গ্রহণ করবে:

$ CORES=1
$ for i in `seq 1 $CORES`; do cat /dev/zero > /dev/null &
> done
[1] 8388

1
প্রক্রিয়া সমাপ্ত করে কি একটু ঝামেলা হবে না?
oKtosiTe

1
killall catএটা করা উচিত।
খ্রিস্টান মান

1
আপনার অন্যান্য catপ্রক্রিয়া চলছে কিনা তার উপর নির্ভর করে (আমি সাধারণত করি)।
oKtosiTe

2

https://github.com/GaetanoCarlucci/CPULoadGenerator

বেশ সহজ এবং বৈজ্ঞানিক সমাধান।

এখানে আপনি গতিশীলতার উদাহরণ দেখতে পারেন যেখানে সিপিইউ কোর 0 এ 50% লোড উত্পন্ন হয়:

এখানে চিত্র বর্ণনা লিখুন

আপনি একই সময়ে অন্যান্য কোরগুলিতে প্রক্রিয়াটি চালাতে পারেন।


1

আমি + জ্লিয়াগ্র্রে এবং + ইকাবুক উভয়কে একত্রিত করেছি।

#!/bin/bash
lc() {
    nowMs=$(date +%s)
    (
        pids=""
        cpus=${1:-1}
        seconds=${2:-60}
        echo "[$(date)] loading $cpus CPUs for $seconds seconds"
        echo "[$(date)] Expected completion: [$(date --date=@$(expr $nowMs + $seconds))]"
        trap 'for p in $pids; do kill $p; done' 0
        for ((i=0;i<cpus;i++)); do
            sha1sum /dev/zero &
            pids="$pids $!";
        done
        sleep $seconds
    )
    echo "[$(date)] Done"
}

lc $@

1

তুমি ব্যবহার করতে পার:

fulload() { dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null | dd if=/dev/zero of=/dev/null & }; fulload; read; killall dd

dd if=/dev/zero of=/dev/nullআপনার সিপিইউ কোরগুলির জন্য পুনরাবৃত্তি করুন ।

পরীক্ষা বন্ধ করতে যে কোনও কী চাপুন।


1

pxzএর একটি সমান্তরাল বাস্তবায়ন xz

pxz -9e /dev/zero --stdout >/dev/null কৌশলটি করা উচিত, কারণ এটি যথেষ্ট সিপিইউ নিবিড়।

যদি /dev/zeroপর্যাপ্ত দ্রুত না হয় (আপনি লক্ষ্য করুন যে pxzআমি / হে থ্রটলড হয়েছি) আপনি এটি করতে পারেন pxz -9e /dev/zero --stdout | pxz -9e --stdout >/dev/null

-এর একটি নবীনতর সংস্করণ xzআছে --threadsবিকল্প, যার জন্য বিকল্প নয় pxz


1

এখানে আমি যেভাবে ব্যবহার করছি এবং এখানে অতিরিক্ত কিছু ইনস্টল করার দরকার নেই।

উদাহরণস্বরূপ 4 টি প্রক্রিয়া শুরু করার জন্য,

nproc | xargs seq | xargs -n1 -P4 md5sum /dev/zero

আপনি উপরের "-P" বিকল্পের মাধ্যমে প্রক্রিয়াগুলির সংখ্যা পরিবর্তন করতে পারেন।


0

একটি সাধারণ কমান্ড লাইন এটি করে:

x="x" ; while : ; do x=$x$x ; echo -n "." ; done

1
এটি সহজ হবে:while : ; do : ; done
jlliagre

@ জেলিয়াগ্র্রে আপনার লোডাভগ ১ এর উপরে যেতে হবে না
----

আপনার লুপটি মূলত সিপিইউ লোড করছে না তবে মেমরিটি আরও পূরণ করছে। এটি শেষ পর্যন্ত মেমরির ত্রুটির সাথে ক্রাশ হবে।
jlliagre

@ জেলিয়াগ্রে মাইন স্মৃতি পূরণ করে এবং অদলবদল (উপস্থিত থাকলে), এটি মারা যাওয়ার আগে 3 টি লোড উত্পাদন করে কারণ এটির স্মৃতিশক্তি চলে না।
অট--

4
এটাই সমস্যা। আপনি কীভাবে কোনও সার্ভারে উচ্চ সিপিইউ লোড উত্পাদন করবেন তা জিজ্ঞাসা করা প্রশ্নের উত্তর দিচ্ছেন না। আপনার স্ক্রিপ্টটি দ্রুত কোনও সিস্টেমকে প্রতিক্রিয়াহীন করে তুলছে এবং তারপরে ক্রাশ হবে। ৩. লোডাভগ পাওয়ার আরও অনেক নির্ভরযোগ্য উপায় রয়েছে যেমন:for i in 1 2 3; do while : ; do : ; done & ; done
জেলিয়াগ্রে

0

আমি @ jlliagre এর মন্তব্যে এটি যুক্ত করতে চেয়েছিলাম, তবে আমার যথেষ্ট খ্যাতি নেই। আপনি যদি একাধিক সার্ভারে এই কোডটি ব্যবহার করতে চলেছেন এবং সিপিইউ গণনা পৃথক হয়, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

for ((i=1; i<=`nproc --all`; i++)); do while : ; do : ; done & done

এটি আপনার সার্ভারের সমস্ত কোরকে আপনার যতগুলিই হোক না কেন ব্যবহার করে। কমান্ডটি nprocকোর্টিলগুলির একটি অংশ তাই বেশিরভাগ লিনাক্স ইনস্টলেশনতে হওয়া উচিত।

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