اطلاعیه

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

دستور های free و vmstat برای نمایش میزان حافظه

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

    دستور های free و vmstat برای نمایش میزان حافظه

    هر برنامه ای (فرایندی) برای اجرا شدن ابتدا در حافظه اصلی یا Ram قرار می گیرد و با بدست آوردن اصلی ترین منبع هر سیستم یعنی پردازنده اجرا خواهد شد. مانیتورینگ حافظه اصلی و پردازنده در بهبود کارایی سیستم مفید است. خود حافضه اصلی به دو ناحیه Kernel Level و User Level تقسیم می شوند. همچنین فضایی در هارد دیسک به نام swap بصورت یک پارتیشن مجزا از نوع سیستم فایل swap وجود دارد که فرایند ها میان حافظه اصلی و swap در حال رد و بدل شدن هستند.دو دستور vmstat و free برای مانیتورینگ حافظه اصلی، میزان فضای استفاده شده و آزاد حافظه اصلی و swap و همچنین میزان استفاده از پردازنده و … در سیستم عامل های یونیکسی و لینوکس وجود دارند. دستور free میزان حافظه استفاده شده و آزاد را نشان می دهد. اگر دستور را بدون هیچ سوئیچی اجرا کنید میزان مصرفی و آزاد حافضه اصلی و حافضه swap و همچنین میزان اندازه بافر و cache را بر حسب کیلو بایت نشان خواهد داد.

    کد PHP:
    free 
    برای بزرگتر شدن عکس روی آن کلیک کنید

نام:	free1.png
نمایش ها:	1
اندازه:	16.9 KB
شناسه:	18354

    total یا مجموع حافضه اصلی حدود 511 مگابایت است. (البته میزان واقعی 512 مگابایت است. سیستم اصلی من 2 گیگابایت حافظه و توزیع لینوکسی نصب شده دارای 512 مگابایت حافظه است). میزان Used استفاده شده از حافظه اصلی 437204 کیلو بایت و میزان فضای آزاد 73932 کیلوبایت است. ستون shared میزان فضایی است که میان فرایند ها بصورت اشتراکی استفاده می شود که در خروجی بالا چنین فضایی استفاده نشده است. میزان فضای بافر و Cache نیز به ترتیب 36532 و 218000 کلیوبایت است.

    توجه داشته باشید که فضای حافظه اصلی به قطعاتی با اندازه های یکسان به نام صفحه یا Page تقسیم می شوند و سپس فرایند در این قطعات تقسیم شده و در آنها قرار می گیرند. وقتی Shared برابر صفر است یعنی اینکه هیچ صفحه ای میان دو یا بیشتر فرایند بصورت اشتراکی استفاده نشده است. بافر باعث تسریع در اجرای فرایند ها می شود. گام های اجرای یک فرایند به این صورت است که نخست فرایند از دیسک به حافظه اصلی آوره می شود که نسبتا زمان بر است و سپس فرایند برای اجرا شدن پردازنده را در اختیار می گیرد. وجود بافر تسریع در عملیات دیسک می شود و بجای خواندن از دیسک بصورت مستقیم از حافظه اصلی خوانده می شوند. (بافر ناحیه ای از حافضه اصلی است.).Cache نیز باعث تسریع در سرعت دسترسی می شود.

    ستون +/- میزان فضای واقعی استفاده شده توسط Application ها را نشان می دهد (ستون Used در خروجی) و همچنین میزان فضای آزاد برای Application ها درس ستون Free.

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

    فایل proc/meminfo/ فایلی است که دستور free از آن برای نمایش خروجی و اطلاعات استفاده می کند. با دستور زیر می توانید محتوای آنرا ببنید. به دلیل اینکه دایرکتوری proc/ یک دایرکتوری مجازی و قرار گرفته در حافظه اصلی است اطلاعات آن پس از خاموش یا Restart شدن سیستم پاک شده و پس از روشن شدن سیستم از نو اطلاعاتش پر می شوند پس نسبت به دفعات قبل دارای اطلاعات متفاوتی است.

    کد PHP:
    cat /proc/meminfo 
    مهمترین سوئیج های دستور free عبارتند از :t- که یک ستون اضافه از مجموع یا total را نشان می دهند. همچنین سوئیج های k-,b- و m- که به ترتیب خروجی را بر حسب بایت، کلیوبایت و مگابایت نشان میدهند.

    کد PHP:
    free -tb

    free 
    -tk

    free 
    -m

    free 
    -t

    free 
    -
    همچنین سوئیج s- که به شکل کلی زیر استفاده می شود دستور free را بصورت مکرر و در زمانی تعیین شده (Delay) اجرا می کند. بطور مثال در دومین دستور زیر بصورت مکرر دستور free هر 2 ثانیه یکبار اجرا می شود تا اینکه شما Ctrl+C را برای اتمام اجرا کلیک کنید.

    کد PHP:
    free -s DELAY_SEC

    free 
    --s 2 
    البته می توانید از دستور watch نیز استفاده کنید تا خروجی دستور free بصورت تکرار شونده در زمانی خاص نشان داده شوند. تفاوت دستور زیر و دستور بالا در این است که در دستو بالا هر 2 ثانیه یکبار یک خروجی جدیدی در ستون های جدید نشان داده می شود ولی در دستور زیر خروجی جدید دیگر در ستون های جدید چاپ نمی شود. (دو دستور را اجرا کنید تا متوجه شوید) شکل کلی دستور watch بصورت زیر است.بازهم برای اتمام اجرای دستور کلید های Ctrl+C را کلیک کنید.

    کد PHP:
    watch -n SEC_TIME CMD_WITH_OPTIONS

    watch 
    -n 2 free -
    دستور vmstat مخفف virtual memory statistics اطلاعاتی از فرایندها، حافظه، صفحه بندی،Block I/O و فعالیت های پردازنده نشان می دهد. اجرای بدون سوئیچ دستور vmstat، شش است :

    برای بزرگتر شدن عکس روی آن کلیک کنید

