منبع اصلی نوشتار زیر در این لینک قرار دارد

دستور top

دستور top برای مانیتورینگ فرایند ها و منابع سیستمی مانند پردازنده و حافظه اصلی بصورت Real Time استفاده می شود. بر خلاف دستور ps، دستور top نمایشی لحظه ای از وضعیت سیستم و فرایند ها و منابع مورد استفاده آن فرایند ها نشان می دهد.top در دو حالت interactive و batch استفاده می شود. در حالت تعاملی وضعیتی لحظه ای از فرایند ها و وضعیت آنها نشان داده می شود و با استفاده از کلید هایی می توانید بر روی دستور کنترل داشته باشید. دراین حالت در بازه زمانی مشخصی وضعیت سیستم و فرایند ها و منابع بروزرسانی می شود. ولی در حالت batch کنترل بر روی دستور را از طریق سوئیچ هایی از خط فرمان، وجود دارد. سدتور top زمانی که سیستم شما کند شده است برای بررسی لحظها ای سیستم بسیار مناسب است تا بتوانید تصمیم مناسب را برای رفع مشکلات، اتخاذ کنید.برای اجرای دستور top بصورت interactive تنها کافیست دستور را اجرا کنید.

top

خروجی از سه بخش تشکیل شده است :

ناحیه اول (خط اول) خروجی مشابه دستور uptime دارد که زمان جاری سیستم، مد زمانی که سیستم در حال استفاده است (مدت زمانی که سیستم روشن شده است)، تعداد کاربران آنلاین در سیستم که می توانید از دستور های w و who وضعیت آنها را مشاهده کنید و در نهایت Load Average که اولین عدد وضعیت سیستم را در یک دقیقه گذشته، دومین عدد وضعیت سیستم را در پنج دقیقه گذشته و سومین عدد وضعیت سیستم را در پانزده دقیقه گذشته نشان می دهد.

