سؤال كيف يمكنني إنتاج حمل CPU عالي على خادم Linux؟


أنا حاليا في عملية تصحيح تثبيت Cacti وتريد إنشاء تحميل وحدة المعالجة المركزية لتصحيح الرسوم البيانية استخدام وحدة المعالجة المركزية الخاصة بي.

حاولت أن أركض ببساطة cat /dev/zero > /dev/nullوالتي تعمل بشكل رائع ولكنها تستخدم فقط 1 الأساسية:

enter image description here

هل هناك طريقة أفضل لاختبار / الحد الأقصى لموارد النظام تحت الحمل؟

ذات صلة: كيف يمكنني إنتاج حمل CPU عالي على Windows؟


142
2018-06-30 17:13


الأصل


هل من الممكن لتشغيل مثيلات متعددة من cat الوقت ذاته؟ - Nate Koppenhaver
NateKoppenhaver: نعم ، يبدو ذلك ممكنًا عند التفافها في screen الدورات. لكنني أفضل حلًا أكثر تعقيدًا إن أمكن. - Der Hochstapler
هيه ، أنا دائمًا cat /dev/random > /dev/null. خمن /dev/zero يعمل أيضا. :-) - oKtosiTe
oKtosiTe cat / dev / random له التأثير الجانبي لاستنفاد الإنتروبيا في / dev / random. هناك أوقات تحتاج للحفاظ على الانتروبيا ، وأنا لن يكون هذا كما أذهب إلى خنزير وحدة المعالجة المركزية. - Rich Homolka
oKtosiTe ما قاله Rich Homolka صحيح ، ولكنه ليس فقط أنه أمر سيئ أن يفعله ، كما أنه عديم الفائدة لأنه سيتوقف على الفور تقريبا ويتوقف عن استهلاك وحدة المعالجة المركزية. - Luc


الأجوبة:


محاولة stress انها تقريبا ما يعادل ويندوز consume.exe:

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

163
2018-06-30 17:27



على أوبونتو ، يمكنك تثبيت مع sudo apt-get install stress - ben
على ديبيان يازي أيضا. - enapupe
على فيدورا ، sudo yum install stress - Christopher Markieta
قوس: sudo pacman -S stress - das_j
brew install stress على OS X - Christian Long


لا تحتاج إلى تثبيت أي حزمة إضافية ، فالصدعة القديمة الجيدة قادرة على القيام بذلك بمفردك.

ستحمل هذه البطانة الواحدة النوى الأربعة لديك بنسبة 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 مع عدد وحدات المعالجة المركزية (CPUs) التي ترغب في تحميلها إذا كانت مختلفة عنها 4.

إذا لم يكن لديك وظيفة خلفية قيد التشغيل بالفعل عند تشغيل إحدى هذه الحلقات ، فيمكنك إيقاف توليد الحمل باستخدام هذا الأمر:

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

الإجابة على تعليق @ underscore_d ، هنا نسخة محسنة تبسط الكثير من التوقف عن التحميل وتسمح أيضًا بتحديد المهلة (60 ثانية). مراقبة-C سوف تقتل جميع حلقات هارب أيضا. هذه الدالة shell يعمل على الأقل تحت 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
  )
}

85
2017-07-01 14:55



شكرا لكن & يؤدي الأمر لتشغيل في فصل منفصل خيط أو منفصلة النواة؟ أنا مرتبك. - mmdemirbas
@ mmdemirbas: تتسبب علامة العطف في الأمر لتشغيله كعملية منفصلة. ثم يقوم المجدول بإرسال جميع العمليات النشطة إلى جميع المراكز الأساسية المتاحة. - jlliagre
كتذكير ، يمكنك إيقاف هذا الاختبار عن طريق إصداره killall bash - تأكد فقط من عدم وجود أي برنامج نصي مهم آخر قيد التشغيل في ذلك الوقت. - a coder
acoder شكرًا على اقتراح طريقة لإنهاء الحلقة. لكنني أتجنب ذلك killall bash. تم تحرير الإجابة لإضافة طريقة أكثر أمانًا لإنهاء عملية تحميل البيانات. - jlliagre
+1 لوظيفة lc shell - Akira Yamamoto


