| استفاده موثر از دستور top |
|
|
| مقالات - مقالات | |||||||||||||||||||||||||||||||||||||||
| نویسنده خانم شكيباپور | |||||||||||||||||||||||||||||||||||||||
| ۱۶ تير ۱۳۸۷ | |||||||||||||||||||||||||||||||||||||||
|
مونیتور کردن میزان استفاده از منابع، کاری مهم برای کاربران محسوب می شود. با انجام این کار، ما می توانیم گلوگاهای سیستممان را پیدا کنیم، راهکارهای بهینه کردن سیستممان را طرح ریزی کنیم، نشت های حافظه را مشخص کنیم و ... .مسأله این است که شخص از چه نرم افزاری استفاده کند و از آن چگونه استفاده کند تا نیازهایش را برآورده سازد. از بین ابزارهای مونیتورینگ موجود، بیشتر مردم از "top" (بخشی از بسته procps) استفاده می کنند.top تقریباً هر چیزی را که ما برای مونیتور کردن استفاده منابع سیستممان در یک نگاه نیاز داریم، برای ما فراهم می کند.در این مقاله، همه اطلاعات بر پایه procps ورژن 3.2.5 در حال اجرا روی کرنل 2.6.x است. فرض می کنیم بسته procps قبلاً بر روی سیستم ما نصب شده است و به خوبی هم کار می کند.
حالت interactive یا batch ؟ به طور پیش فرض top در حالت interactive صدا زده می شود.در این حالت، top به طور نامحدود اجرا می شود و برای دوباره تعریف کردن چگونگی کارکرد top، فشرده شدن کلیدها را می پذیرد.اما بعضی وقتها احتیاج دارید که خروجی top را پردازش کنید و در این حالت این کار به سختی امکان پذیر است.راه حل؟ استفاده از حالت batch. $ top –b
خروجی زیر را مشاهده خواهید کرد:
$ top -b -n 1 مزیت اصلی این حالت این است که می تواند به سادگی با at یا cron ترکیب شود.در این وضعیت، top می تواند snapshot استفاده از منابع را در یک زمان مشخص بگیرد.برای مثال، با استفاده از at، می توانید اجرای top را برای 1 دقیقه بعد زمانبندی کنید. $ cat ./test.at TERM=linux top -b -n 1 >/tmp/top-report.txt $ at -f ./test.at now+1minutes خوانندگان با دقت ممکن است بپرسند "چرا لازم داریم متغیر محیطی TERM را قبل از اجرای top به هنگام ایجاد یک job جدید at مقداردهی کنیم؟". پاسخ این است، top احتیاج دارد که این متغیر مقداردهی شده باشد اما متأسفانه در لحظه اجرا at آن را نگه نمی دارد.به سادگی با روش بالا آن را مقداردهی می کنیم و top به خوبی عمل خواهد کرد. چگونه تنها پروسسهای خاصی را مونیتور کنیم؟ بعضی وقتها می خواهیم تنها یک یا چند پروسس را مونیتور کنیم که ممکن است 4 یا 5 تا از کل پردازشها باشد. برای مثال، اگر بخواهید پروسسها با PID 4360 و 4358 را مونیتور کنید، تایپ کنید: $ top -p 4360,4358 یا $ top -p 4360 -p 4358 احتمال دیگر این است که تنها بخواهید پروسسها با شناسه کاربری (UID) مشخص را مونیتور کنید. برای این کار باید از option های –u یا –U استفاده کنید. فرض کنید کاربر "johndoe" UID 500 را دارد. می توانید تایپ کنید: $ top -u johndoe یا $ top -u 500 یا $ top -U johndoe
در نتیجه هم می توانید از نام کاربری و هم UID عددی استفاده کنید." -u و –U؟ آیا با هم متفاوتند؟" بله .مثل اغلب ابزارهای GNU، option ها case sensitive هستند.-U به این معنی است که top ، UID های مؤثر(effective) ، حقیقی (real) ، ذخیره شده (saved) و سیستم فایل (filesystem) را که جور می شوند (match) را پیدا می کند در صورتی که –u تنها شناسه کاربری مؤثر (effective user id) جور شده را پیدا می کند. به عنوان یادآوری ، هر پروسس *nix ی با استفاده از UID مؤثر اجرا می شود که بعضی وقتها با شناسه کاربری حقیقی (real user id) برابر نیست.ممکن است توجه یک شخص به effective user id باشد (چون مجوزهای فایل سیستم و قابلیتهای سیستم عامل با آن چک می شوند) تا real user id.
در حالی که –p تنها option خط فرمان است، -u و -U در حالت interactive هم استفاده می شوند.اگر’U’ یا ‘u’ را فشار دهید، پروسس ها بر اساس نام کاربریشان فیلتر می شوند.u برای effective user id وU برای نام کاربری real/effective/saved/filesystem . البته از شما خواسته می شود تا نام کاربری یا UID عددی را وارد کنید. به روز شدن سریع یا کند؟ قبل از اینکه به این پرسش پاسخ دهیم ، بیایید نگاهی به چگونگی عملکرد top بیندازیم.strace در اینجا دوست شماست: $ strace -o /tmp/trace.txt top -b -n 1
از ویرایشگر متنی دلخواه خود استفاده کرده و /tmp/trace.txt را بارگذاری کنید.چه فکر می کنید؟تعداد زیادی job برای یک درخواست کوچک، این چیزی است که من فکر می کنم و احتمالاً شما هم با آن موافقید.یکی از job هایی که top باید در هر تکرارانجام دهد، باز کردن تعداد زیادی فایل و پویش محتوی آنها است که با عدد زیر نمایش داده می شود: $ grep open\( /tmp/trace.txt | wc –l
در سیستم لینوکسی من این عدد برابر 304 شده است.یک نگاه نزدیکتر آشکار می کند که top داخل دایرکتوری /proc حرکت می کند تا اطلاعات مورد نیاز خود را به دست بیاورد. /proc یک شبه فایل سیستم است، به این معنی که روی دیسک موجود نیست اما توسط کرنل ایجاد شده و به طور زنده در RAM وجود دارد.داخل دایرکتوری مانند /proc/2049 (2049 یک PIDاست) کرنل لینوکس اطلاعات راجع به پروسس مربوطه را قرار می دهد و اینجا جایی است که top اطلاعات مربوط به پروسس ها و میزان استفاده از منابع را جمع آوری می کند.
همچنین دستور زیر را امتحان کنید: $ time top -b -n 1
این دستور به شما نشان می دهد که top چقدر سریع در یک راند کار می کند.در سیستم من حدوداً 0.5-0.6 ثانیه طول کشید.به فیلد real نگاه کنید نه user یا system چون real کل زمانی که top برای کار کردن احتیاج دارد را نشان می دهد.بنابراین با درک این حقیقت، عاقلانه تر این است که از فاصله های زمانی به روزرسانی (update interval) میانه ای استفاده کنیم.گذار در فایل سیستم بر پایه RAM نیز زمان می برد، بنابراین باید آگاهانه عمل کنیم.با یک حساب سر انگشتی، فاصله زمانی (interval) 1 تا 3 ثانیه برای اغلب کاربران کافی به نظر می رسد.برای تنظیم این مقدار از –d در خط فرمان و فشار دادن s در حالت interactive استفاده کنید.از اعداد کسری نیز برای فاصله زمانی می توانید استفاده کنید:برای مثال 2.5 و 4.1 و ... .
کی لازم است سریعتر از 1 ثانیه باشیم؟ شما به نمونه های بیشتری در یک دوره زمانی احتیاج دارید.به این خاطر بهتر است از حالت batch استفاده کنید و خروجی استاندارد را به یک فایل بفرستید تا بتوانید آن را بهتر تحلیل کنید. سربار اضافه CPU که به خاطر top ایجاد شده برای شما مهم نیست .بله ،این مقدار کوچک است اما به هر حال سربار به حساب می آید.اگر سیستم لینوکسی شما اکثراً بیکار است،برای اینکه از فاصله های زمانی کوتاه استفاده کنید، شک نکنید، در غیر اینصورت بهتر است زمان CPU را برای کارهای مهمتر نگاه دارید.
یک راه برای کم کردن حجم کار top این است که تنها PID های خاصی را مونیتور کنیم.با این کار، top احتیاج ندارد که کل /proc را بپیماید. فیلتر کردن بر اساس نام کاربری چطور؟ فیلتر کردن بر اساس نام کاربری کار اضافه تری برای top به ارمغان می آورد ، بنابراین ترکیب کردن آن با فاصله های زمانی کوتاه ، بار CPU را بالاتر خواهد برد.
البته هرگاه احتیاج دارید که خروجی حتماً به روزرسانی شود، Space bar را فشار دهید و top آمار را در همان لحظه به روزرسانی می کند. فیلدهایی که نیاز داریم به طور پیش فرض، top با نمایش خصوصیات روبرو از task ها آغاز می شود:
البته فیلدهای بیشتری نیز وجود دارند.ما در اینجا تنها فیلدهایی که احتمالاً مورد توجه شما قرار می گیرند را توضیح می دهیم:
برای اینکه فیلدهای بالا را ببینید در حالت interactive کلید f را بزنید.سپس کلید مربوطه (که داخل پرانتز ذکر شده) را بزنید.آن کلید های فیلد مربوطه را برای نمایش نشاندار می کنند و اگر دوباره آنها را بزنید آن فیلد را پنهان می کنند.برای اینکه بفهمید چه فیلدهایی نمایش داده می شوند و چه فیلدهایی پنهان هستند، پس از زدن کلید f در لیست حروفی که بزرگ هستند یعنی فیلد مربوطه شان نمایش داده می شود و حروفی که کوچک هستند یعنی فیلد مربوطه شان نمایش داده نمی شود.اگر با وضعیت فعلی موافق هستید Enter را بزنید.
مرتب کردن (sort) نیز به همین ترتیب است.’O’ (بزرگ) را فشار دهید و به دنبال آن کلیدی که نشان دهنده آن فیلد است.نگران نباشید اگر کلید فیلدها را به خاطر نمی آورید، top آنها را به شما نمایش خواهد داد.کلید جدید sort ستاره دار نمایش داده می شود، بنابراین به سادگی مشخص می شود.در پایان Enter را بزنید. آیا نمایش چند گانه بهتر از تکی است؟ در بعضی از موقعیتها، می خواهید مشخصه های مختلفی از سیستم را مونیتور کنید.به عنوان مثال، یک وقت می خواهید %CPU و زمان مصرف شده CPU را برای کلیه task ها مونیتور کنید.در یک زمان دیگر، می خواهید سایز مقیم و page fault های کل task ها را مونیتور کنید.آیا مرتباً کلید f را قشار می دهید و فیلدهای قابل مشاهده را عوض می کنید؟ انتخاب هوشمندانه ای به نظر نمی رسد.
چرا از حالت چند پنجره ای استفاده نمی کنید؟ کلید ‘A’ (بزرگ) را فشار دهید تا به حالت چند پنجره ای جابجا شوید.به طور پیش فرض ، شما 4 مجموعه از گروه فیلدها مشاهده می کنید.هر گروه فیلد یک نام یا برچسب دارد: اولین گروه فیلد: Def دومین گروه فیلد: Job سومین گروه فیلد: Mem چهارمین گروه فیلد: Usr ![]()
پنجره فعال، پنجره ای است که به ورودیهای کاربر عکس العمل نشان می دهد، بنابراین قبل از انجام هر کاری ابتدا پنجره دلخواه را انتخاب کنید.بعد از آن، هر کاری که در حالت تک پنجره ای می توانستید انجام دهید، اینجا هم می توانید انجام دهید.معمولاً کاری که در اینجا می خواهید انجام دهید، خصوصی سازی فیلدهای نمایش داده شده است بنابراین کلید f را بزنید و خصوصی سازی را آغاز کنید.
اگر فکر می کنید 4 پنجره خیلی زیاد است، به آن گروه فیلد جابجا شوید و ‘-‘ را برای پنهان ساختن آن فشار دهید.لطفاً توجه کنید که پنهان سازی گروه فیلد جاری به معنی فعال سازی گروه فیلد دیگری نیست. اگر می خواهید دوباره آن گروه فیلد را نمایش دهید، کلید ‘-‘ را دوباره بزنید.
اگر کارتان با حالت چند پنجره ای تمام شده است، کلید ‘A’ را دوباره فشار دهید.اینکار گروه فعال را به گروه فعال حالت تک پنجره ای نیز تبدیل می کند.
چرا حافظه خالی روی لینوکس من اینقدر کم است؟ مهم نیست که شما چقدر RAM روی مادربورد خود گذاشته اید،بزودی متوجه می شوید که RAM آزاد به سرعت کم می شود.اشتباه محاسبه در RAM خالی؟ نه!
قبل از پاسخ دادن به این سؤال، ابتدا خلاصه گزارش حافظه که در بالای top قرار گرفته را چک کنید(ممکن است برای آشکار سازی آن مجبور باشید کلید ‘m’ را بزنید).در آنجا شما دو فیلد می بینید،buffers و cached .Buffers می گوید که چه میزان از RAMبه بلوک دیسک cache اختصاص یافته است.cached نیز شبیه buffers است، با این تفاوت که page ها را از خواندن فایل (file reading) cache می کند. Buffer ها توسط پروسس های مختلف اختصاص داده می شود تا از آنها به عنوان صفهای ورودی استفاده شود.بیشتر وقتها buffer ها خروجی بعضی از پروسسها هستند،به عنوان بافر فایل.یک توضیح ساده از buffer ها این است که آنها به پروسسها این امکان را می دهند تا به طور موقت ورودیهای خود را در حافظه ذخیره کنند تا پروسس راحتتر بتواند با آنها سر و کار داشته باشد.cache ، I/O دیسک که مکرراً درخواست می شود.اگر چندین پروسس به یک سری فایل مشخص دسترسی دارند، بیشتر آن فایلها برای بالا بردن کارایی cache می شوند.برای درک کامل این واژه ها به کتابهای Linux kernel book رجوع کنید. کافی است که بفهمید که هر دو buffers و cached سایز cache سیستم را مشخص می کنند.که به درخواست مکانیزم داخلی کرنل لینوکس ، رشد می یابند یا کوچک می شوند. RAM ،در کنار فضای مصرف شده توسط cache، حاوی بخش code و data از برنامه کاربردی نیز هست.بنابراین RAM آزاد به معنی RAM ی است که نه توسط cache و نه توسط بخش code و data از برنامه کاربردی اشغال نشده است.شما می توانید cache را RAM آزاد دیگری در نظر بگیرید که در صورت نیاز برنامه کاربردی به حافظه، کوچک می شود.
از نقطه نظر task، ممکن است از خود بپرسید که کدام فیلد حقیقتاً مصرف حافظه را نمایش می دهد.فیلد VIRT؟ نه! به خاطر بیاورید که این فیلد حاوی هر چیزی در محدوده آدرس task است حتی shared library ها.بعد از مطالعه کدهای منبع top و proc.txt (داخل پوشه Documentation/filesystem از کد منبع کرنل لینوکس) من به این نتیجه رسیده ام که فیلد RES بهترین فیلد برای فهمیدن میزان مصرف حافظه توسط task است.بهترین، چون شما باید تقریب را نیز در نظر بگیرید و همیشه 100% دقیق نیست. کار با تنظیمات ذخیره شده متعدد: آیا می خواهید تنظیمات متفاوتی از top داشته باشید تا بتوانید بین نمایشهای از پیش تنظیم شده جابجا شوید؟یک لینک symbolic به باینری top درست کنید و هر نامی که می خواهید به آن بدهید: # ln -s /usr/bin/top /usr/bin/top-a
حال اگر top-a جدید را اجرا کنید و تنظیمات خود را انجام داده و ‘W’ را برای ذخیره فشار دهید. تحت ~/.top-arc ذخیره خواهد شد (فرمت، نام top شما + rc است).
حال اگر top اصلی را اجرا کنید،اولین نمایش شما را بارگذاری خواهد کرد و اگر top-a را اجرا کنید، دومی را بارگذاری خواهد کرد و به همین ترتیب.
منبع:سایت http://www.linuxforums.org |
|||||||||||||||||||||||||||||||||||||||
| آخرین بروز رسانی ( ۱۶ تير ۱۳۸۷ ) | |||||||||||||||||||||||||||||||||||||||
| <قبل | بعد> |
|---|
| صفحه اصلی |
| اخبار |
| مقالات |
| جستجوی پیشرفته |
| یزدلاگ در رسانه |
| تازه کاران |
| مدیریت |