آموزش نصب htop و مانیتورینگ پردازشها و مصرف منابع در لینوکس
سرور کند شده، لود بالا رفته و نمیدانید کدام پردازش منابع را میبلعد. دستور top این را نشان میدهد، اما خروجیاش خشک است و کار کردن با آن سخت. htop همان کار را با یک رابط تعاملی و رنگی انجام میدهد: فهرست پردازشها را با موس یا کلیدهای جهت بالا و پایین میبرید، در آن جستوجو و فیلتر میکنید، نمای درختی میگیرید و از داخل همان صفحه یک پردازش را kill یا اولویت آن را کم و زیاد میکنید. بر خلاف چیزی که در بعضی آموزشها نوشته شده، htop یک «اسکریپت» نیست؛ یک برنامه کامپایلشده C است که اطلاعاتش را از /proc میخواند.
اگر در فهرست پردازشها دهها پردازه httpd دیدید که رم سرور را پر کردهاند، ریشه ماجرا معمولا به انتخاب MPM آپاچی برمیگردد و اگر آپاچی اصلا بالا نمیآید، خطای Invalid command MaxRequestWorkers را بررسی کنید.
نصب htop
AlmaLinux و Rocky Linux و RHEL نسخه ۸ و ۹
بسته htop در مخزن پایه این توزیعها نیست و از مخزن EPEL میآید. ابتدا EPEL را اضافه کنید و بعد htop را نصب کنید:
dnf install epel-release dnf install htop
روی AlmaLinux و Rocky Linux بسته epel-release در مخزن extras خودِ توزیع هست و همین دستور کافی است. روی RHEL اشتراکی این بسته در مخازن رسمی ردهت نیست و باید بسته EPEL را از سایت پروژه فدورا نصب کنید؛ آدرس دقیق و نسخه متناسب با سیستمعاملتان را از صفحه رسمی EPEL بگیرید.
اگر با خود پکیجمنیجر آشنا نیستید، آموزش کار با yum دستورهای پایه آن را مرور کرده است؛ dnf جانشین yum است و همان زیرفرمانها را میپذیرد، ضمن اینکه روی این توزیعها yum هنوز بهعنوان یک لینک به dnf کار میکند.
CentOS 7
روش نصب همان است، فقط با yum:
yum install epel-release yum install htop
اما یک هشدار مهم: دوره پشتیبانی CentOS 7 در تابستان ۲۰۲۴ تمام شد و مخازن آن از آینههای اصلی برداشته و به vault.centos.org منتقل شدند. روی یک سرور CentOS 7 دستنخورده، دو دستور بالا امروز با خطای ۴۰۴ یا «Could not resolve host: mirrorlist.centos.org» شکست میخورند و تا وقتی فایلهای مخزن در /etc/yum.repos.d/ را به آدرسهای آرشیو تغییر ندهید کار نمیکنند (بستههای EPEL 7 هم به آرشیو پروژه فدورا منتقل شدهاند). چون این سیستمعامل دیگر هیچ بهروزرسانی امنیتی نمیگیرد، بهجای وصله کردن مخازن، مهاجرت به AlmaLinux یا Rocky Linux را در برنامه بگذارید.
Debian و Ubuntu
اینجا htop در مخازن رسمی موجود است و نیازی به مخزن اضافه نیست:
apt update apt install htop
Fedora
dnf install htop
روش قدیمی RPMforge را اجرا نکنید
در آموزشهای قدیمی (از جمله نسخه قبلی همین مطلب) برای نصب htop روی CentOS و RHEL گفته میشد که اول باید مخزن RPMforge/RepoForge را از آدرس packages.sw.be نصب کنید؛ چیزی شبیه این:
## هشدار: این دستورها را اجرا نکنید. کار نمیکنند و فقط برای شناسایی روش منسوخ آورده شدهاند ## wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm ## rpm -ihv rpmforge-release*.rf.x86_64.rpm
پروژه RepoForge سالهاست متوقف شده و این آدرسها دیگر در دسترس نیستند، ضمن اینکه بستههای آن برای CentOS و RHEL نسخه ۵ و ۶ (هر دو معماری ۳۲ و ۶۴ بیتی) ساخته شده بودند که همه از رده خارجاند. اگر جایی به این دستورها برخوردید اجرایشان نکنید و بهجای آن از EPEL استفاده کنید. بهطور کلی هم اضافه کردن مخزنهای شخص ثالث و رهاشده به یک سرور پروداکشن ریسک امنیتی دارد: دامنهای که صاحبش آن را رها کرده میتواند دست دیگری بیفتد و بستههای آلوده روی سرور شما نصب شود. مخازن را محدود به منابع معتبر و فعال مثل EPEL نگه دارید.
بعد از نصب، کافی است دستور زیر را بزنید:
htop
برای خروج، کلید F10 یا q را بزنید.
خروجی htop از سه بخش تشکیل شده است
- هدر (بالای صفحه): نوارهای مصرف هر هسته پردازنده، نوار حافظه و Swap، و در سمت راست معمولا Tasks (تعداد پردازشها و ریسهها)، Load average و Uptime سرور. اگر در همین خروجی مصرف swap بالا مانده بود، پاکسازی Swap Cache در سرور لینوکس راه خالی کردن آن را نشان میدهد.
- فهرست پردازشهای در حال اجرا، که بهصورت پیشفرض بر اساس مصرف CPU مرتب شده است.
- فوتر (پایین صفحه): نوار کلیدهای F1 تا F10 با برچسبهای Help، Setup، Search، Filter، Tree، SortBy، دو کلید Nice، Kill و Quit (کلیدهای F7 و F8 هر دو مربوط به nice هستند).
دو نکته که خواندن هدر را عوض میکند: اول اینکه سه عدد Load average مربوط به میانگین یک، پنج و پانزده دقیقه گذشته است و باید آن را با تعداد هستههای سرور مقایسه کنید؛ لود ۴ روی یک سرور چهارهستهای یعنی پردازنده دقیقا پر است، نه اینکه فاجعه شده باشد. دوم اینکه نوار حافظه، مقدار واقعا مصرفشده را از buffer و cache جدا نشان میدهد؛ cache را کرنل هر وقت لازم شود آزاد میکند، پس یک نوار حافظه «پر» بهتنهایی نشانه کمبود رم نیست. با فشردن F1 راهنمای htop باز میشود و معنی هر رنگ را همانجا فهرست میکند.
ستونهای فهرست پردازشها یعنی چه
PIDشناسه پردازش وUSERکاربر مالک آن.PRIوNIاولویت پردازش.NIهمان مقدار nice است و بین منفی ۲۰ تا مثبت ۱۹ تغییر میکند؛ عدد کمتر یعنی اولویت بالاتر.VIRTکل فضای آدرس مجازی. این عدد معمولا گمراهکننده است و بزرگ بودنش بهتنهایی مشکلی را نشان نمیدهد.RESحافظه فیزیکی واقعی که پردازش گرفته است. برای پیدا کردن مقصر پر شدن رم، همین ستون ملاک است نه VIRT.SHRبخشی از حافظه که با پردازشهای دیگر مشترک است (مثل کتابخانههای اشتراکی).Sوضعیت پردازش:Rدر حال اجرا،Sدر خواب،Dخواب بدون وقفه (تقریبا همیشه منتظر I/O دیسک)،Zزامبی وTمتوقفشده. اگر چند پردازش همزمان در وضعیتDگیر کردهاند، گلوگاه سرور احتمالا دیسک است نه پردازنده.CPU%وMEM%درصد مصرف. یک پردازش چندریسهای میتواند بیش از ۱۰۰ درصد نشان دهد، چون هر هسته ۱۰۰ درصد حساب میشود.TIME+مجموع زمان پردازندهای که از ابتدای اجرا مصرف کرده وCommandخط فرمان کامل پردازش.
تنظیمات htop با کلید F2
برای ورود به تنظیمات کلید F2 یا S را فشار دهید. در سمت چپ چند بخش میبینید: Meters، Display options، Colors و Columns. در نسخههای ۳ به بعد یک بخش Header Layout هم اضافه شده که با آن میتوانید هدر را بهجای دو ستون پیشفرض، به تعداد ستون دلخواه (بسته به نسخه، از یک تا چهار ستون با نسبتهای مختلف) تقسیم کنید. روی هرکدام که بروید، تنظیمات مربوط به آن بخش نمایش داده میشود.
در قسمت Meters میتوانید هدر صفحه را به دلخواه بچینید. سه ستون اینجا وجود دارد: Left Column، Right Column و Available Meters. دو ستون اول نشان میدهند چه چیزی الان در سمت چپ و راست هدر است و Available Meters فهرست ابزارهای در دسترس است. یک مورد را انتخاب کنید و با Add L یا Add R آن را به ستون چپ یا راست اضافه کنید. با کلید Space هم میتوانید شکل نمایش هر متر را بین نوار، متن، LED و گراف عوض کنید.
در قسمت Display options تنظیمات مربوط به فهرست پردازشها را میبینید. مثلا اگر Tree view را فعال کنید و تنظیمات را با F10 یا کلیک روی Done ذخیره کنید، پردازشها بهصورت درختی و بر اساس رابطه پدر و فرزند نمایش داده میشوند؛ این نما برای فهمیدن اینکه کدام سرویس این همه پردازه فرزند ساخته بسیار مفید است. دو گزینه دیگر که روی سرورهای شلوغ خیلی کمک میکنند «Hide kernel threads» و «Hide userland process threads» هستند؛ با فعال کردنشان فهرست بسیار تمیزتر میشود.
در قسمت Colors میتوانید پوسته رنگی htop را عوض کنید و در قسمت Columns ستونهای دلخواه را اضافه یا حذف کنید؛ برای اضافه کردن، ستون را از فهرست Available Columns انتخاب کرده و F5 را بزنید یا روی Add کلیک کنید. همه این تنظیمات در فایل ~/.config/htop/htoprc ذخیره میشود؛ دقت کنید که این فایل برای هر کاربر جداست، پس تنظیماتی که با کاربر عادی ذخیره کردهاید وقتی htop را با root اجرا کنید اعمال نمیشود.
کلیدهای پرکاربرد
در فوتر، کلیدها بسته به پردازش انتخابشده و صفحهای که در آن هستید عملکردشان تغییر میکند. تقریبا هر کلید F یک معادل حرفی هم دارد که وقتی ترمینال کلیدهای F را به برنامه پاس نمیدهد (مثلا در بعضی کلاینتهای SSH) به کار میآید:
- F3 یا
/جستوجو در فهرست و پریدن روی اولین پردازش منطبق. - F4 یا
فیلتر؛ فقط پردازشهای منطبق نمایش داده میشوند. برای برداشتن فیلتر دوباره F4 و سپس Esc. - F5 یا
tتغییر بین نمای عادی و نمای درختی. - F6 یا
>انتخاب ستونی که فهرست بر اساس آن مرتب میشود؛ برای پیدا کردن پرمصرفترین پردازش از نظر رم، رویPERCENT_MEMمرتب کنید. - F7 و F8 کم و زیاد کردن مقدار nice پردازش. کم کردن nice (یعنی بالا بردن اولویت) فقط با دسترسی root ممکن است.
- F9 یا
kارسال سیگنال به پردازش. فهرست سیگنالها باز میشود و پیشفرض رویSIGTERMاست؛ اول همین را امتحان کنید و فقط اگر پردازش پاسخ نداد سراغSIGKILLبروید. - Space علامتگذاری چند پردازش؛ بعد از آن F9 روی همه موارد علامتخورده اعمال میشود.
Uهمه علامتها را برمیدارد. - u فیلتر بر اساس کاربر، H نمایش/پنهان کردن ریسههای کاربر و K نمایش/پنهان کردن ریسههای کرنل.
- F10 یا
qخروج.
دو هشدار قبل از استفاده از F9 روی سرور زنده: اول اینکه پیش از فرستادن سیگنال، ستون Command را کامل بخوانید و مطمئن شوید پردازش درست را انتخاب کردهاید؛ روی فهرست علامتخورده با Space این اشتباه راحتتر رخ میدهد چون سیگنال یکجا روی همه اعمال میشود. دوم اینکه سراغ پردازشهای پایه سیستم نروید: کشتن PID 1 (یعنی systemd/init) یا پردازههای کرنل، و همچنین کشتن sshd اصلی، میتواند سرور را ناپایدار کند یا دسترسی SSH شما را قطع کند. سرویسها را با systemctl restart ریاستارت کنید، نه با kill کردن دستی.
یک نکته دسترسی: اگر htop را با کاربر عادی اجرا کنید، فقط پردازشهای خودتان را میتوانید kill کنید یا اولویتشان را عوض کنید. برای مدیریت کل سرور باید با root وارد شوید.
اجرای htop با آپشنهای خط فرمان
گاهی بهجای گشتن در فهرست، بهتر است از همان اول خروجی را محدود کنید:
htop -u www-data htop -p 1234,5678 htop -t htop -s PERCENT_MEM htop -d 30
به ترتیب: فقط پردازشهای یک کاربر، فقط چند PID مشخص، شروع در نمای درختی، مرتبسازی بر اساس درصد حافظه، و فاصله بهروزرسانی. عدد -d بر حسب دهم ثانیه است، پس -d 30 یعنی هر ۳ ثانیه یک بار؛ روی سرورهای پرمشغله زیاد کردن این عدد بار اضافی htop را کم میکند.
وقتی به عدد و تاریخچه نیاز دارید: بسته sysstat
htop یک نمای زنده است؛ اگر ترمینال را ببندید چیزی باقی نمیماند و اگر افت کارایی نیمهشب اتفاق افتاده باشد، htop کمکی نمیکند. برای گرفتن خروجی عددی و نگه داشتن تاریخچه، بسته sysstat ابزار درست است. این بسته دستورهای sar، mpstat، iostat و pidstat را نصب میکند.
نصب روی خانواده Red Hat:
dnf install sysstat
روی نسخههای قدیمیتر همان yum install sysstat و روی Debian و Ubuntu:
apt install sysstat
یک نکته که معمولا جا میافتد و باعث میشود فکر کنید ابزار خراب است: بعد از نصب، جمعآوری داده بهطور خودکار روشن نیست. اگر بلافاصله sar بزنید با پیامی مثل «Cannot open /var/log/sa/… : No such file or directory» روبهرو میشوید، چون هنوز هیچ دادهای ثبت نشده. روی خانواده Red Hat سرویس را فعال کنید و مطمئن شوید تایمرهای جمعآوری فعالاند:
systemctl enable --now sysstat systemctl list-timers | grep sysstat
روی Debian و Ubuntu علاوه بر فعال کردن سرویس، باید فایل /etc/default/sysstat را ویرایش کنید و مقدار زیر را از false به true تغییر دهید:
ENABLED="true"
سپس سرویس را فعال و ریاستارت کنید:
systemctl enable sysstat systemctl restart sysstat
از این به بعد آمار بهصورت دورهای در /var/log/sa/ (خانواده Red Hat) یا /var/log/sysstat/ (دبیان و اوبونتو) ذخیره میشود و میتوانید روزهای گذشته را هم بررسی کنید.
دستورهای پرکاربرد sysstat
mpstat mpstat -P ALL mpstat -P ALL 2 5 sar sar -u 2 5 sar -r sar -q sar -d sar -n DEV iostat iostat -x 2 5
معنی هرکدام:
mpstatآمار پردازنده؛ با-P ALLبهجای میانگین کل، هر هسته را جدا نشان میدهد. اگر یک هسته صد درصد و بقیه بیکارند، با یک برنامه تکریسهای طرف هستید.mpstat -P ALL 2 5یعنی پنج نمونه با فاصله دو ثانیه. توجه کنید که اولین خروجی، میانگین از زمان بوت سرور است نه وضعیت لحظهای؛ برای قضاوت به سطرهای بعدی نگاه کنید. ستون%stealروی سرورهای مجازی مهم است: عدد قابلتوجه در آن یعنی هایپروایزر پردازنده را از ماشین شما دریغ میکند، نه اینکه سرویسهای خودتان سنگین باشند.sarبدون آپشن، آمار CPU امروز را از فایلهای ذخیرهشده نشان میدهد وsar -u 2 5پنج نمونه زنده با فاصله دو ثانیه میگیرد.sar -rحافظه،sar -qلود و صف اجرا،sar -dدیسک وsar -n DEVترافیک کارت شبکه.- برای مرور یک روز گذشته از سوییچ
-fاستفاده کنید؛ مثلاsar -u -f /var/log/sa/sa15آمار CPU روز پانزدهم ماه را نشان میدهد. iostatوضعیت دیسکها وiostat -x 2 5نمای کاملتر با ستونهایawait(زمان انتظار درخواستها) و%util(درصد مشغول بودن دیسک). اینجا هم اولین خروجی میانگین از زمان بوت است.
گرفتن سریع ده پردازش پرمصرف
وقتی فقط میخواهید در یک خط ببینید چه چیزی پردازنده را گرفته، این دستور کافی است و به هیچ بسته اضافهای نیاز ندارد:
ps -eo pcpu,pid,user,args --sort=-pcpu | head -11
(عدد 11 به این دلیل است که سطر اول خروجی ps عنوان ستونهاست و خودِ پردازش نیست.)
در آموزشهای قدیمی این دستور معمولا به شکل ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10 نوشته شده است. آن نسخه یک اشکال دارد: sort بدون سوییچ -n مرتبسازی را حرفبهحرف انجام میدهد، بنابراین 9.0 را بالاتر از 10.0 میگذارد و ممکن است دقیقا همان پردازش پرمصرفی که دنبالش هستید از فهرست دهتایی بیرون بماند. اگر میخواهید حتما با sort کار کنید، حداقل آن را به شکل زیر بنویسید:
ps -eo pcpu,pid,user,args | sort -k1 -nr | head -10
معادل آن برای حافظه:
ps -eo pmem,rss,pid,user,args --sort=-rss | head -11
چیزهایی که htop نشان نمیدهد
htop مصرف پردازنده و حافظه را نشان میدهد ولی ترافیک شبکه را نمیشمارد؛ برای آن نصب Vnstat در Directadmin و Cpanel و برای نگهداری تاریخچه بلندمدت، نمودار و هشدار خودکار نصب و کانفیگ Zabbix ابزار مناسبتری هستند. یک تقسیم کار ساده این است: htop برای عیبیابی همین لحظه، sysstat برای دیدن اینکه دیشب چه گذشت، و Zabbix یا Vnstat برای پایش مداوم و بلندمدت.

