فرصت مطالعه ندارید؟ چکیده این مطلب را همینجا گوش دهید:
مدیریت و نظارت بر منابع سختافزاری سیستم مانند پردازنده مرکزی (CPU) و حافظه رم (RAM) یکی از وظایف حیاتی برای توسعهدهندگان، مدیران سیستم و حتی کاربران حرفهای است. هنگامی که سیستم ناگهان کند میشود یا فن دستگاه شروع به کارکردن با حداکثر سرعت میکند، پیدا کردن مقصر اصلی بدون داشتن ابزار مناسب کار دشواری است. نرمافزارهای گرافیکی مدیریت وظایف (Task Manager) معمولاً سنگین هستند و قابلیتهای سفارشیسازی محدودی دارند. در این مقاله قصد داریم یک ابزار خط فرمان (CLI) سبک، مینیمال و کاملاً کاربردی با زبان برنامهنویسی پایتون بسازیم که به صورت لحظهای وضعیت سختافزار را بررسی کرده و در صورت عبور مصرف از حد مجاز، به صورت خودکار هشدارها را در فایل متنی ثبت (Log) کند.
| زبان برنامهنویسی | پایتون ۳.۶ به بالا |
|---|---|
| کتابخانه اصلی | psutil |
| نوع رابط کاربری | خط فرمان (CLI / Terminal) |
| سیستمعاملهای سازگار | ویندوز، لینوکس، مکاواس |
| هزینه | ۱۰۰٪ رایگان و متنباز |
| وضعیت دسترسی ایران | بدون محدودیت |
مسئله و ضرورت داشتن ابزار مانیتورینگ سفارشی
بسیاری از اوقات پردازشهای پسزمینه پنهانی، اسکریپتهای رهاشده یا ابزارهای توسعه، بخش عمدهای از منابع سیستم را اشغال میکنند. استفاده از ابزارهای پیشفرض سیستمعامل همیشه انعطافپذیر نیست و امکان ذخیرهسازی خودکار دادههای مصرفی در طول زمان برای تحلیلهای بعدی را به راحتی فراهم نمیکند. با نوشتن یک ابزار خط فرمان اختصاصی، شما کنترل کاملی بر روی نحوه نمایش اطلاعات، فرکانس نمونهبرداری و آستانههای بحرانی دارید. علاوه بر این، بررسی کدهای سیستمی شباهت زیادی به مهندسی دقیق ابزارهایی دارد که در حوزههای پیشرفته مانند ساخت صندوقهای سرمایهگذاری هوشمند یا تحلیلهای دقیق دادهها به کار میروند؛ مقالاتی نظیر ساخت صندوق سرمایهگذاری هوشمند با AutoHedge؛ ابزار متنباز نیز اهمیت اتوماسیون و نظارت هوشمند را به خوبی نشان میدهند.
نصب کتابخانهها و پیشنیازها
برای دسترسی به اطلاعات سختافزاری سیستم در پایتون، به کتابخانه قدرتمند و استاندارد psutil نیاز داریم. این کتابخانه به صورت کراسپلتفرم اطلاعات مربوط به پردازنده، حافظه، دیسک و شبکه را در اختیار برنامهنویس قرار میدهد. برای نصب این پکیج، دستور زیر را در ترمینال یا خط فرمان سیستم خود اجرا کنید:
pip install psutil
پس از اجرای دستور فوق، پکیج نصب شده و آماده استفاده در کدهای پایتون خواهد بود. هیچ کتابخانه خارجی دیگری برای این پروژه نیاز نداریم و از ماژولهای داخلی پایتون مانند time و datetime برای مدیریت زمان و تاخیرها استفاده خواهیم کرد.
کد کامل اسکریپت مانیتورینگ سیستم
کد زیر یک اسکریپت واحد، کامل و اجرایی است. این اسکریپت به صورت مداوم وضعیت CPU و RAM را میخواند، رابط کاربری متنی زیبایی در ترمینال ترسیم میکند، پردازشهای پرمصرف را شناسایی کرده و اگر میزان مصرف از حد آستانه تعیینشده فراتر رود، هشدار مربوطه را در یک فایل لاگ ذخیره میکند.
import time
from datetime import datetime
import psutil
# تنظیمات آستانه هشدار (بر حسب درصد)
CPU_THRESHOLD = 85.0
RAM_THRESHOLD = 85.0
LOG_FILE = "system_alert_log.txt"
def log_alert(message):
"""ثبت پیامهای هشدار به همراه تاریخ و ساعت دقیق در فایل لاگ"""
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}] هشدار: {message}\n"
try:
with open(LOG_FILE, "a", encoding="utf-8") as f:
f.write(log_entry)
except Exception as e:
print(f"خطا در نوشتن فایل لاگ: {e}")
def get_top_process():
"""پیدا کردن پردازشی که بیشترین مصرف CPU را دارد"""
top_proc = None
max_cpu = 0.0
for proc in psutil.process_iter(attrs=["pid", "name", "cpu_percent"]):
try:
cpu = proc.info["cpu_percent"]
if cpu is not None and cpu > max_cpu:
max_cpu = cpu
top_proc = proc.info
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return top_proc
def main():
print("=== ابزار خط فرمان مانیتورینگ سیستم آغاز به کار کرد ===")
print(f"آستانه هشدار پردازنده: {CPU_THRESHOLD}% | آستانه هشدار رم: {RAM_THRESHOLD}%")
print("برای خروج از برنامه، کلیدهای Ctrl+C را فشار دهید.\n")
# یک بار فراخوانی اولیه cpu_percent برای جلوگیری از مقدار صفر در شروع
psutil.cpu_percent(interval=None)
time.sleep(1)
try:
while True:
# دریافت وضعیت پردازنده و رم
cpu_usage = psutil.cpu_percent(interval=None)
ram_info = psutil.virtual_memory()
ram_usage = ram_info.percent
# پیدا کردن پردازش پرمصرف
top_p = get_top_process()
# پاکسازی خط قبلی ترمینال و چاپ وضعیت جدید (بازنشانی پویا)
print(
f"\rمصرف پردازنده: {cpu_usage:5.1f}% | مصرف رم: {ram_usage:5.1f}%",
end="",
flush=True,
)
# بررسی شرایط هشدار برای پردازنده
if cpu_usage >= CPU_THRESHOLD:
proc_name = (
top_p["name"] if top_p else "نامشخص (PID: {top_p['pid']})"
)
msg = f"مصرف پردازنده بحرانی شد: {cpu_usage}% | پردازش سنگین: {proc_name}"
log_alert(msg)
# بررسی شرایط هشدار برای رم
if ram_usage >= RAM_THRESHOLD:
msg = f"مصرف حافظه رم بحرانی شد: {ram_usage}% (فضای آزاد: {ram_info.available // (1024 * 1024)} مگابایت)"
log_alert(msg)
time.sleep(2)
except KeyboardInterrupt:
print("\n\nبرنامه متوقف شد. از همراهی شما سپاسگزاریم.")
if __name__ == "__main__":
main()
توضیح بخشبهبخش کد
این اسکریپت با دقت و با رعایت اصول بهینهسازی منابع نوشته شده است. در ادامه بخشهای کلیدی آن را بررسی میکنیم:
- تنظیمات اولیه (Constants): متغیرهای
CPU_THRESHOLDوRAM_THRESHOLDمشخص میکنند که از چه درصدی به بعد، سیستم وارد وضعیت بحرانی شده و نیاز به ثبت رکورد در فایل متنی دارد. - تابع
log_alert: وظیفه دارد هر زمان که مصرف منابع از حد مجاز گذشت، یک خط متن شامل تاریخ، ساعت دقیق و نوع خطا را به انتهای فایلsystem_alert_log.txtاضافه کند تا بعداً بتوانید علت کندی سیستم را بررسی کنید. - تابع
get_top_process: با استفاده از روش پویایpsutil.process_iterتمام فرآیندهای در حال اجرای سیستم را پیمایش میکند تا پردازشی که بیشترین بار پردازنده را به دوش میکشد شناسایی کند. مدیریت استثناها کمک میکند اگر فرآیندی در همان لحظه بسته شد، برنامه متوقف نشود. - ح حلقه اصلی و چاپ پویا: با استفاده از کاراکتر کنترلی
\r(Carriage Return) و پارامترend=""در دستورprint، به جای رفتن به خط جدید، اطلاعات جدید روی خط قبلی بازنویسی میشود. این کار باعث ایجاد یک ظاهر پویای ترمینالی شبیه به ابزارهای حرفهای لینوکس میشود.
نحوه اجرا و تست اسکریپت
برای اجرای موفقیتآمیز این کد، مراحل زیر را دنبال کنید:
- یک فایل متنی جدید به نام
system_monitor.pyدر سیستم خود ایجاد کنید. - کد ارائهشده در بخش قبلی را به طور کامل کپی کرده و درون این فایل جایگذاری (Paste) کنید و فایل را ذخیره کنید.
- ترمینال (در ویندوز: CMD یا PowerShell و در لینوکس/مک: Terminal) را باز کنید و به پوشهای که فایل را در آن ذخیره کردهاید بروید.
- دستور زیر را برای اجرای اسکریپت وارد کنید:
python system_monitor.py
پس از اجرا، وضعیت لحظهای مصرف CPU و RAM به صورت زنده در ترمینال نمایش داده میشود. اگر مصرف از ۸۵ درصد عبور کند، فایلی به نام system_alert_log.txt در کنار اسکریپت ایجاد شده و جزئیات هشدار در آن ثبت میشود.
خروجی نمونه
نمونهای از آنچه در محیط ترمینال و فایل لاگ مشاهده خواهید کرد به شرح زیر است:
=== ابزار خط فرمان مانیتورینگ سیستم آغاز به کار کرد ===
آستانه هشدار پردازنده: 85.0% | آستانه هشدار رم: 85.0%
برای خروج از برنامه، کلیدهای Ctrl+C را فشار دهید.
مصرف پردازنده: 24.5% | مصرف رم: 62.1%
و در صورتی که مصرف پردازنده به صورت غیرمجاز بالا برود، محتوای فایل system_alert_log.txt به شکل زیر در خواهد آمد:
[2026-10-18 14:32:10] هشدار: مصرف پردازنده بحرانی شد: 91.2% | پردازش سنگین: chrome.exe
ایدههای توسعه و شخصیسازی
این ابزار پایه را میتوانید به روشهای مختلفی ارتقا دهید تا با نیازهای خاص شما مطابقت پیدا کند:
- ارسال اعلان صوتی یا پیام: میتوانید کتابخانههای صوتی پایتون را اضافه کنید تا در زمان بروز هشدار، صدای بوق کوتاهی پخش شود.
- رابط وب محلی: با استفاده از فریمورکهای سبک مانند Flask، این دادهها را به یک صفحه وب محلی منتقل کنید تا روی مرورگر نمایش داده شوند.
- گزارشگیری روزانه: اسکریپت را طوری تغییر دهید که در پایان روز میانگین مصرف رم و پردازنده را محاسبه کرده و خلاصه عملکرد سیستم را ذخیره کند.
خطاهای رایج و راهحلها
در حین کار با ابزارهای سیستمی ممکن است با چند چالش کوچک روبهرو شوید:
- خطای کمبود دسترسی (Access Denied): در برخی سیستمعاملها، بررسی جزئیات پردازشهای سیستمی دیگر کاربران نیاز به دسترسیهای مدیریتی دارد. برای حل این مشکل، ترمینال خود را با دسترسی Administrator (در ویندوز) یا با دستور
sudo(در لینوکس) اجرا کنید. - صفر بودن مداوم درصد پردازنده در اولین اجرا: کتابخانه
psutilبرای محاسبه دقیق درصد پردازنده نیاز به یک بازه زمانی دارد. وجود دستور اولیهcpu_percent(interval=None)در ابتدای کد این مشکل را به طور کامل حل میکند.
پرسشهای متداول
آیا این اسکریپت خودش منابع زیادی از سیستم را مصرف میکند؟
خیر. به دلیل استفاده از کتابخانه بهینه psutil و داشتن تاخیر زمانی (Sleep) دو ثانیهای، این اسکریپت عملاً کمتر از ۰.۱ درصد از منابع پردازنده را مصرف میکند و کاملاً سبک است.
چگونه میتوانم بازه زمانی بهروزرسانی اطلاعات را تغییر دهم؟
کافی است مقدار ورودی تابع time.sleep(2) در انتهای حلقه اصلی را به عدد دلخواه خود (بر حسب ثانیه) تغییر دهید.
آیا این ابزار روی تمام نسخههای ویندوز و لینوکس کار میکند؟
بله، کتابخانه psutil کاملاً کراسپلتفرم است و روی سیستمعاملهای ویندوز، لینوکس و مکاواس بدون مشکل کار میکند.
جمعبندی
ساخت ابزارهای مانیتورینگ سفارشی با پایتون به شما قدرت میدهد تا بدون اتکا به نرمافزارهای سنگین و حجیم تجاری، کنترلی دقیق، سریع و خودکار بر روی سختافزار سیستم خود داشته باشید. با اجرای اسکریپت معرفیشده در این مقاله، نهتنها مصرف لحظهای پردازنده و رم را زیر نظر خواهید داشت، بلکه با ثبت خودکار لاگها، میتوانید از ریشهیابی مشکلات عملکردی سیستمتان اطمینان حاصل کنید. این ابزار مینیمال را میتوانید به راحتی شخصیسازی کرده و در کارهای روزمره خود به عنوان یک دستیار قابل اعتماد بهره ببرید.




