دسته بندی:

آموزش نصب htop و مانیتورینگ پردازش‌ها و مصرف منابع در لینوکس

آموزش نصب htop و مانیتورینگ پردازش‌ها و مصرف منابع در لینوکس

حدود ۱۲ دقیقه مطالعه

سرور کند شده، لود بالا رفته و نمی‌دانید کدام پردازش منابع را می‌بلعد. دستور top این را نشان می‌دهد، اما خروجی‌اش خشک است و کار کردن با آن سخت. htop همان کار را با یک رابط تعاملی و رنگی انجام می‌دهد: فهرست پردازش‌ها را با موس یا کلیدهای جهت بالا و پایین می‌برید، در آن جست‌وجو و فیلتر می‌کنید، نمای درختی می‌گیرید و از داخل همان صفحه یک پردازش را kill یا اولویت آن را کم و زیاد می‌کنید. بر خلاف چیزی که در بعضی آموزش‌ها نوشته شده، htop یک «اسکریپت» نیست؛ یک برنامه کامپایل‌شده C است که اطلاعاتش را از /proc می‌خواند.

اگر در فهرست پردازش‌ها ده‌ها پردازه httpd دیدید که رم سرور را پر کرده‌اند، ریشه ماجرا معمولا به انتخاب MPM آپاچی برمی‌گردد و اگر آپاچی اصلا بالا نمی‌آید، خطای Invalid command MaxRequestWorkers را بررسی کنید.

خروجی ابزار htop در ترمینال لینوکس و نمایش مصرف پردازنده، حافظه و فهرست پردازش‌ها

نصب 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 از سه بخش تشکیل شده است

  1. هدر (بالای صفحه): نوارهای مصرف هر هسته پردازنده، نوار حافظه و Swap، و در سمت راست معمولا Tasks (تعداد پردازش‌ها و ریسه‌ها)، Load average و Uptime سرور. اگر در همین خروجی مصرف swap بالا مانده بود، پاک‌سازی Swap Cache در سرور لینوکس راه خالی کردن آن را نشان می‌دهد.
  2. فهرست پردازش‌های در حال اجرا، که به‌صورت پیش‌فرض بر اساس مصرف CPU مرتب شده است.
  3. فوتر (پایین صفحه): نوار کلیدهای 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 وارد شوید.

دکمه‌های عملیاتی F1 تا F10 در ابزار htop و کاربرد هر کدام

اجرای 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 برای پایش مداوم و بلندمدت.

آموزش‌های مرتبط