در لینوکس به صورت پیشفرض فرایند ها مقدار یکسانی از زمان 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