Svchost.exe पर ललित प्रदर्शन रिपोर्टिंग


20

यह कुछ ऐसा है जो मुझे हमेशा परेशान करता है, इसलिए मैं सर्वर फॉल्ट समुदाय से पूछूंगा।

टास्क मैनेजर में मिलने वाले उच्च-स्तरीय कार्यों से अधिक का ट्रैक रखने के लिए मुझे प्रोसेस एक्सप्लोरर पसंद है । लेकिन मैं लगातार जानना चाहता हूं कि svchost के तहत एक एकल प्रक्रिया में होस्ट की गई उन दर्जन सेवाओं में से कौन सी मेरे प्रोसेसर को स्पाइक बना रही है।

तो ... क्या इस जानकारी को खोजने का कोई गैर-दखल देने वाला तरीका है?

जवाबों:


34

हां, एक (लगभग) गैर-घुसपैठ और आसान तरीका है:

प्रत्येक सेवा को अपने स्वयं के SVCHOST.EXE प्रक्रिया में चलाने के लिए विभाजित करें और सीपीयू चक्र का उपभोग करने वाली सेवा प्रक्रिया एक्सप्लोरर ("=" के बाद की जगह आवश्यक है) में आसानी से दिखाई देगी:

SC Config Servicename Type= own

इसे कमांड लाइन विंडो में करें या इसे बैट स्क्रिप्ट में डालें। प्रशासनिक विशेषाधिकार की आवश्यकता होती है और प्रभावी होने से पहले कंप्यूटर को पुनरारंभ करना आवश्यक होता है।

मूल राज्य द्वारा बहाल किया जा सकता है:

SC Config Servicename Type= share

उदाहरण: एक अलग SVCHOST.EXE में विंडोज मैनेजमेंट इंस्ट्रूमेंटेशन चलाने के लिए:

SC Config winmgmt Type= own

इस तकनीक का कोई बुरा प्रभाव नहीं है, सिवाय इसके कि शायद मेमोरी की खपत थोड़ी बढ़ जाए। और प्रत्येक सेवा के लिए सीपीयू उपयोग को देखने के अलावा, यह पेज दोष डेल्टा, डिस्क I / O रीड दर और डिस्क I / O लेखन दर का निरीक्षण करना आसान बनाता है। प्रोसेस एक्सप्लोरर के लिए, मेनू देखें / कॉलम चुनें: टैब प्रोसेस मेमोरी / पेज फॉल्ट डेल्टा, टैब प्रोसेस परफॉर्मेंस / आईओ डेल्टा राइट बाइट्स, टैब प्रोसेस परफॉर्मेंस / आईओ डेल्टा रीड बाइट्स, क्रमशः।


अधिकांश प्रणालियों पर केवल एक SVCHOST.EXE प्रक्रिया होती है जिसमें बहुत सारी सेवाएँ होती हैं। मैंने इस क्रम का उपयोग किया है (इसे सीधे कमांड लाइन विंडो में चिपकाया जा सकता है):

rem  1. "Automatic Updates"
SC Config wuauserv Type= own

rem  2. "COM+ Event System"
SC Config EventSystem Type= own

rem  3. "Computer Browser"
SC Config Browser Type= own

rem  4. "Cryptographic Services"
SC Config CryptSvc Type= own

rem  5. "Distributed Link Tracking"
SC Config TrkWks Type= own

rem  6. "Help and Support"
SC Config helpsvc Type= own

rem  7. "Logical Disk Manager"
SC Config dmserver Type= own

rem  8. "Network Connections"
SC Config Netman Type= own

rem  9. "Network Location Awareness"
SC Config NLA Type= own

rem 10. "Remote Access Connection Manager"
SC Config RasMan Type= own

rem 11. "Secondary Logon"
SC Config seclogon Type= own

rem 12. "Server"
SC Config lanmanserver Type= own

rem 13. "Shell Hardware Detection"
SC Config ShellHWDetection Type= own

rem 14. "System Event Notification"
SC Config SENS Type= own

rem 15. "System Restore Service"
SC Config srservice Type= own

rem 16. "Task Scheduler"
SC Config Schedule Type= own

rem 17. "Telephony"
SC Config TapiSrv Type= own

