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

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 شدن سیستم پاک شده و پس از روشن شدن سیستم از نو اطلاعاتش پر می شوند پس نسبت به دفعات قبل دارای اطلاعات متفاوتی است.
مهمترین سوئیج های دستور free عبارتند از :t- که یک ستون اضافه از مجموع یا total را نشان می دهند. همچنین سوئیج های k-,b- و m- که به ترتیب خروجی را بر حسب بایت، کلیوبایت و مگابایت نشان میدهند.
همچنین سوئیج s- که به شکل کلی زیر استفاده می شود دستور free را بصورت مکرر و در زمانی تعیین شده (Delay) اجرا می کند. بطور مثال در دومین دستور زیر بصورت مکرر دستور free هر 2 ثانیه یکبار اجرا می شود تا اینکه شما Ctrl+C را برای اتمام اجرا کلیک کنید.
البته می توانید از دستور watch نیز استفاده کنید تا خروجی دستور free بصورت تکرار شونده در زمانی خاص نشان داده شوند. تفاوت دستور زیر و دستور بالا در این است که در دستو بالا هر 2 ثانیه یکبار یک خروجی جدیدی در ستون های جدید نشان داده می شود ولی در دستور زیر خروجی جدید دیگر در ستون های جدید چاپ نمی شود. (دو دستور را اجرا کنید تا متوجه شوید) شکل کلی دستور watch بصورت زیر است.بازهم برای اتمام اجرای دستور کلید های Ctrl+C را کلیک کنید.
دستور vmstat مخفف virtual memory statistics اطلاعاتی از فرایندها، حافظه، صفحه بندی،Block I/O و فعالیت های پردازنده نشان می دهد. اجرای بدون سوئیچ دستور vmstat، شش است :

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

در شکل بالا gnome-terminal فرزند فرایند init و فرایند bash فرزند فرایند gnome-terminal است که دستور pstree را اجرا می کند.
سوئیچ n- باعث می شود که خروجی هر SEC_TIME یکبار انجام شود. مانند سوئیچ s- در دستور free است و هر SEC_TIME یکبار خروجی جدیدی را نشان می دهد. شکل کلی آن بصورت زیر است.
همچنین می توانید از دستور watch مانند بالا استفاده کنید.
برای اتمام دستور Ctrl+C را کلیک کنید.همچنین می توانید از شکل کلی زیر طوری دستور را اجرا کنید تا به تعداد دفعات مشخص و هر SEC_TIME یکبار خروجی را نشان دهد. (بر خلاف استفاده از سوئیج n- که بصورت مکرر خروجی را هر SEC_TIME نشان می داد).
دومین و سومین دستور های بالا، دستور vmstat را به تعداد 10 بار هر 2 ثانیه یکبار اجرا می کنند.
سوئیچ s- آماری از حافظه و سوئیچ d- آماری از دیسک ها و … را نشان می دهند. خروجی s- همان خروجی vmstat است ولی بدون شکل و ستون بندی نرمالی که در شکل دوم می بینید. البته اطلاعاتی مانند حافظه های active/inactive نیز نشان داده می شوند.

همانطور که مشاهده می کنید خروجی این سوئیچ ترکیبی از سوئیچ های a- و f- یا سویئچ های دیگر است.
کد PHP:
free
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
کد PHP:
free -tb
free -tk
free -m
free -t
free -b
کد PHP:
free -s DELAY_SEC
free -m -s 2
کد PHP:
watch -n SEC_TIME CMD_WITH_OPTIONS
watch -n 2 free -m
ستون 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 -a
کد PHP:
pstree
در شکل بالا gnome-terminal فرزند فرایند init و فرایند bash فرزند فرایند gnome-terminal است که دستور pstree را اجرا می کند.
سوئیچ n- باعث می شود که خروجی هر SEC_TIME یکبار انجام شود. مانند سوئیچ s- در دستور free است و هر SEC_TIME یکبار خروجی جدیدی را نشان می دهد. شکل کلی آن بصورت زیر است.
کد PHP:
vmstat -n SEC_TIME
vmstat -n 2
کد PHP:
watch -n 2 vmstat
کد PHP:
vmstat OPTIONS COUNT SEC_TIME
vmstat -f 10 5
vmstat 10 5
سوئیچ s- آماری از حافظه و سوئیچ d- آماری از دیسک ها و … را نشان می دهند. خروجی s- همان خروجی vmstat است ولی بدون شکل و ستون بندی نرمالی که در شکل دوم می بینید. البته اطلاعاتی مانند حافظه های active/inactive نیز نشان داده می شوند.
همانطور که مشاهده می کنید خروجی این سوئیچ ترکیبی از سوئیچ های a- و f- یا سویئچ های دیگر است.