مرکز آموزش

تغییر اولویت پردازش فرایند ها در لینوکس

در لینوکس به صورت پیشفرض فرایند ها مقدار یکسانی از زمان CPU   برای پردازش استفاده می کنند بدین معنی که تمام فرایند ها هم زمان به صورت موازی در حال پردازش می باشند، گاهی ممکن است که یک برنامه نیاز باشد تا با اولویت و زمان بیشتری نسبت به بقیه فرایند ها پردازش شود تا نتیجه و خروجی زودتر انجام شود این عمل را می توانیم با برنامه هایی نظیر nice  و یا renice  انجام دهیم.

برنامه Nice   ابتدا در سیستم عامل یونیکس مشاهده شد و بعد از ان به لینوکس نیز منتقل شد و هدف ان نیز تغییر اولویت پردازش می باشد، این برنامه تفاوت جزئی نسبت به renice  دارد و ان این است که برخلاف Nice  که در ابتدا و قبل از اجرای برنامه،اولویت انرا تغییر می دهد renice  می توانید در حین پردازش و اجرای برنامه اولویت یک فرایند را نیز تغییر دهید.

این اولویت ها با اتخاذ یک عدد تغییر می کنند که این عدد از -20 تا 19 متغیر می باشد، اعداد کمتر از 19 به معنی اولویت بیشتر می باشند و -20 به معنی بالا ترین اولویت است.



در دستور top  پارامتر PR  نشان دهنده اولویت فرایند ها می باشد که در این سیستم اولویت بیشتر فرایند ها 20 می باشد.

همان طور که مشاهده می کنید مقدار NI  که مربوط به nice  می باشد به صورت پیشفرض 0 می باشد.

برای نمونه  فرض می کنیم که یک فایل با حجم 100 گیگ را نیاز است که در مسیر جاری extract کنیم ممکن است این روند چندین ساعت بطول انجامد، شما می توانید با تغییر اولویت پردازش این فرایند، زمان آنرا کاهش دهید.

screen nice -n -5 tar xzvf tengigfile.tar.gz

دستور screen  برای قرار گرفتن پروسه در Background  می باشد و سویچ –n  برای مقدار دهی اولویت فرایند extract  می باشد  و مطابق تصویر زیر اولویت این فرایند از 20 به 15 تغییر داده شده است و مقدار NI  نیز 5-  می باشد.



دستور gzip  مربوط به این فرایند می باشد.

 

screen nice -n -5 tar xzvf tengigfile.tar.gz

screen nice --5 tar xzvf tengigfile.tar.gz

screen nice –adjustment= -5 tar xzvf tengigfile.tar.gz

هر 3 دستور بالا مشابه می باشند دقت نمایید که برای حالت دوم از 2 خط فاصله در کنار عدد استفاده شده است.

موارد بالا برای حالتی است که می خواهید اولویت اجرای یک برنامه تغییر داده شود.

حال می خواهیم اولویت فرایند های در حال اجرا را با renice تغییر دهیم

 فرض کنید می خواهیم اولیوت فرایند mysql  را تغییر دهیم بدین منظور نیاز به PID  این فرایند هست که با دستور ps  می توان انرا پیدا کرد

[root@server ~]# ps -ef | grep mysqld

root     20338     1  0 05:14 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/server.phpextension.com.pid

mysql    20429 20338  0 05:14 pts/0    00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/server.phpextension.com.err --pid-file=/var/lib/mysql/server.phpextension.com.pid

root     21461 20094  0 05:32 pts/0    00:00:00 grep mysqld

 

PID  مربوط به این سرویس 20429 می باشد

renice -n -15 20429

با دستور top –p 20429 می توانید این فرایند را مشاهده نمایید.



همچنین شما می توانید اولویت فرایند ها را به صورت گروهی  مانند الگوی زیر تغییر دهید.

renice priority [[-p] pids] [[-g] pgrps] [[-u] users]

می توانید با دستور زیر تمامی فرایند های کاربر nasri  را با اولویت بیشتر پردازش کنید.

renice -n -5 -u nasri

یکی از مشکلاتی که در سرور های اشتراکی وجود دارد اجرای فرایند ها به صورت همزمان می باشد، گاهی نیاز است که یک فرایند مثل بکاپ گیری با اولویت بالا انجام شود و بکاپ گیری زود به اتمام برسد برای این منظور می توانیم از یکی از ویژگی های دایرکت ادمین استفاده کرد

 شما می توانید این قابلیت را از طریق پارامتر backup_nice تغییر دهید کافیست موارد زیر را انجام دهید

nano /usr/local/directadmin/conf/directadmin.conf

عبارت backup_nice=-15 را در انتهای فایل اضافه نمایید و فایل را ذخیره کنید.

مقدار پیشرفض 19 می باشد که در دایرکت ادمین اعمال شده است. شما می توانید مقدار کمتر نیز اعمال کنید حتی مقادیر منفی.

پس از ان نیاز است سرویس directadmin  با دستور زیر restart  شوید

service directadmin restart

 

 همچنین برای افزایش سرعت فرایند بکاپ گیری پیشنهاد می شود که از pigz  بجای tgz  استفاده شود، این قابلیت را از روش زیر  با استفاده از CustomBuild 2  فعال نمایید. 

 cd /usr/local/directadmin/custombuild

./build update

./build pigz

 

 

در همین زمینه