اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

مدیریت و مانیتورینگ فرایند ها – بخش اول (مفاهیم)

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    مدیریت و مانیتورینگ فرایند ها – بخش اول (مفاهیم)

    هر برنامه ای که در یونیکسی ها و لینوکس اجرا می شود، فرایند (Process) می گویند. فرایند ها برای اجرا باید در حافظه Ram قرار بگیرند. وقتی یک فرایند در حافظه Ram قرار می گیرد، به اصطلاح در حالت آماده قرار می گیرد و تنها منبعی که لازم دارد تا اجرا شود، پردازنده است. هر فرایند دارای یک عدد منحصر به فرد و مختص به خود است که PID یا Process ID گفته می شود. از این عدد برای کنترل فرایند توسط ابزار های خط فرمان استفاده می شود.

    هر فرایند دارای یک والد است و والد ها هم دارای یک عدد منحصر به فرد هستند. در خروجی دستور ها این عدد با عبارت PPID یا Parent Process ID نشان داده میشود. اولین فرایندی که در سیستم ایجاد میشود init با PID=1 و PPID=0 است. PPID به این خاطر صفر است که این فرایند والد تمام فرایند هاست و خود والدی ندارد. عمل ایجاد یک فرایند فرزند از فرایند والد در یونیکسی ها و لینوکس توسط فراخوان سیستمی fork که یک تابع به زبان C است انجام می شود. فرض کنید که دستور یک پنجره خط فرمان باز کرده اید با باز کردن یک پنجره خط فرمان یک فرایند به نام bash ایجاد می شود که ایجاد این فرایند توسط فرایند init انجام می شود. پس اگر دستور ps را اجرا کنید می بنید که والد فرایند bash فرایند init است. اگر در خود پنجره خط فرمان دستور bash را اجرا کنید این بار یک فرایند جدید از دستور bash ایجاد می شود یعنی والدی به نام bash با PID=4523 یک فرزند به نام bash با PID=4575 و با PPID=4523 ایجاد می شود.

    پس از ایجاد یک فرایند فرزندف فرایند فرزند منابعش را از والد خود می گیرد و شروع به کار می کند. اگر فرایند والد به هر دلیلی از بین برودف فرایند فرزند هم بصورت خودکار از بین می رود. به عمل از بین بردن یک فرایند در اصطلاح کشتن یا Kill کردن آن فرایند می گویند. اما گونه ای از فرایند ها هستند که حتی پس از از بین رفتن والدشان همچنان در سیستم وجود دارند و منابع سیستم را اشغال کرده اند. در اصطلاح به این نوع فرایند ها Zombi یا بی پدرومادر می گویند.

    همانطور گه گفته شد هر فرایند برای اجرا شدن ابتدا در حافظه Ram قرار می گیرد و سپس با دریافت پردازنده، شروع به کار و اجرا شدن می کند. پس دو مفهوم میزان مصرف حافظه و میزان مصرف پردازنده وجود دارد. اینکه فرایند فعلی چه مقدار از حاضه اصلی (حافظه Ram) را اشغال کرده و اینکه چه مقدار مدت پردازنده را برای اجرا شدن اشغال کرده و از چه زمانی شروع به استفاده از پردازنده کرده است مطرح می شود. هر پردازنده در هر لحظه فقط می تواند یک فرایند را اجرا کند. پس برای بالا بردن راندمان و اجرا شدن چندین فرایند بصورت مکرر از مفهومی به نام زمانبندی استفاده می شود. به این معنی که با استفاده از الگوریتم ها و تکنیک هایی پردازنده مابین فرایند ها سوئیچ میشود.

    مفهوم دیگری که در ارتباط با فرایند ها وجود دارد، اولویت یک فرایند است. دسته ای از الگوریتم های زمانبندی بر اساس اولویت اجرا میشود به این معنی که به هر فرایند بر اساس تصمیماتی به هر فرایند اولویتی داده می شود و پردازند و الگوریتم های زمانبندی بر اساس همین اولویت ها، آن فرایندی که اولویت بیشتری دارد را از حافظه اصلی انتخاب می کند. بطور مثال فرایند های سیستمی مانند کرنل اولویت بیشتری نسبت به فرایند برنامه ای مانند فایرفاکس دارد.

    مطلب دیگر درباره هر فرایندف وضعیت مرتبط با آن فرایند است. گفتیم هر فرایند برای اجرا شده باید در حافظه Ram قرار بگیرد که به این حالت، حالت آماده یا Ready می گویند. هر فرایند زمانی اجرا می شود که پردازنده را داشته باشد که به این حالت، حالت Running می گویند. همچنین امکان دارد فرایند به دلایلی مانند انتظار برای I/O از حالت اجرا خارج شود و به حالت انتظار یا Waiting می گویند و حالت دیگری که وجود دارد حالت Sleep است.

    مفهوم حافظه Swap که یک حافظه مجازی یا Virtual Memory است این است که ظرفیت حافظه اصلی محدود و کم است و به دلیل در خواست های بالا و اینکه پردازنده در هر لحظه می تواند یک فرایند را اجرا کند بسیاری از فرایند ها بی کار می مانند و فضای حافظه اصلی را اشغال می کنند. فرض کنید در همین حین یک فرایند با اولویت بالا وارد می شود ولی فضای کافی برای قرار گرفتن در حافظه اصلی را ندارد. پس این فرایند هر گز نمی تواند اجرا شود. ولی راه حل این موضوع استفاده از حافظه swap است. به اینصورت که فرایند های بی کار در حافظه اصلی را از حافظه اصلی به حافظه ثانویه منتقل می کند و ک فرایند را جایگزین آن می کند. به این عمل انتقال Swapping گفته میشود.

    مطب دیگری که در ارتباط با فرایند ها وجود دارد این هست که کدام کاربر کدام فرایند را اجرا کرده است. بطور مثال فرایند های سیستمی توسط کاربر root اجرا می شوند. مثلن فرایند init توسط root اجرا میشود ولی مثلن کاربری به نام amirnami دستور free را اجرا کرده است، پس این فرایند توسط amirnami اجرا شده است.
    نویسنده نامی امیر
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-12-2020, 12:06 AM.

    #2
    مدیریت و مانیتورینگ فرایند ها – بخش دوم(دستور ps)

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

    نکته دیگر در ارتباط با سوئیچ های این دستور اینکه سه نوع سوئیچ داریم :

    1 - سوئیچ های یونیکسی، که با یک dash و یک فاصله از دستور جدا می شوند.
    2 - سوئیچ های بی اس دی، با یک فاصله از دستور جدا می شوند و نیازی به dash نیست.
    3 - سوئیچ های گنو (Gnu)، که با دو تا dash و یک فاصله از دستور جدا می شوند.

    همانطور که در این مطلب گفته شد هر فرایند دارای یک کاربر است که آنرا اجرا کرده است. این کاربر موسوم به Effective User یا euser است. دستور ps اطلاعات را برای هر euser نشان می دهد (یعنی کدام فرایند به کدام کاربر اختصاص دارد). همچنین از دیگر اطلاعاتی که نشان داده می شود (همه اطلاعات پایین مهم هستند ولی آنهایی که bold شده اند بصورت روزمره و مکرر استفاده می شوند)

    CPU% : میزان مصرف پردازنده توسط فرایند به درصد.

    MEM% : میزان مصرف حافظه Ram توسط فرایند به در صد.

    ADDR : آدرس فیزیکی فرایند درون حافظه Ram.

    C or CP : اطلاعات پردازنده مصرفی و اطلاعات زمانبندی.

    COMMAND : نشان دهنده دستور اجرایی. منظور همان فرایند است که یک PID دارد.

    NI : مقدار nice.

    F : برخی از Flag های پردازنده.

    PID : شناسه فرایند.

    PPID : شناسه والد فرایند.

    PRI : مقدار Priority یا اولویت فرایند.

    RSS : استفاده Real از حافظه اصلی.

    S or STAT : وضعیت فرایند.

    START or STIME : زمان شروع به کار فرایند (زمانی که فرایند CPU را برای اجرا شدن می گیرد).

    SZ : میزان مصرف حافظه مجازی.

    TT or TTY : شماره ترمینالی که دستور یا فرایند از آنجا اجرا میشود.

    UID or USER : کاربری که دستور یا فرایند را اجرا کرده است.

    اما همانطور که در این مطلب گفته شد، هر فرایند دارای وضعیتی است که می توان به موارد زیر اشاره کرد.

    D : حالت Sleep اضطراری (Uninterruptible) بطور مثال فرایند برای انجام عمل I/O به خواب رفته است.

    S : برای انجام عمل وقفه به خواب رفته است.

    R : حالت Running یا اجرا

    T : فرایند خاتمه یا Terminate یافته است. بطور مثال کار فرایند تمام شده یا اینکه یا Ctrl+C سیگنال Terminate به آن داده شده است و یا اینکه فرایند والد از بین رفته است.

    استفاده از دستور :
    در مثال های پایین با مثال هایی کاربرد دستور را شنان می دهیم..حتمن برای دیدن خروجی ها این مثال ها را اجرا کنید و توجه داشته باشید دستور های بدون dash از نوع فرمت BSD هستند.

    نمایش تمام فرایند های در حال اجرا با یکی از دستور های زیر

    ps -e
    ps -ef
    ps -eF
    ps -ely

    ps ax
    ps axu


    سوئیچ e- : نمایش تمامی فرایند ها. این سوئیج معادل سویچ A- نیز است.

    u : برای نمایش به تفکیک نام کاربری. شکل کلی آن بصورت زیر است. اگر چیزی بجای USERNAME نوشته نشود بصورت پیش فرض root در نظر گرفته میشود.

    کد PHP:
    ps -u USERNAME 
    f- : خروجی های بیشتری نشان میدهد. دستور بالا را بدون این سوئیچ استفاده کنید تا تفاوت را بینید.

    اگر می خواهید خروجی بر اساس شناسه کاربری یا دستور چاپ شود باید از سوئیچ های U- و C- استفاده کنید. فرمت دستوری اول بجای UID شناسه کاربری فرد قرار می گیرد. بطور مثال برای root این عدد 1 است و در فرمت دستوری دوم بجای CMD نام دستور آورده می شود.

    کد PHP:
    ps  -U UID

    ps  
    -C CMD 
    همچنین می توانید اطلاعات چندین کاربر را اشته باشید.

    کد PHP:
    ps  -U UID1,UID2 
    اگر می خواهید خروجی بر اساس شناسه فرایند یا شناسه والد فرایند نشان داده شود به ترتیب دستور اول و دوم را بکار ببرید.

    کد PHP:
    ps  -p PID 
    کد PHP:
    ps  -pid PPID 
    همچنین می توانید اطلاعات چندین فرایند را نیز داشته باشید.

    کد PHP:
    ps  -p PID1,PID2 
    برای نمایش درختی فرایند ها (والد-فرزندی) از یکی دستورهای زیر استفاده کنید.

    کد PHP:
    ps -ejH

    ps 
    --o pid,args –forest

    ps axjf 
    برای بدست آوردن اطلاعاتی از نخ ها دستور های زیر را اجرا کنید. (نخ واحد اجرایی هر فرایند است که وظیفه خاصی را دارد. فرض کنید یک برنامه پردازش متن مانند openoffice وجود دارد. این برنامه یک فرایند دارد که در این فرایند چندین نخ وجود دارد که هر کدام وظیف خاص دارد. بطور مثال یک نخ وظیه انجام Ctrl+S را پس از نوشتن هر خط انجام می دهئ و یک فرایند وظیف چیدمان را انجام میدهد. به خاطر وجود همین نخ هاست که شما در ویرایشگر متن می توانید چندین عمل را بصرت همزمان و بدون تداخل در کار یکدیگر انجام دهید. ولی در فرایند های قدیمی اینطور نبود چون این فرایند ها همگی دارای یک نخ بوده اند)

    کد PHP:
    ps -eLf
    ps axms 
    برای بدست اوردن اطلاعات امنیتی از دستور های زیر استفاده کنید.
    کد PHP:
    ps -eo euser,ruser,suser,fuser,f,comm,label
    ps axZ
    ps 
    -eM 
    نویسنده نامی امیر
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-12-2020, 12:06 AM.

    کامنت

    درباره انجمن منطقه لینوکسی ها

    انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

    شبکه های اجتماعی
    در حال انجام ...
    X