کنترل سهم فرایند از CPU
وقتی چند فرایند همزمان روی یک سیستم اجرا میشوند، زمانبند (scheduler) هسته باید تصمیم بگیرد به هرکدام چقدر زمان CPU بدهد. مقدار nice یک عدد بین ۱۹- تا ۱۹ است که اولویت فرایند را نشان میدهد: هرچه عدد کمتر (منفیتر)، اولویت بالاتر و هرچه بیشتر، اولویت پایینتر. مقدار پیشفرض صفر است.
› اجرای یک فرایند با اولویت پایینتر از پیشفرض
nice -n 10 tar -czf backup.tar.gz /data
› تغییر اولویت یک فرایند در حال اجراست
renice -n 5 -p 4521
› فقط root میتواند اولویت را منفی (بالاتر از عادی) کند
sudo renice -n -5 -p 4521
nice برای زمانبندی CPU مناسب است، اما محدودیت سختی روی مصرف حافظه یا I/O اعمال نمیکند. اینجاست که cgroups (control groups) وارد میشوند. cgroups یک قابلیت هسته لینوکس است که امکان گروهبندی فرایندها و محدود کردن دقیق منابع هرگروه (CPU، حافظه، I/O، شبکه) را فراهم میکند و پایهی فناوریهای کانتینری مثل Docker نیز همین است. در سیستمهای مبتنی بر systemd، هر سرویس بهطور خودکار در یک cgroup جدا اجرا میشود و میتوان محدودیت گذاشت:
[Service]
MemoryMax=512M
CPUQuota=50%
این خطها در فایل unit یک سرویس، تضمین میکنند که آن سرویس هرگز بیش از نیم گیگابایت حافظه یا نصف یک هسته CPU مصرف نکند، حتی اگر باگ داشته باشد.