نام:	vmstat1.png
نمایش ها:	1
اندازه:	16.8 KB
شناسه:	18355

    ستون Procs که مخفف Proccess و اطلاعاتی از فرایند بلاک شده و در حال اجرا را نمایش می دهد. دو فیلد r و b در زیر این ستون به ترتیب معرف : فیلد r مجموع تعداد فرایند های runnable و فیلد b مجموع فرایند های بلاک شده
    ستون memory مانند دستور free اطلاعاتی از حافظه اصلی را می دهد که دارای 4 فیلد است. فیلد swpd معرف میزان فضای swap اسفاده شده است. که مانند شکل اول هیچ فضایی استفاده نشده است.فیلد free مانند ستون free در اولین خط خروجی دستور free میزان فضای آزاد حافظه اصلی را نشان می دهد. فیلد buff و cache به ترتیب مانند ستون های buffer و cache در خروجی دستور free میزان فضای بافر و cache را نشان می دهند.

    ستون swap اطلاعاتی از swap را نشان می دهد. فیلد si یعنی swap in و به میزان فضایی که فرایند ها از دیسک به حافظه اصلی آورده شده اند است. عملیاتی که طی آن فرایندی از حافظه swap که برروی دیسک قرار دارد به حافظه اصلی آوره می شود swap in گویند.so یعنی swap out و بلعکس عملیات swap in است و به عملیاتی که طی آن فرایندی از حافظه اصلی وارد ناحیه swap بر روی دیسک می گونید و فیلد so میزان این عملیات را نشان می دهد. به مجموع این دو عملیات swapping یا مبادله کردن می گونید و واضح است چون فیلد swpd برابر صفر است و از حافظه swap استفاده نشده است پس هیچ عملیات si و so نیز انجام نگرفته پساین دوفیلد نیز مانند فیلد swpd برابر صفر هستند.

    ستون io میزان عملیات های ورودی/خروجی یا Input/Output را از/به دیسک نشان می دهند. دارای دوفیلد bi که مخفف Block Input و معرف تعداد بلاک های حافظه ای که از دیسک گرفته یا دریافت شده اند (خواندن از دیسک) و bo مخفف Block Output و یعنی تعداد بلاک های حافظه ای که بر روی دیسک فرستاده شده اند (نوشتن بر دیسک)

    ستون system دارای دو in که مخفف Intrrupt یا تعداد وقفه ها در هر ثانیه است. یکی از اعمالی که باعث ایجاد وقفه می شود در خواست خواندن از دیسک است. به محض بروز وقفه برای خواندن از دیسک مقدار این فیلد تغییر کرده و فراند باید متوقف شود تا بی خود پردازنده را اشغال نکند پیش از متوقف کردن فرایند باید تمامی وضعیت یک فرایند نگهداری شود که به محض تکمیل عمل I/O دوباره آن فرایند از وضعیت قبلی خود اجرا شود. به عملیات نگهداری وضعیت فرایند Context Switch گویند که فیلد دوم یعنی cs مخفف Context Switch ها در هر ثانیه است.

    ستون cpu دارای 4 فیلد است. فضای حافظه اصلی به دو ناحیه Kernel-Level و User-level تقسیم می شود که ناحیه User-level هیچ دخالتی بر ناحیه Kernel-Level ندارد. اولین فیلد یعنی us زمان مصر شده برای اجرا کردن کد های کاربری را نشان می دهد. فیلد sy میزان زمان صرف شده برای اجرای کد های کرنل را نشان می دهد.id که مخفف idle است میزان زمان بی کاری یا Idle Time پردازنده و فیلد wa میزان زمان صرف شده برای تکمیل یک عمل I/O را نشان می دهند.

    از سوئیج های مهم این دستور می توان به موارد زیر اشاره کرد.

    سوئیچ a- برای نمایش حافضه های active و inactive

    کد PHP:
    free -
    سوئیچ f- برای نشان دادن تعداد عملیات fork از زمان boot شدن سیستم را نشان می دهد. عملیات fork در تمامی سیستم عامل های یونیکسی باعث ایجاد یک فرایند فرزند از والد خود می شود. بطور مثال وقتی سیستم را boot می کنید اولین فرایندی که ایجاد می شود فرایند init با PID=1 است. سپس تمامی فرایند های دیگر تحت مدیریت فرایند init ایجاد و آغاز به کار می کنند، مانند فرایند gnome-terminal. پس فرایند gnome-terminal ای وجود دارد که فرزند فرایند init است. حال اگر وارد محیط گرافیکی شوید یک پنجره خط فرمان برای اجرای پوسته bash باز کنید یک فرزند توسط عملیات fork از فرایند gnome-terminal ساخته می شود که پاسخ گوی دستور های ورودی شما است.

    کد PHP:
    pstree 
    برای بزرگتر شدن عکس روی آن کلیک کنید

