تحت لینوکس، چگونه می توانم بفهمم کدام فرآیند بیشتر از فضای swap استفاده می کند؟
@jterrace درست است، من به اندازه مجموع مقادیر ستون SWAP در بالا فضای مبادله ندارم.
@jterrace، در نظر بگیرید که چه کسی پاسخ روز قبولی اشتباه است. شش سال بعد، بقیه ما نمی دانیم که آیا شما به پاسخ دیوید هولم (که در حال حاضر پذیرفته شده است) اشاره می کنید یا پاسخ دیگری.(خب، می بینم که شما نیز به عنوان نظری در مورد پاسخ دیوید هولم گفتید که پاسخ دیوید هولم اشتباه است. بنابراین حدس می زنم که احتمالاً منظور شما بوده است.)
sme m-s swa p-r گزینه خوبی است. پاسخ مربوطه در حال حاضر زیر دو پاسخ اسکریپت سفارشی است.
20 پاسخ 20
در اینجا یک نوع از اسکریپت وجود دارد و نیازی به روت نیست:
هیچ خروجی در اوبونتو 12. 04. 1 ارائه نمی دهد (با swap به طور کامل توسط "بالا" گزارش شده است). شاید نشت حافظه ای که شناسایی نشده باشد؟
همان خروجی ده برابر سریعتر: برای فایل در /proc/*/status ;انجام awk '/Tgid|VmSwap|نام/
بالا را اجرا کنید سپس O p Enter را فشار دهید. در حال حاضر فرآیندها باید بر اساس استفاده از مبادله مرتب شوند.
در اینجا یک به روز رسانی است زیرا پاسخ اصلی من پاسخ دقیقی به مشکل همانطور که در نظرات اشاره شد ارائه نمی دهد. از htop سوالات متداول:
نمی توان اندازه دقیق فضای مبادله استفاده شده یک فرآیند را بدست آورد. Top این اطلاعات را با ایجاد SWAP = VIRT - RES جعل می کند، اما این معیار خوبی نیست، زیرا موارد دیگری مانند حافظه ویدیویی نیز روی VIRT حساب می شوند (به عنوان مثال: top می گوید که فرآیند X من از 81M تعویض استفاده می کند، اما همچنینگزارش می دهد که سیستم من به طور کلی فقط از 2M swap استفاده می کند. بنابراین، من یک ستون Swap مشابه را به htop اضافه نمی کنم زیرا روش قابل اعتمادی برای دریافت این اطلاعات نمی دانم (در واقع، فکر نمی کنم امکان دریافت آن وجود داشته باشد. یک عدد دقیق، به دلیل صفحات مشترک).
از اسناد، به نظر میرسد که ستون SWAP در بالا فقط نشان میدهد که در صورت تعویض کل فرآیند، چقدر مبادله لازم است، نه اینکه چه مقدار از فرآیند در حال حاضر واقعاً مبادله شده است. از آنچه پس از یک جستجوی کوتاه می توانم بگویم، هیچ راهی برای تعیین اینکه چه مقدار از هر فرآیند در حال حاضر مبادله شده است وجود ندارد. نویسنده htop از قرار دادن چنین ستونی به این دلیل امتناع می ورزد (من ستون های CNSWAP و NSWAP را می بینم، اما به نظر می رسد آنها هیچ کاری روی دستگاه من انجام نمی دهند): htop. sourceforge. net/index. php? page=faq
@yukondude درست می گوید، ستون SWAP در بالا فقط VIRT - RES است و این اطلاعات در این زمینه به نوعی بی فایده است. هیچ غرامتی برای مثال وجود ندارد. حافظه مشترک رم ویدیویی نقشهبرداری شدههمچنین ممکن است تمام حافظه هنوز توسط فرآیند ارجاع نشده باشد. در این مورد لازم نیست سیستم عامل باینری کامل را از دیسک به حافظه بخواند و بنابراین مقدار RES شامل این قسمت از حافظه نمی شود.
خوشبختانه این همان چیزی است که نظرات برای @jterrace است :) (اگرچه مسلماً باید آنها را بخوانید: S. مطمئن نیستید که atrain به چه چیزی اشاره دارد، امیدوارم yukondude باشد)
با توجه به این نظر که دیگر کار نمی کند: به نظر می رسد نسخه های جدیدتر از TOP دیگر "O" را به عنوان کلید انتخاب زمینه های مرتب سازی تنظیم نکرده اند. هنگام استفاده از؟کلید می توانید نام و نسخه برنامه واقعی را ببینید ، Procps-NG آخرین نسخه است. این یک چنگال توسط Debian ، Fedora و OpenSuse است: gitorious. org/procps. اگر هنوز دوست دارید مرتب سازی بر روی ستون مبادله انجام دهید: از کلید "F" برای دیدن فیلدها استفاده کنید ، از کلیدهای فلش برای رفتن به مبادله و استفاده از "S" برای تنظیم مرتب سازی استفاده کنید ، سپس "Q".
در اینجا یک نوع دیگر از فیلمنامه وجود دارد ، اما به معنای ارائه خروجی قابل خواندن تر است (برای به دست آوردن نتایج دقیق باید این کار را به عنوان ریشه اجرا کنید):
تنها چیزی که من تغییر دادم استفاده از Args به جای Comm در دستور PS است زیرا من فرآیندهای زیادی با همین نام اما استدلال های مختلف دارم (دسته ای از فرآیندهای Gunicorn Python). یعنی: p s-p $ pi d-o arg s-n o-headers
در اینجا پیوندی وجود دارد که به شما می گوید چگونه آن را نصب کنید و چگونه از آن استفاده کنید: http://www. cyberciti. biz/faq/linux-which-process-is-using-swap/
این یکی خوب است. در اینجا نسخه اقتباسی از آن مقاله برای نشان دادن PROCS طبقه بندی شده با استفاده از مبادله با PID اضافه شده است: $ برای پرونده در/proc/*/وضعیت ؛do awk '/^pid | vmswap | name/
شما باید Glob /Proc /[1-9]* /وضعیت را برای حذف یک زن و شوهر از ورودی های ویژه /PROC ، و می توانید مرتب سازی Args را به عنوا ن-rnk3 ترکیب کنید
کاملاً مشخص نیست که آیا منظور شما این است که می خواهید فرایندی را پیدا کنید که بیشتر صفحات را مبادله کرده است یا فرآیندی که باعث شده است که بیشتر صفحات تعویض شوند.
برای اولین بار ممکن است با SWAP (OP "را فشار دهید و سفارش دهید ، برای دومی می توانید VMSTAT را اجرا کنید و به دنبال ورودی های غیر صفر برای" SO "باشید.
یک نوع اسکریپت دیگر که از حلقه در پوسته جلوگیری می کند:
استفاده استاندارد Script. sh است تا استفاده از هر برنامه را با ترتیب تصادفی (پایین به نحوه ذخیره AWK خود) یا اسکریپت 1 برای مرتب کردن خروجی توسط PID دریافت کنید.
امیدوارم که کد را به اندازه کافی اظهار نظر کرده ام تا بگویم چه کاری انجام می دهد.
توجه داشته باشید که Bash دایرکتوری ها را به روشی مرتب شده (واژگانی ، نه عددی) گسترش می دهد. ترتیب تصادفی به این است که چگونه AWK آرایه های خود را (جدول هش) ذخیره می کند و چگونه برای P در PNAME آنها را بازیابی می کند.
stephanechazelas خوب ، این حتی واژگانی نیست ، این یک نوع کد ASCII است (AS/Proc/1/وضعیت پس از/proc/1992/وضعیت می آید و این کد ASCII بالاتر از 9 کد ASCII است. این یک ترتیب تصادفی است"نگاه کنید و احساس کنید. من با جدول هش AWK موافقم ، من یک میانبر را در اینجا گرفتم. احساس راحتی کنید تا پاسخ را برای حفظ انتساب در تاریخ ویرایش ویرایش کنید.
/proc/1/وضعیت پس از/proc/1992/وضعیت در محل C که در آن سفارش بر اساس مقدار بایت است ، نمی آید. این کار را در محل شما (یا در en_gb. utf-8 من در سیستم GNU) انجام می دهد ، زیرا / در اولین مورد در الگوریتم جمع آوری (و انواع بعد از 9) نادیده گرفته می شود. مقایسه printf '/proc/٪ s/status \ n' 1 1992 |lc_all = en_gb. utf-8 مرتب سازی با printf '/proc/٪ s/وضعیت \ n' 1 1992 |lc_all = c مرتب سازی. در محلی های غیر از C ، ترتیب مرتب سازی به طور کلی مبتنی بر مقدار بایت نیست.
stephanechazelas نکته خوب ، هرچند در مورد محلی نبود. مجدداً برای افزودن دقت ، ویرایش را ویرایش کنید تا اعتبارات مال شما باشد (حداقل در ویرایش تاریخ).
انجام شده. این پاسخ بسیار بهتر از رای گیری در اینجا است. این سزاوار صعودهای بیشتری است. این و سایر پاسخ ها در اینجا مورد بحث قرار گرفت که چرا استفاده از حلقه پوسته برای پردازش متن در نظر گرفته شده عمل بد است؟که همان چیزی است که مرا به اینجا آورده است.
با این حال دو نوع دیگر:
از آنجا که Top یا HTOP نمی تواند در سیستم های کوچک نصب شود ، همیشه مرور /Proc ماندن همیشه ممکن است.
حتی در سیستم های کوچک ، پوسته ای پیدا خواهید کرد.
یک نوع پوسته!(نه فقط Bash)
این دقیقاً مشابه اسکریپت Lolotux است ، اما بدون هیچ گونه چنگال برای GREP ، AWK یا PS. این خیلی سریعتر است!
و از آنجا که Bash یکی از فقیرترین پوسته در مورد عملکرد است ، کار کمی انجام شد تا اطمینان حاصل شود که این اسکریپت به خوبی در زیر Dash ، BusyBox و برخی دیگر اجرا خواهد شد. سپس ، (به لطف Stéphane Chazelas ،) دوباره خیلی سریعتر می شوید!
فراموش نکنید که "پیش آگهی $" را دو برابر کنید!به نظر Stéphane Chazelas مراجعه کنید:
پیش آگهی Echo $ را بدون نقل قول مضاعف در سیستم معقول امتحان نکنید ، و قبلاً آماده کشتن پوسته فعلی باشید!
و یک نسخه perl
از آنجا که این به یک اسکریپت نه چندان ساده تبدیل می شود ، زمان در حال نوشتن یک ابزار اختصاصی با استفاده از زبان کارآمدتر است.
می تواند با یکی از آنها دویدن
stephanechazelas با تشکر!من [1-9] را قبل از * برای شمارش فقط مسیرهای شماره گذاری شده اضافه کردم (بدون خود و نه خود)
نحو مشخص است ، اما نام فرایند نیست. حداقل متغیرهای خود را نقل کنید.(در هر صورت ، اسکریپت شما بسیار کمتر از loloxux است).
نام فرآیند در لینوکس می تواند حاوی هر مقدار بایت باشد اما 0 اما به طول 15 بایت محدود می شود. ورود نام در/proc/*/وضعیت برخی از این مقادیر بایت را رمزگذاری می کند. به عنوان مثال ، per l-ne را امتحان کنید اگر/^name/'/proc/self/status را شروع کنید. از آنجا که بسیار کوتاه است ، خسارت هایی که می توان با کارهایی مانند Per l-ne انجام داد ، چاپ را شروع کنید اگر/^name/'/proc/self/stature محدود است وقتی فراموش می کنید متغیرهای خود را نقل کنید.$0="\n\t\\">
فرمان بالا همچنین شامل یک فیلد برای نمایش تعداد گسل های صفحه برای یک فرآیند است. فرآیند با حداکثر گسل های صفحه فرایندی است که بیشتر در حال تعویض است. برای مدت طولانی در حال اجرا ممکن است که آنها در ابتدا تعداد زیادی از گسل های صفحه را متحمل شوند و تعداد آنها بعداً افزایش نمی یابد. بنابراین ما باید مشاهده کنیم که آیا گسل های صفحه در حال افزایش است یا خیر.
من یک اسکریپت متفاوت را در وب با این یک خط طولانی تطبیق دادم:
که سپس من به یک cronjob پرتاب می کنم و خروجی را به یک ورود به سیستم هدایت می کنم. اطلاعات در اینجا همان تجمع مبادله است: ورودی ها در پرونده SMAPS ، اما اگر می خواهید مطمئن باشید ، می توانید استفاده کنید:
خروجی این نسخه در دو ستون است: PID ، مبلغ مبادله. در نسخه فوق ، TR اجزای غیر عددی را نوار می کند. در هر دو مورد ، خروجی به صورت عددی توسط PID طبقه بندی می شود.
این خوب است ، اما اولین نوع توسط PID Ascending (مرتب ساز ی-n). استفاده بهتر این است که آن را با استفاده از مبادله به ترتیب نزولی طبقه بندی کنید (بیشترین استفاده در مقابل لیست). برای بدست آوردن آن "مرتب ساز ی-n" را به "مرتب ساز ی-n -k 3-r" تغییر دهید
با استفاده از مبادله ، کل و درصد برای فرآیند می دهد
اوه ، من نمی دانستم Smem می تواند این کار را انجام دهد ، متشکرم!ftr ، من یک دستور را که معمولاً از آن استفاده می کنم اصلاح کردم تا شبیه این Sme m-kc "نام کاربر PID VSS PSS RSS SWAP" باشد ، بنابراین اکنون می توانم مقدار مبادله مورد استفاده در ستون آخر را ببینم.
در MacOSX ، شما فرمان بالا را نیز اجرا می کنید ، اما باید "O" را تایپ کنید و سپس "vsize" را وارد کنید و سپس وارد کنید.
از سال 2015 وصله هسته ای که به swappss اضافه می کند (https://lore. kernel. org/patchwork/patch/570506/) در نهایت می توان شمارش مبادله متناسب را دریافت کرد به این معنی که اگر یک فرآیند مقدار زیادی را تعویض کرده باشد و سپس آن را چنگال می زند ، هر دو چنگال می شوند. گزارش می شود که فرایندها هر کدام 50 ٪ تعویض می شوند. و اگر یا در آن زمان چنگال ها باشد ، هر فرآیند 33 ٪ از صفحات مبادله شده شمارش می شود ، بنابراین اگر تمام آن استفاده های مبادله ای را با هم حساب کنید ، به جای ارزش چند برابر با تعداد فرآیند ، استفاده از مبادله واقعی را دریافت می کنید.
به اختصار:
ستون اول PID است ، ستون دوم استفاده از مبادله در KIB است و بقیه خط فرمان اجرا می شوند. شمارش مبادله یکسان توسط PID طبقه بندی می شود.
در بالا ممکن است خطوطی مانند
which simply means that process with pid 15407 ended between seeing it in the list for /proc/ and reading the process smaps file. If that matters to you, simply add 2>/dev/null تا پایان. توجه داشته باشید که شما به طور بالقوه سایر تشخیص های ممکن را نیز از دست خواهید داد.
در مورد مثال دنیای واقعی ، این گزارش دیگر ابزارها را تغییر می دهد~40 مگابایت استفاده از مبادله برای هر کودک Apache که در یک سرور در حال اجرا است تا استفاده واقعی بین 7-3630 کیلوبایت در هر کودک استفاده شود.