ناحیه دوم (خطوط دو تا پنج) وضعیتی از پردازنده و تعداد فرایند های درون سیستم و همچنین وضعیتی از حافظه اصلی و swap را نشان می دهد.خط دوم به ترتیب تعداد کل فرایند های موجود در سیستم، چه تعداد فرایند در حال اجرا شدن (Running) و چه تعداد فرایند در حالت Sleep، چه تعداد فریاند متوقف شده اند و چه تداد فرایند بصورت Zombie هستند. وقتی فرایندی از روی خودش یک فریاند جدید ایجاد می کند یک زابطه والد-فرزندی بوجود می اید، مانند زمانی که می خواهیم اسکریپتی را در پوسته bash اجرا کنیم، در این حالت پوسته والد یک کپی از خودش ایجاد می کند و اجرای اسکریپت را به فرزندش واگذار می کند. یا زمانی که درخواست وب بر روی پروتکل http به سرو وب می اید. فرایند httpd به محض دریافت درخواست صفحات وب، یک نمونه از خودش را ایجاد می کند و اجرای درخواست را به فرزندش واگذار می کند و خود فرایند والد به حالت Sleep می رود. (مانند فرایند init که اولین فرایند و پدر جد تمامی فرایند هاست و پس از ایجاد فرزندانش و واگذاری مسوئلیت به آنها، به حالت Sleep می رود (نشان داده شده با S) و زمانی دوباره ازخواب بیدار می شود که بطور مثال نیاز به ایجاد یک نمونه (فرزند) جدید از خودش باشد. وضعیت متوقف شده یعنی اگر فرایندی در حال اجرا شدن است با استفاده از کلید های Ctrl+Z اجرای آنرا متوقف کنیم. بطور مثال دستور find / را در ترمینال دیگری اجرا کنید و در حین اجرای آن کلید های Ctrl+Z را کلیک کنید، خواهید دید که مقدار stopped در خروجی دستور top (خط دوم) یکی بیشتر می شود (یا در شکل بالا مقدارش از صفر به یک تغییر می کند). دستور ها به دوصرت foreground و background اجرا می شوند. در حالت foreground به محض اجرای دستور و تا زمان پایان اجرای دستور، دیگر خط اعلان (prompt) را نداریم و باید صبر کنیم تا زمانی که دستور پایان یابد. اما در حالت foreground دستور را که اجرا کردیم آن در پس به اجرایش ادامه می دهد و ما هم خط اعلان را داریم و همزمان کارمان را انجام می دهیم. پس در حالت معمول دستور بصورت foreground اجرا می شود و برای اجرای آن در حالت background اول باید اجرای آنرا با استفاده از کلید های Ctrl+Z موقف کنیم و سپس از دستور bg استفاده کنیم. به محض متوقف کردن دستور یک job با یک عدد به صورت زیر تولید می شود. اگر دستور jobs را اجرا کنید فهرستی از فرایند های متوقف شده را خواهید دید. برای اجرای دستور متوقف شده با استفاده از شماره job مربوط به آن ذو راهکار دارید : یکی استفاده از دستور fg که دستور را دوباره به صورت foreground اجرا می کند و خط اعلان را دوباره از شما می گیرد و یکی هم بصورت background که دستور را اجرا می کند ولی خط اعلان را از شما نمی گیرد.

fg jobs_number

bg job_number

گر در شکل بالا که یک فرایند متوقف شده داریم و می توانیم نتیجه بگیریم که در خروجی دستور jobs تنها یک خط وجود دارد، با اجرای هر یک از دستور های زیر دوباره عدد مربوط به stopped صفر خواهد شد.

fg 1

bg 1

Zombie گونه ای از فرایند ها هستند که

سومین خط شامل اطلاعاتی از پردازنده می باشد. بخش از فرایند ها در مُد کاربری یا User Mode و بخشی هم در مُد سیستمی یا System Mode اجرا می شوند. مانند تمامی دستور هایی که کاربر اجرا می کند که در مُد کاربر اجرا می شوند. User Mode دخالتی در مُد سیستمی ندارد و تنها از طریق فراخوانی های سیستمی اسن که درخواست هایش را به مُد سیستم می فرستد.

چهارمین و پنجمین خطوط اطلاعاتی درباره وضعیت حافظه اصلی و حافظه swap را نشان می دهند. برای اطلاع بیشتر می توانید دستور free را مطالعه کنید.

سومین ناحیه اطلاعاتی کلی درباره هر فرایند می دهد. می توایند با استفاده از دستور ps خروجی هایی مشابه این ناحیه بدست بیاورید. اما توجه داشته باشید که خروجی دستور ps بر خلاف top لحظه ای نیست. برخی از مهمترین ستون ها در خروجی دستور :

  • PID : شناسه فرایند
  • PPID : شناسه والد فرایند
  • RUSER : مالک فریاند (کسی که فرایند را اجرا کرده است. مخفف Real User)
  • UID : شناسه مالک فرایند
  • USER : نام کاربر (همان Real User)
  • GROUP : گروهی اصلی که مالک فریاند عضو آن است
  • TTY : ترمینالی که کاربر فرایند(دستور را از آن اجرا کرده است)
  • PR : اولویت فرایند.
  • NI : مقدار عددی nice فرایند.
  • SMP یا P : آخرین میزان مصرفی پرازنده توسط فرایند. این عدد مکررا در حال تغییر است.
  • CPU% : میزان مصرفی فرایند از پردازنده، از زمانی که آغاز به اجرا شدن کرده باشد.
  • MEM% : میزان مصرفی فرایند از حافظه اصلی، از زمانی که آغاز به اجرا شدن کرده باشد.
  • TIME : میزان کل زمان مصرفی فرایند از پردازنده، از زمانی که آغاز به اجرا شدن کرده باشد.
  • S : مخفف Status که بیان کننده وضعیت فریاند می باشد. S یعنی Sleep، R یعنی (Running) در حال اجرا شدن
  • COMMAND : نام فرایند یا دستور
  • VIRT : میزان مصرفی فرایند از حافظه مجازی که شامل کد ها، داده ها و کتابخانه های اشتراکی و همچنن صفحات swapped out شده. (یعنی صفحاتی که از حاظه اصلی به حافظه swap منتقل شده اند).
  • SWAP : این ستون معرف بخشی از حافظه مجازی است.
  • RES : مخفف Resident size و بخشی از حافظه اصلی است.
  • بطور کلی VIRT=SWAP+RES و RES=CODE+DATA

برای اطلاع بیشتر از دستور man top استفاده کنید.

وقتی دستور top در حال اجرا شدن است، کلید h را فشار دهید تا راهنمای دستور را بخوانید و برای بازگشت از کلید Esc استفاده کنید. پنج خط اول خروجی را Header گویند. برای نمایش/عدم نمایش خط اول کلید l و برای نمایش/ عدم نمایش خطوط دوم و سوم کلید t و برای نمایش/عدم نمایش خطوط چهارم و پنجم کلید m را فشار دهید.

چگوه تنها اطلاعات یک فرایند خاص را ببینیم

در حین اجرای دستور کلید p را فشار دهید و در جلوی پیغام، عدد شناسه فرایند را وارد کنید. یا اینکه می توانید نام فرایند را وارد کنید.

چگونه اطلاعات یک کاربر خاص (مانند mysql) را ببینیم

در حین اجرای دستور کلید u را فشار دهید و در جلوی پیغام، نام کاربری را وارد کنید. همچنین اگر می خواهید دوباره اطلاعات تمامی کاربران را ببینید، کلید u را فشار دهید و تنها Enter را بزنید.یا اینکه می توانید از فرمت زیر استفاده کنید.

top -u USERNAME

چگونه مسیر کلی فرایند (دستور) را در زیر ستون COMMAND ببینیم.

در حین اجرای دستور کلید c را فشار دهید.

چگونه تاخیر زمانی در نمایش وضعیت سیستم را تغییر دهیم

بطور پیش فرض اطلاعات دستور top هر سه ثانیه یکبار بروز می شود. برای تغییر این زمان در حین اجرای دستور کاید d را فشار دهید و سپس در جلوی پیام نشان داده شده، زمان برحسب ثانیه را وارد کنید.

چگونه فرایندی دلخواه را kill کنیم.

در حین اجرای دستور کلید k را فشار دهید و سپس شناسه فرایند را وارد کنید. پس از Enter دوباره پیامی نشان داده می شود که از شما می خواهد که عدد سگنال را وارد کنید. بصورت پیشفرض سیگنال 15 دز نظر گرفته شده است.

چگونه اجرای دستور را پس از n ثانیه تمام شود

با استفاده از سوئیچ n- و به فرمت زیر.

top -n SEC

بطور مثال اولین دستور زیر اجرای دستور را پس از 10 ثانیه تمام می کند و دومین دستور زیر فقط کاربری به نام mysql را مانیتورینگ می کند و اجرای دستور را پس از 10 ثانیه تمام می کند.

top -n 10 -u mysql

با استفاده از سوئیج b- حالت batch را استفاده می کنیم. حالت batch زمانی مفید است که بخواهیم خروجی دستور را به یک فایل یا دستور دیگر بدهیم. البته زمانی که در حالت interactive هستید با فشردن کلید های Ctrl+W (حرف W بزرگ)، اطلاعات را در یک فایل به نام toprc. در زیر دایرکتوری خانگی ذخیره می کند. برای مشاهده آن از دستور زیر استفاده کنید.

less ~/.toprc

چگونه اطلاعات یک کاربر مانند mysql را در یک فایل ذخیره کنیم.

top -b -u USERNAME > filename

چگونه اطلاعات یک کاربر را پس از اجرای 10 ثانیه در یک فایل ذخیره کنیم.

top -b -n 10 -u USERNAME > filename

چگونه اطلاعات یک یا چند فرایند (یا توسط شناسه آن یا توسط نام آن فرایند) به یک فایل دیگر ببریم.

top -b -p PID > filename

top -b -p PROCESS_NAME > filename

چگونه اطلاعات را دستور top به عنوان ورودی به دستور grep بدهیم و تنها فرایند mysqld را جدا کنیم.

top -b | grep mysqld

چگونه اطلاعات را از دستور top برای 10 بار به دستور grep بدهیم و سپس توسط grep فقط فرایند mysqld را جدا کنیم.

top -b -n 10 | grep mysqld



برچسب ها : , , , , , , , , , , , , ,