یکی از پردازش‌هایی که در تاسک منیجر ویندوز ۱۰ مشاهده می‌کنیم و گاهی به شدت از CPU کار می‌کشد و سیستم را کند می‌کند، WMI Provider Host یا WmiPrvSE.exe است. سرویس WMI Provider Host بخش مهمی از ویندوز است که در پس‌زمینه اجرا می‌شود و به اپلیکیشن‌ها اجازه می‌دهد تا در مورد سیستم، اطلاعات کسب کنند. در حالت عادی این سرویس بسیار سبک است و مشکلی وجود ندارد اما ممکن است گاهی به شدت از منابع پردازشی استفاده کند.

در این مقاله با سرویس WMI Provider Host ویندوز آشنا می‌شویم و مشکلاتی که ممکن است به مصرف نسبتاً بالای پردازنده توسط این پردازش منتهی شود را بررسی می‌کنیم و راه حل‌هایی مطرح می‌کنیم. با ما باشید.

WMI Provider Host چیست و چه نقشی در ویندوز دارد؟

WMI مخفف Windows Management Instrumentation و به معنی مدیریت ابزارهای ویندوزی است. کار این سرویس این است که راهکاری استاندارد برای اسکریپت‌های نرم‌افزاری و مدیریتی برای دریافت اطلاعات در مورد وضعیت سیستم ویندوزی و اطلاعات آن، ایجاد کند. WMI Providers به معنی فراهم‌کنندگان اطلاعات موردبحث است.

به عنوان مثال اگر یک نرم‌افزار یا دستور ساده، اطلاعاتی در مورد درایو رمزگذاری‌شده با قابلیت BitLocker لازم داشته باشد، WMI Providers وارد عمل می‌شوند و وضعیت را گزارش می‌کنند.

مایکروسافت لیستی از WMI Providerها را در وب‌سایت خود منتشر کرده است. WMI قابلیت مهمی برای سازمان‌ها محسوب می‌شود چرا که در کنترل کردن سیستم‌ها، جمع‌آوری اطلاعات سیستم‌های ویندوزی، بسیار مهم است.

مثال ساده‌ای از کاربرد WMI را بررسی کنید: با دستور زیر می‌توان اطلاعات مفیدی مثل سازنده، کد محصول، سریال نامبر و ورژن آن را استخراج کرد:

wmic baseboard get product,Manufacturer,version,serialnumber

همان‌طور که در تصویر زیر مشاهده می‌کنید اطلاعات مادربورد سیستم در cmd نمایان می‌شود:

چرا WMI به شدت از CPU استفاده می‌کند و چگونه مشکل را حل کنیم؟

در حالت عادی حتی اگر از WMI برای چند کاربری مختلف استفاده شود، استفاده از پردازنده نسبتاً کم خواهد بود و مشکلی وجود ندارد اما گاهی مواقع درصد استفاده از CPU به شدت افزایش پیدا می‌کند و این وضعیت ادامه‌دار است! در این صورت قطعاً مشکلی در اسکریپت‌ها و نرم‌افزارهایی که از WMI به عنوان واسط ارتباطی استفاده کرده‌اند، وجود دارد. در حقیقت بالا رفتن استفاده از CPU برای لحظاتی کوتاه، طبیعی تلقی می‌شود اما تداوم آن غیرمنطقی است.

ویندوز را ری‌استارت کنید

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

نرم‌افزارها و اسکریپت‌های مشکل‌ساز را شناسایی و غیرفعال یا حذف کنید

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

برای شناسایی بهتر می‌توان از ابزار Event Viewer ویندوز به بررسی اتفاقات اخیر پرداخت و متوجه شد که کدام پردازش و نرم‌افزار و در چه زمانی، درخواست اطلاعات کرده و مشکل را به وجود آورده است.

برای اجرا کردن Event Viewer در ویندوز‌های ۷ و ماقبل آن، کلید ترکیبی Windows + R را فشار دهید. در پنجره‌ی Run دستور Eventvwr.msc را تایپ کنید و سپس کلید اینتر را فشار دهید و یا روی دکمه‌ی OK کلیک کنید.

