به عنوان ادمین سیستم شما ممکن است بخواهید وضعیت سرورهای لینوکسی خود را در زمانی که آنها تحت فشار Load بالا هستند مانیتور و امتحان کنید. ابزار stress که لینوکس در اختیار شما میگذارد، میتواند شیوه خوبی برای ادمین ها و برنامه نویسان سیستم به منظور :
همچنین توصیه میشود مطالعه کنید :
httpstat - یک ابزار آمارگیری Curl برای تست سرعت لود سایت
چگونه 90 درصد از memory خود را در linux برای تست اشغال کنیم؟
استرس تست ظرفیت شبکه با استفاده از iperf3 در لینوکس
در این پست ما 2 ابزار مهم stress و Stress-ng را برای تست stress در سیستم لینوکس تان مورد بررسی قرار خواهیم داد.
1 - Stress
یک ابزار تولید کننده workload (بار کاری) میباشد که برای اندازه گیری میزان فشار CPU, Memory, I/O و Disk مورد استفاده قرار میگیرد.
2 - Stress-ng
ورژن جدید و آپدیت شده ابزار Stress میباشد که سیستم شما را برای اهداف و قابلیت های زیر تست میکند.
اگر چه این ابزار برای تست سیستم تان مناسب هستند اما نباید توسط هر کاربری از سیستم مورد استفاده قرار بگیرد.
نکته : شدیدا توصیه میشود که شما این ابزار را با مجوز root اجرا کنید زیر آنها میتوانند ماشین لینوکس شما را به سرعت تحت فشار قرار دهند و همچنین بتوانید از Error های خاص سیستم روی سخت افزارهای ضعیف جلوگیری کنید.
طریق نصب ابزار Stress در Linux
برای نصب این ابزار روی Debian و مشتقات آن همانند Ubuntu و Mint دستور زیر را اجرا کنید.
برای نصب ابزار Stress روی لینوکس CentOS/RHEL و Fedora شما نیاز دارید که ابتدا ریپازیتوری Epel را فعال کنید و سپس دستور زیر را برای نصب اجرا کنید.
syntax عمومی برای استفاده از دستور Stress به شرح زیر میباشد.
یکسری آپشن هایی که شما میتوانید با دستور Stress استفاده کنید به شرح زیر میباشد.
نحوه استفاده از Stress روی سیستم های لینوکسی
1. برای امتحان کردن تاثیر دستور هر زمان که آن را اجرا میکنید ابتدا باید دستور Uptime را اجرا کرده و میانگین Load را در جایی یادداشت کنید.
سپس دستور stress را برای spawn تعداد 8 worker spinning برروی sqrt() با یک timeout 20 ثانیه اجرا کنید. بعد از اجرا کردن دستور stress باز دستور uptime را اجرا کنید و میانگین Load را با میزانی که قبلا یادداشت کرده بودید مقایسه کنید.
نمونه خروجی
2. برای spawn کردن 8 worker برروی sqrt() با یک timeout 30 ثانیه ، با نمایش جزئیات، دستور زیر را اجرا کنید.
نمونه خروجی
3. برای spawn کردن یک worker تابع malloc() و free() با یک timeout 60 ثانیه، دستور زیر را اجرا کنید.
نمونه خروجی
4. برای spawn تعداد 4 worker spinning برروی sqrt()، 2 worker spinning برروی تابع sync()، 2 worker برروی تابع malloc()/free()، با یک timeout 20 ثانیه و تخصیص حافظه ی 256MB برای هر vm worker ، دستور زیر را اجرا کنید.
نمونه خروجی
نحوه نصب ابزار Stress-ng در لینوکس
برای نصب ابزار stress-ng دستورات زیر را با توجه به نوع سیستم عامل تان اجرا کنید.
ساختار کلی برای استفاده از این دستور به شرح ذیل میباشد :
یکسری اپشن هایی که در این دستور میتوانید با stress-ng استفاده کنید :
چگونگی استفاده از دستور Stress-ng در Linux
1.برای اجرای 8 CPU stressor با timeout 60 ثانیه و یک خلاصه در انتهای عملیات به صورت زیر عمل کنید.
نمونه ی خروجی
2.برای اجرای 4 FFT CPU stressor با یک timeout 2 دقیقه به صورت زیر عمل کنید.
نمونه خروجی
3.برای اجرای 5hdd stressor و متوقف کردن پس از 100000 bogo عملیات، دستور زیر را اجرا کنید.
نمونه ی خروجی
4.برای اجرای 8 CPU stressor، 4 I/O stressor و 1 virtual memory stressor با استفاده اط 1GB از حافظه مجازی برای 1 دقیقه، دستور زیر را اجرا کنید.
نمونه خروجی
خلاصه : همانطور که توصیه شد این ابزارها از آنجایی که تاثیری های خاصی روی سیستم دارند باید توسط مجوزهای Supper User اجرا شوند. این ابزار برای مدیریت کلی سیستم در لینوکس مفید میباشد. امیدوارم این پست برای شما مفید واقع شود و اگر هر ایده اضافی درباره نحوه تست گرفتن وضعیت سلامت سیستم تان با استفاده از این دستورات یا هرگونه ابزار دیگری دارید با ما به اشتراک بگذارید.
همچنان با ما همراه باشید.
- فعالیت های منظم و به جا روی یک سیستم
- مانیتور اینترفیس های کرنل سیستم عامل
- تست اجزای سخت افزاری لینوکس خود همانند CPU, Memory, Disk device و سخت افزارهای دیگر برای مشاهده Performance آنها به هنگامی که زیر فشار هستند.
- اندازه گیری بار مصرف متفاوت پاور روی یک سیستم
همچنین توصیه میشود مطالعه کنید :
httpstat - یک ابزار آمارگیری Curl برای تست سرعت لود سایت
چگونه 90 درصد از memory خود را در linux برای تست اشغال کنیم؟
استرس تست ظرفیت شبکه با استفاده از iperf3 در لینوکس
در این پست ما 2 ابزار مهم stress و Stress-ng را برای تست stress در سیستم لینوکس تان مورد بررسی قرار خواهیم داد.
1 - Stress
یک ابزار تولید کننده workload (بار کاری) میباشد که برای اندازه گیری میزان فشار CPU, Memory, I/O و Disk مورد استفاده قرار میگیرد.
2 - Stress-ng
ورژن جدید و آپدیت شده ابزار Stress میباشد که سیستم شما را برای اهداف و قابلیت های زیر تست میکند.
- محاسبه CPU
- فشار درایو
- همگام سازی I/O
- پایپ I/O
- cache thrashing
- VM stress
- فشار سوکت ها
- ایجاد و خاتمه ی فرآیند
- خواص context switching
اگر چه این ابزار برای تست سیستم تان مناسب هستند اما نباید توسط هر کاربری از سیستم مورد استفاده قرار بگیرد.
نکته : شدیدا توصیه میشود که شما این ابزار را با مجوز root اجرا کنید زیر آنها میتوانند ماشین لینوکس شما را به سرعت تحت فشار قرار دهند و همچنین بتوانید از Error های خاص سیستم روی سخت افزارهای ضعیف جلوگیری کنید.
طریق نصب ابزار Stress در Linux
برای نصب این ابزار روی Debian و مشتقات آن همانند Ubuntu و Mint دستور زیر را اجرا کنید.
کد:
$ sudo apt-get install stress
برای نصب ابزار Stress روی لینوکس CentOS/RHEL و Fedora شما نیاز دارید که ابتدا ریپازیتوری Epel را فعال کنید و سپس دستور زیر را برای نصب اجرا کنید.
کد:
[FONT=monospace]# yum install stress[/FONT]
کد:
[FONT=monospace]$ sudo stress option argument[/FONT]
- برای spawn کردن N تعداد worker spinning برروی تابع sqrt()، از گزینه ی –cpu N استفاده کنید.
- برای spawn کردن N تعداد worker spinning برروی تابع sync()، از گزینه ی –io N استفاده کنید.
- برای spawn کردن N تعداد worker spinning برروی تابع malloc()/free()، ازگزینه ی –vm N استفاده کنید.
- برای تخصیص حافظه به هر worker vm، از گزینه ی –vm-bytes N استفاده کنید.
- به جای آزادسازی و تخصیص مجدد منابع حافظه، شما می توانید حافظه را توسط استفاده از گزینه ی –vm-keep ، redirty نمایید.
- Sleep را برای N ثانیه قبل از آزادسازی حافظه توسط –vm-hang N تنظیم کنید.
- برای spawn کردن N تعداد worker spinning برروی تابع write()/unlink()، از گزینه ی –hdd N استفاده کنید.
- شما می توانید یک timeout بعد از N ثانیه با استفاده از گزینه ی –timeout N تنظیم کنید.
- یک فاکتور wait را برای N میلی ثانیه قبل از شروع هر کاری با استفاده از گزینه ی –backoff N تنظیم کنید.
- برای نمایش جزئیات بیشتر هنگامیکه stress در حال اجرا است، از گزینه ی –v استفاده کنید.
- از گزینه ی –help برای نحوه ی استفاده ی دستور stress استفاده کنید.
نحوه استفاده از Stress روی سیستم های لینوکسی
1. برای امتحان کردن تاثیر دستور هر زمان که آن را اجرا میکنید ابتدا باید دستور Uptime را اجرا کرده و میانگین Load را در جایی یادداشت کنید.
سپس دستور stress را برای spawn تعداد 8 worker spinning برروی sqrt() با یک timeout 20 ثانیه اجرا کنید. بعد از اجرا کردن دستور stress باز دستور uptime را اجرا کنید و میانگین Load را با میزانی که قبلا یادداشت کرده بودید مقایسه کنید.
کد:
linuxzone@linuxzone ~ $ uptime linuxzone@linuxzone ~ $ sudo stress --cpu 8 --timeout 20 linuxzone@linuxzone ~ $ uptime
کد:
linuxzone@linuxzone ~ $ uptime 17:20:00 up 7:51, 2 users, load average: 1.91, 2.16, 1.93 [<-- Watch Load Average] linuxzone@linuxzone ~ $ sudo stress --cpu 8 --timeout 20 stress: info: [17246] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd stress: info: [17246] successful run completed in 21s linuxzone@linuxzone ~ $ uptime 17:20:24 up 7:51, 2 users, load average: 5.14, 2.88, 2.17 [<-- Watch Load Average]
2. برای spawn کردن 8 worker برروی sqrt() با یک timeout 30 ثانیه ، با نمایش جزئیات، دستور زیر را اجرا کنید.
کد:
linuxzone@linuxzone ~ $ uptime linuxzone@linuxzone ~ $ sudo stress --cpu 8 -v --timeout 30s linuxzone@linuxzone ~ $ uptime
کد:
linuxzone@linuxzone ~ $ uptime 17:27:25 up 7:58, 2 users, load average: 1.40, 1.90, 1.98 [<-- Watch Load Average] linuxzone@linuxzone ~ $ sudo stress --cpu 8 -v --timeout 30s stress: info: [17353] dispatching hogs: 8 cpu, 0 io, 0 vm, 0 hdd stress: dbug: [17353] using backoff sleep of 24000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 8 [17354] forked stress: dbug: [17353] using backoff sleep of 21000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 7 [17355] forked stress: dbug: [17353] using backoff sleep of 18000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 6 [17356] forked stress: dbug: [17353] using backoff sleep of 15000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 5 [17357] forked stress: dbug: [17353] using backoff sleep of 12000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 4 [17358] forked stress: dbug: [17353] using backoff sleep of 9000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 3 [17359] forked stress: dbug: [17353] using backoff sleep of 6000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 2 [17360] forked stress: dbug: [17353] using backoff sleep of 3000us stress: dbug: [17353] setting timeout to 30s stress: dbug: [17353] --> hogcpu worker 1 [17361] forked stress: dbug: [17353] linuxzone@linuxzone ~ $ uptime 17:27:59 up 7:59, 2 users, load average: 5.41, 2.82, 2.28 [<-- Watch Load Average]
3. برای spawn کردن یک worker تابع malloc() و free() با یک timeout 60 ثانیه، دستور زیر را اجرا کنید.
کد:
linuxzone@linuxzone ~ $ uptime linuxzone@linuxzone ~ $ sudo stress --vm 1 --timeout 60s linuxzone@linuxzone ~ $ uptime
کد:
linuxzone@linuxzone ~ $ uptime 17:34:07 up 8:05, 2 users, load average: 1.54, 2.04, 2.11 [<-- Watch Load Average] linuxzone@linuxzone ~ $ sudo stress --vm 1 --timeout 60s stress: info: [17420] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd stress: info: [17420] successful run completed in 60s linuxzone@linuxzone ~ $ uptime 17:35:20 up 8:06, 2 users, load average: 2.45, 2.24, 2.17 [<-- Watch Load Average]
4. برای spawn تعداد 4 worker spinning برروی sqrt()، 2 worker spinning برروی تابع sync()، 2 worker برروی تابع malloc()/free()، با یک timeout 20 ثانیه و تخصیص حافظه ی 256MB برای هر vm worker ، دستور زیر را اجرا کنید.
کد:
linuxzone@linuxzone ~ $ uptime linuxzone@linuxzone ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s linuxzone@linuxzone ~ $ uptime
کد:
linuxzone@linuxzone ~ $ uptime 17:40:33 up 8:12, 2 users, load average: 1.68, 1.84, 2.02 [<-- Watch Load Average] linuxzone@linuxzone ~ $ sudo stress --cpu 4 --io 3 --vm 2 --vm-bytes 256M --timeout 20s stress: info: [17501] dispatching hogs: 4 cpu, 3 io, 2 vm, 0 hdd stress: info: [17501] successful run completed in 20s linuxzone@linuxzone ~ $ uptime 17:40:58 up 8:12, 2 users, load average: 4.63, 2.54, 2.24 [<-- Watch Load Average]
نحوه نصب ابزار Stress-ng در لینوکس
برای نصب ابزار stress-ng دستورات زیر را با توجه به نوع سیستم عامل تان اجرا کنید.
کد:
$ sudo apt-get install stress-ng [on [B]Debian[/B] based systems] # yum install stress-ng [on [B]RedHat[/B] based systems]
ساختار کلی برای استفاده از این دستور به شرح ذیل میباشد :
کد:
$ sudo stress-ng option argument
- برای استارت کردن N مورد از هر تست stress، می توانید از گزینه ی –all استفاده کنید.
- برای استارت کردن N پروسس برای تمرین CPU توسط کارکردن پی درپی از طریق تمام روش های متفاوت تست فشار CPU ، از گزینه ی –cpu-methodoption استفاده کنید. روشهای بسیاردردسترسی وجود دارند که شما می توانید استفاده کنید، برای مشاهده ی آنها می توانید از manpage آن استفاده کنید.
- برای متوقف کردن پروسس CPU stress بعد از N bogo عملیات، ازگزینه ی –cpu-ops N استفاده کنید.
- برای استارت کردن تست پروسس های N I/O stress ، از گزینه ی –io N استفاده کنید.
- برای متوقف کردن پروسس io stress بعد از N bogo عملیات از گزینه ی –io-ops N استفاده کنید.
- برای استارت کردن تست پروسس های N vm stress از گزینه ی –vm N استفاده کنید.
- برای ویژگی مقدار حافظه ی هر پروسس vm، از گزینه ی –vm-bytes N استفاده کنید.
- برای متوقف کردن پروسس های vm stress بعد از N bogo عملیات، از گزینه ی –vm-ops N استفاده کنید.
- از گزینه ی –hdd N برای استارت کردن پروسه ی تمرین برای N هارد دیسک استفاده کنید.
- برای متوقف کردن پروسس hdd stress بعد از N bogo عملیات، از گزینه ی –hdd-ops N استفاده کنید.
- شما می توانید یک timeout بعد از N ثانیه با استفاده از گزینه ی –timeout N استفاده کنید.
- برای ایجاد یک گزارش خلاصه بعد از عملیات bogo ، شما می توانید از گزینه ی –metrics یا –metrics-brief استفاده کنید. گزینه ی –metrics-brief گزینه های غیز صفر را نمایش می دهد.
- شما می توانید همچنین N پروسس را استارت کنید که با استفاده از mkdir و rmdir و استفاده از گزینه ی –dir N دایرکتوری ها را ایجاد یا حذف خواهد کرد.
- برای متوقف کردن عملیات پروسس دایرکتوری از گزینه ی –dir-ops N استفاده کنید.
- برای استارت کردن Nپروسس مصرف CPU که در حال حاضر در سطوح nice تمرین خواهند کرد، از گزینه ی –nice N استفاده کنید. هنگامیکه از این گزینه استفاده می کنیم، هر تکرار یک فرایند child را که مابین همه ی سطوح nice در حال اجرای یک حلقه برای 0.1 ثانیه بر سطح ازکار خواهد انداخت و خارج خواهد شد.
- برای متوقف ساختن حلقه ی nice ، از گزینه ی –nice-ops N استفاده کنید.
- برای استارت کردن Nپروسس هایی که مد فایل را توسط chmod(2) و fchmod(2) تغییر می دهند،از گزینه ی –chmod N استفاده کنید. بزرگترین مقداربرای N را به خاطر داشته باشید . عوامل استرس زا بین تمام حالت های ترکیبی بیت هایی که شما با chmod(2) مشخص کرده اید کار خواهند کرد.
- شما می توانید عملیات chmod را با استفاده از گزینه ی –chmod-ops N متوقف سازید.
- شما می توانید از گزینه ی –v برای نمایش اطلاعات بیشتر در باره ی عملیات استفاده کنید.
- از گزینه ی –h برای help استفاده نمایید.
چگونگی استفاده از دستور Stress-ng در Linux
1.برای اجرای 8 CPU stressor با timeout 60 ثانیه و یک خلاصه در انتهای عملیات به صورت زیر عمل کنید.
کد:
linuxzone@linuxzone:~$ uptime linuxzone@linuxzone:~$ sudo stress-ng --cpu 8 --timeout 60 --metrics-brief linuxzone@linuxzone:~$ uptime
کد:
linuxzone@linuxzone:~$ uptime 18:15:29 up 12 min, 1 user, load average: 0.00, 0.01, 0.03 [<-- Watch Load Average] linuxzone@linuxzone:~$ sudo stress-ng --cpu 8 --timeout 60 --metrics-brief stress-ng: info: [1247] dispatching hogs: 8 cpu stress-ng: info: [1247] successful run completed in 60.42s stress-ng: info: [1247] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s stress-ng: info: [1247] (secs) (secs) (secs) (real time) (usr+sys time) stress-ng: info: [1247] cpu 11835 60.32 59.75 0.05 196.20 197.91 linuxzone@linuxzone:~$ uptime 18:16:47 up 13 min, 1 user, load average: 4.75, 1.47, 0.54 [<-- Watch Load Average]
2.برای اجرای 4 FFT CPU stressor با یک timeout 2 دقیقه به صورت زیر عمل کنید.
کد:
linuxzone@linuxzone:~$ uptime linuxzone@linuxzone:~$ sudo stress-ng --cpu 4 --cpu-method fft --timeout 2m linuxzone@linuxzone:~$ uptime
کد:
linuxzone@linuxzone:~$ uptime 18:25:26 up 22 min, 1 user, load average: 0.00, 0.26, 0.31 [<-- Watch Load Average] linuxzone@linuxzone:~$ sudo stress-ng --cpu 4 --cpu-method fft --timeout 2m stress-ng: info: [1281] dispatching hogs: 4 cpu stress-ng: info: [1281] successful run completed in 120.01s linuxzone@linuxzone:~$ uptime 18:27:31 up 24 min, 1 user, load average: 3.21, 1.49, 0.76 [<-- Watch Load Average]
3.برای اجرای 5hdd stressor و متوقف کردن پس از 100000 bogo عملیات، دستور زیر را اجرا کنید.
کد:
linuxzone@linuxzone:~$ uptime linuxzone@linuxzone:~$ sudo stress-ng --hdd 5 --hdd-ops 100000 linuxzone@linuxzone:~$ uptime
کد:
linuxzone@linuxzone:~$ uptime 18:29:32 up 26 min, 1 user, load average: 0.43, 1.00, 0.67 [<-- Watch Load Average] linuxzone@linuxzone:~$ sudo stress-ng --hdd 5 --hdd-ops 100000 stress-ng: info: [1290] defaulting to a 86400 second run per stressor stress-ng: info: [1290] dispatching hogs: 5 hdd stress-ng: info: [1290] successful run completed in 136.16s linuxzone@linuxzone:~$ uptime 18:31:56 up 29 min, 1 user, load average: 4.24, 2.49, 1.28 [<-- Watch Load Average]
4.برای اجرای 8 CPU stressor، 4 I/O stressor و 1 virtual memory stressor با استفاده اط 1GB از حافظه مجازی برای 1 دقیقه، دستور زیر را اجرا کنید.
کد:
linuxzone@linuxzone:~$ uptime linuxzone@linuxzone:~$ sudo stress-ng --cpu 4 --io 4 --vm 1 --vm-bytes 1G --timeout 60s --metrics-brief linuxzone@linuxzone:~$ uptime
کد:
linuxzone@linuxzone:~$ uptime 18:34:18 up 31 min, 1 user, load average: 0.41, 1.56, 1.10 [<-- Watch Load Average] linuxzone@linuxzone:~$ sudo stress-ng --cpu 4 --io 4 --vm 1 --vm-bytes 1G --timeout 60s --metrics-brief stress-ng: info: [1304] dispatching hogs: 4 cpu, 4 iosync, 1 vm stress-ng: info: [1304] successful run completed in 60.12s stress-ng: info: [1304] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s stress-ng: info: [1304] (secs) (secs) (secs) (real time) (usr+sys time) stress-ng: info: [1304] cpu 1501 60.07 2.67 10.39 24.99 114.93 stress-ng: info: [1304] iosync 381463 60.01 0.00 12.90 6357.10 29570.78 linuxzone@linuxzone:~$ uptime 18:35:36 up 32 min, 1 user, load average: 4.66, 2.80, 1.59 [<-- Watch Load Average]
همچنان با ما همراه باشید.