نام:	pstree1.png
نمایش ها:	1
اندازه:	10.5 KB
شناسه:	18356

    در شکل بالا gnome-terminal فرزند فرایند init و فرایند bash فرزند فرایند gnome-terminal است که دستور pstree را اجرا می کند.

    سوئیچ n- باعث می شود که خروجی هر SEC_TIME یکبار انجام شود. مانند سوئیچ s- در دستور free است و هر SEC_TIME یکبار خروجی جدیدی را نشان می دهد. شکل کلی آن بصورت زیر است.

    کد PHP:

    vmstat 
    -n SEC_TIME

    vmstat 
    -n 2 
    همچنین می توانید از دستور watch مانند بالا استفاده کنید.

    کد PHP:
    watch -n 2 vmstat 
    برای اتمام دستور Ctrl+C را کلیک کنید.همچنین می توانید از شکل کلی زیر طوری دستور را اجرا کنید تا به تعداد دفعات مشخص و هر SEC_TIME یکبار خروجی را نشان دهد. (بر خلاف استفاده از سوئیج n- که بصورت مکرر خروجی را هر SEC_TIME نشان می داد).

    کد PHP:
    vmstat OPTIONS COUNT SEC_TIME

    vmstat 
    -f 10 5

    vmstat 10 5 
    دومین و سومین دستور های بالا، دستور vmstat را به تعداد 10 بار هر 2 ثانیه یکبار اجرا می کنند.

    سوئیچ s- آماری از حافظه و سوئیچ d- آماری از دیسک ها و … را نشان می دهند. خروجی s- همان خروجی vmstat است ولی بدون شکل و ستون بندی نرمالی که در شکل دوم می بینید. البته اطلاعاتی مانند حافظه های active/inactive نیز نشان داده می شوند.

    برای بزرگتر شدن عکس روی آن کلیک کنید

نام:	vmstat2.png
نمایش ها:	1
اندازه:	94.9 KB
شناسه:	18357

    همانطور که مشاهده می کنید خروجی این سوئیچ ترکیبی از سوئیچ های a- و f- یا سویئچ های دیگر است.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 06-11-2017, 10:36 AM.

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

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

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