rem 18. "Terminal Services"
SC Config TermService Type= own

rem 19. "Themes"
SC Config Themes Type= own

rem 20. "Windows Audio"
SC Config AudioSrv Type= own

rem 21. "Windows Firewall/Internet Connection Sharing (ICS)"
SC Config SharedAccess Type= own

rem 22. "Windows Management Instrumentation"
SC Config winmgmt Type= own

rem 23. "Wireless Configuration"
SC Config WZCSVC Type= own

rem 24. "Workstation"
SC Config lanmanworkstation Type= own

rem End.

4
वाह, कमाल का समाधान +1
मैट सिमन्स

2
PowerShell स्क्रिप्ट की अनुशंसा करने वाले पोस्टर के लिए: मैंने इसे आज़माया और इसने सफलतापूर्वक मेरी सभी सेवाओं को बदल दिया। हालाँकि, रिबूट पर एक त्रुटि बॉक्स पॉप अप हुआ और एक पुनरारंभ शुरू हो गया था। मुझे 'अंतिम अच्छे कॉन्फ़िगरेशन' के साथ पुनर्स्थापित करना था। सावधान रहे।
user42670


1
@ क्रिस: ये विंडोज के बाद के संस्करणों में छेड़छाड़ से सुरक्षित हैं; मुझे लगता है कि यह विंडोज एक्सपी में महत्वपूर्ण है, हालांकि ...
तमारा विज्समैन

2
@ChrisS की-शेयर की गई सूची के लिंक के लिए धन्यवाद! वह स्थल अब मृत प्रतीत होता है। प्रति पुरालेख , सूची थी: HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay(सभी के साथ जुड़े lsass.exe)
cxw

2

हालांकि मुझे इसे सीधे करने के आसान तरीके का पता नहीं है, आप अक्सर इसे svchost प्रक्रिया के लिए प्रोसेस एक्सप्लोरर प्रॉपर्टीज पेज से प्राप्त कर सकते हैं। प्रक्रिया गुणों पर सेवा टैब आपको बताएगा कि उस प्रक्रिया में कौन सी सेवाएं होस्ट की गई हैं। और थ्रेड्स टैब आपको थ्रेड्स और थ्रेड स्टैक के साथ-साथ उनके CPU उपयोग को दिखाएगा। अक्सर थ्रेड पर प्रारंभ पता प्रविष्टि बिंदु DLL का संकेत देगा, और सेवा को विस्तारित करके, जो उस थ्रेड पर चल रहा है। दूसरी बार आप थ्रेड कॉलस्टैक को देख सकते हैं और कॉल स्टैक में मॉड्यूल का नाम देखेंगे जो आपको बताता है कि कौन सा कोड कोड चल रहा है।


1

सेवा प्रकटीकरण उपकरण आज़माएं । यह:

  1. स्टोर सेवाएँ जो svchost.exe प्रक्रिया को साझा करती हैं।
  2. अलग-अलग प्रक्रिया में चलाने के लिए सेवाओं को कॉन्फ़िगर करता है। रिबूट के बाद आप प्रत्येक सेवा को अलग प्रक्रिया में देखेंगे।
  3. एक प्रक्रिया में वापस चरण # 1 सेवाओं पर संग्रहीत सभी लौटाता है।

आपकी टिप्पणियों और सुझावों का स्वागत है।

@ पेटर मोर्टेंसन: विचार के लिए धन्यवाद।


1
Dmytro, जहाँ मैं आपके सेवा प्रकटीकरण उपकरण का उपयोग करना सीख सकता हूँ? मैंने विंडोज 7 पर service_disclos.exe डाउनलोड किया और चला गया। संक्षेप में मैंने एक ब्लैक कमांड विंडो खुली और बंद देखी, लेकिन ऐसा कुछ भी नहीं हुआ। यह वियोग था! मैं यह जानना चाहता हूं कि इसने मेरे कंप्यूटर पर क्या किया और उपकरण का सही उपयोग कैसे किया।
DeveloperDan

हाय दान। कृपया इस चरण-दर-चरण गाइड ( sourceforge.net/p/svcdisclsr/wiki/Home ) पर विचार करें
Dmytro Ovdiienko

1