لقد صنعت برنامج بيثون بسيط يقوم بالشيء نفسه. يمكنك التحكم في عدد وحدات cpu التي تريد تحميلها. الشيء الجيد في هذا هو أنها لن تستهلك أي مورد آخر بجانب وحدة المعالجة المركزية. (أعتقد أن فكرة مارك جونسون قد تستهلك الكثير من موارد 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. تحتاج إلى قتل البرنامج النصي عند الانتهاء.

هنا ، هو ناتج الاستهلاك الخاص بي عندما أقوم بتحميل ثلاثة من النوى الخاصة بي.

Script temp1.py creates three processes (PIDs - 9377, 9378, 9379) which load 3 of my cores


18
2018-06-30 17:56



ما البرنامج الذي استخدمته لعرض استخدام وحدة المعالجة المركزية مثل هذا؟ إنه يذكرني بالأعلى ، لكنني لا أتذكر مخططات "CPU". - jftuga
jftuga على الأرجح HTOP، أعلىأخي أجمل. - BoppreH
نعم له توب. أفضل وقت حقيقي ، عارض عملية تفاعلية ملونة لـ linux - htop.sourceforge.net - Pushpak Dagade
لم أكن الاهتمام وركض على صندوق ويندوز. أشياء سيئة للغاية ... - Derrick


طريقة بديلة واحدة ستكون

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

أو (إذا كان nproc موجودًا)

openssl speed -multi $(nproc --all)

OpenSSL موجود دائمًا تقريبًا في توزيعات الوقت الحالي ، لذا لا تحتاج إلى حزم إضافية.


13
2017-09-08 11:19





ابدأ اثنين

sha1sum /dev/zero &

أوامر لكل نواة في نظامك.

للتوقف

killall sha1sum

أو

kill sha1sum

8
2017-11-01 21:31





عادة ما أتولى جناح cpuburn:

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

استبدل 4 مع عدد النوى / خيوط HT لديك أو تريد أن تؤكد.

ملاحظة: هذا يشدد على أكبر قدر ممكن من مساحة الشريحة في نفس الوقت ، فهو مبرمج لتوليد أقصى قدر من تبديد الطاقة. كان علي أن أكتب هذا المنصب للمرة الثانية ، بطريقة ما لم يعجبني الجهاز :-(

يمكنك أيضًا تنفيذ cpuburn بالتسلسلات:

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

وعندما تريد منعهم:

killall burnP6

يمكنك أيضا مضاعفة burnP6 & لتتناسب مع عدد من نواة وحدة المعالجة المركزية على نظامك.


7
2017-07-25 21:33





لقد قمت بتطوير stress-ng ، أداة ضغط حديثة يمكن أن تشدد على نطاق واسع من جوانب نظام Linux. لمزيد من المعلومات، راجع 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

5
2017-09-06 20:11



ارجوك اقرأ كيف أوصي البرنامج للحصول على بعض النصائح لكيفية المضي قدمًا في التوصية بالبرامج. على أقل تقدير يجب عليك توفير أكثر من مجرد / على الأقل رابط ، على سبيل المثال بعض المعلومات الإضافية حول البرنامج نفسه ، وكيف يمكن استخدامه لحل المشكلة في السؤال. - DavidPostill♦


يمكنك تشغيل هذا الأمر عدة مرات كما تريد ، وسيتطلب الأمر جوهرًا مختلفًا في كل مرة:

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

2
2017-07-01 02:09



لن تجعل هذا إنهاء العمليات قليلاً من المتاعب؟ - oKtosiTe
killall cat يجب القيام به. - Christian Mann
اعتمادا على ما إذا كان لديك الآخر cat العمليات الجارية (أفعل عادة). - oKtosiTe