در ویندوز ۸ و ۱۰ می‌توان روی منوی استارت راست‌کلیک کرد و گزینه‌ی Event Viewer را مستقیماً انتخاب کرد.

در پنجره‌ی ابزار Event Viewer ویندوز و در ستون سمت چپ، مسیر زیر را طی کنید:

Applications and Service Logs\Microsoft\Windows\WMI-Activity\Operational

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

توجه: هر بار که نرم‌افزار یا پردازشی اجرا می‌شود، یک شناسه‌ی جدید به آن اختصاص داده می‌شود. لذا ClientProcessId تا زمانی که پردازش و نرم‌افزار مربوطه بسته نشده باشند، کاربرد دارد.

ممکن است چندین ارور در لیست داشته باشید و شناسه‌ی پردازش یا ClientProcessId همه، یکی باشد. در این صورت وضعیت کاملاً روشن است و می‌توانید پردازش موردبحث را به سرعت پیدا کنید، اما در غیر این صورت باید چند پردازش مختلف را بررسی کنید و با سعی و خطا، متوجه شوید که کدام‌یک عامل مشکلات اخیر بوده است.

چطور پردازش‌ها را با شناسه‌شان پیدا کنیم؟

به این منظور روی تسک‌بار راست‌کلیک کنید و گزینه‌ی Task Manager را انتخاب کنید. روش دیگر شرت‌کات Ctrl + Shift + Esc است که در نسخه‌های مختلف ویندوز برای اجرا کردن تاسک منیجر به کار می‌رود.

در تاسک‌ منیجر اگر نمای ساده فعال است، روی More details کلیک کنید.

در تب Details تاسک منیجر، ستونی به اسم PID موجود است. روی تیتر این ستون کلیک کنید تا پردازش‌ها به ترتیب شناسه‌شان مرتب شوند و به راحتی عددی که یادداشت کرده‌اید را در لیست پیدا کنید. توجه کنید که شناسه‌ی نرم‌افزارها و پردازش‌ها، مرتباً تغییر می‌کند. بنابراین باید زمانی که WMI به شدت از پردازنده کار می‌کشد، عیب‌یابی را انجام دهید و به نتیجه‌ی قطعی برسید.

در نهایت می‌توانید نام پردازش را گوگل کنید و در فروم‌ها و وب‌سایت‌ها، به دنبال راه حل بگردید و اگر هیچ راه‌حلی پیدا نکردید، نرم‌افزار مربوطه را شناسایی و حذف کنید. برای شناسایی کردن نرم‌افزار، کافی است روی پردازش مشکل‌ساز راست‌کلیک کرده و Open file loacation را انتخاب کنید. با توجه به مسیر فولدر، می‌توان حدس زد که پردازش به کدام نرم‌افزار نصب‌شده روی سیستم مربوط می‌شود.

راه حل موقتی نیز این است که پردازش موردبحث را با راست‌کلیک کردن و گزینه‌ی End task و یا انتخاب کردن با چپ‌کلیک و زدن کلید Delete کیبورد، ببندید.

سرویس WMI را ری‌استارت کنید

راه حل دوم این است که سیستم ویندوزی را به صورت کامل ری‌استارت نکنیم و مستقیماً سراغ سرویس WMI برویم. به این منظور در منوی استارت، عبارت Services را جست‌وجو کنید.

می‌توان این ابزار را با استفاده از پنجره‌ی Run ویندوز نیز اجرا کرد. به این منظور کلید ترکیبی Windows + R را فشار دهید و عبارت services.msc را تایپ کرده و در نهایت کلید Enter کیبورد را فشار دهید.

در پنجره‌ی Services، لیست پردازش‌ها را خواهید دید. وضعیت اجرا یا Status نشان می‌دهد که در حال حاضر پردازش اجرا شده و به عبارت دیگر Running است یا خیر.

در لیست به دنبال گزینه‌ای به اسم Windows Management Instrumentation service بگردید. روی آن راست‌کلیک کنید و گزینه‌ی Restart را انتخاب نمایید.