सावधानी: कृपया इसे लागू करने से पहले आवश्यक शोध, बिंदु और बैकअप प्रक्रियाओं को पुनर्स्थापित करें, साथ ही यह भी जांच लें कि सब कुछ अभी भी काम कर रहा है। रिकवरी एनवायरनमेंट के माध्यम से केवल गैर-आरओडी सिस्टमों पर, साथ ही साथ राउड और नॉन-आरओडी दोनों प्रणालियों पर सेफ मोड के माध्यम से इससे उबरना संभव है। यह एक डेवलपर मशीन पर परीक्षण किया गया है, सर्वर पर नहीं।

पॉवर्सशेल में, आप निम्न आदेशों का उपयोग करके सभी गैर-लस सेवाओं के लिए ऐसा कर सकते हैं:

Get-Service | ForEach-Object `
    { SC.EXE config $_.Name type= own }
ForEach ($svc in @("efs", "keyiso", "netlogon", "policyagent", "samss", "vaultsvc", `
    "was", "w3svc")) `
    { SC.EXE config $svc type= share }

यहां जो सूची बाहर रखी गई है उसे सभी को एक साझा lsass.exe में चलाने की आवश्यकता है, जो कि नीतिगत अपवाद के साथ है , जो कि समूह नीति एजेंट को बूट के दौरान ठीक से संवाद करने के लिए आवश्यक है।

इसके अलावा हाल ही में पता चला था कि (प्रोसेस एक्टिवेशन) और w3svc (IIS वर्ल्ड वाइड वेब) को अपनी प्रक्रियाओं को साझा करने की आवश्यकता है, इसलिए उन्हें बहिष्करण में जोड़ा गया है।

यह विंडोज 10 (1607, निर्माण 14393.953) पर परीक्षण किया गया, अपवर्जन हैं XP में विभिन्न ...


0

मुझे नहीं पता कि क्या यह अभी भी एक सवाल है जो आप उत्तर चाहते हैं, लेकिन ग्राहक की svchost त्रुटि का निवारण करते समय, मैंने सीखा कि इसके लिए एक कमांड लाइन है: "टास्कलिस्ट / svc" यह चल रही प्रक्रियाओं की पूरी सूची देता है, प्रक्रिया आईडी और सेवाओं के साथ प्रत्येक प्रक्रिया चल रही है। यह एक प्रोसेसर उपयोग नहीं देता है, लेकिन आप उन्हें प्रक्रिया आईडी द्वारा एक समय में एक प्रक्रिया को बंद कर सकते हैं, और कम से कम जान सकते हैं कि कौन सी सेवाओं का समूह आपके सीपीयू को रोक रहा है।


0

अब, आप सेवा प्रकार को "स्वयं प्रक्रिया" में बदलने के लिए पॉवरशेल का उपयोग कर सकते हैं और प्रत्येक के लिए मेमोरी को व्यक्तिगत रूप से देख सकते हैं। यह Gist पूरा कोड दिखाती है। केंद्रीय विचार सेवा के प्रकार को कम से कम घुसपैठ से सबसे अधिक घुसपैठ के तरीके से बदलने की कोशिश कर रहा है:

$win32Service = Get-CimInstance -ClassName Win32_Service -Filter "Name = '$ServiceName'" -Verbose:$false

if ($win32Service)
{
    if (!(Set-ServiceTypeToOwnProcessByCim $win32Service))
    {
        if (!(Set-ServiceTypeToOwnProcessByWindowsRegistry $win32Service))
        {
            if (Grant-FullControlRightsOnServiceRegistryKeyToCurrentUser $win32Service)
            {
                Set-ServiceTypeToOwnProcessByWindowsRegistry $win32Service | Out-Null
            }
        }
    }
}
else
{
    Write-Warning "[$ServiceName] Service not found"
}

एक ही फ़ोल्डर में Set-ServiceTypeToOwnProcess.ps1और Enable-Privilege.ps1फाइलें डालते समय , आप स्क्रिप्ट को इस तरह निष्पादित कर सकते हैं:

.\Set-ServiceTypeToOwnProcess.ps1 -ServiceName 'Appinfo', 'gpsvc', 'Schedule', 'SENS', 'SessionEnv', 'wuauserv'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.