2009-03-09 19 views
9

मेरे पास तीसरे पक्ष के आवेदन के साथ एक क्वाड कोर सिस्टम है जो एक समय में कई प्रक्रियाओं को स्पिन करता है (हमेशा एक ही निष्पादन योग्य लेकिन इसके कई उदाहरण) और 100% CPU समय लेता है। मेरे पास एक ही बॉक्स (आईआईएस और तीसरी पार्टी) पर चल रही कुछ वेब सेवाएं भी हैं।विंडोज एक्सपी में निष्पादन योग्य पर प्रोसेसर एफ़िनिटी कैसे सेट करें?

व्यस्त सभी कोरों के साथ समस्या यह है कि यह इस तीसरे पक्ष के वेब सर्वर को टाइमआउट पर बनाता है (आईआईएस ठीक काम करता है, बस सामान्य से धीमा)। मेरा तीसरा पक्ष वेब सर्वर पर कोई नियंत्रण नहीं है, यह बड़े उत्पाद का हिस्सा है और इसे परिचालन करना है। इसलिए, मैंने प्रोसेसर एफ़िनिटी (SysInternals Process Explorer के माध्यम से) के साथ खेलने की कोशिश की और उन अजीब प्रक्रियाओं को 4 में से 3 कोर तक सीमित कर दिया और तीसरे पक्ष के वेब सर्वर को चौथा कोर समर्पित किया, और ऐसा लगता है कि यह काफी अच्छा काम करता है।

समस्या यह है कि यह केवल चल रही प्रक्रिया पर एफ़िनिटी सेट करता है, निष्पादन योग्य स्तर पर नहीं, इसलिए उन प्रक्रियाओं के बाद खत्म हो जाती है और बाद में नई प्रक्रियाओं के रूप में राहत मिलती है, यह सब एक ही फिर से होती है - वे सभी 4 कोर लेते हैं। इसलिए, मैंने माइक्रोसॉफ्ट से इस ImageCfg.exe उपयोगिता के बारे में गुमराह किया है लेकिन मुझे इसे डाउनलोड करने के लिए माइक्रोसॉफ्ट वेबसाइड पर नहीं मिल रहा है और मुझे लगता है कि कुछ लोगों ने इसे आजमाया और अब शिकायत की है कि यह वास्तव में काम नहीं करता है।

क्या निष्पादन योग्य के साथ संबंध रखने का कोई तरीका है?

+1

आपका पहला कॉल सॉफ़्टवेयर के प्रकाशक को प्रश्न में होना चाहिए। उनसे पूछें कि थ्रेड उपयोग को सीमित कैसे करें। – NotMe

+0

हालांकि, समस्या अभी भी दिलचस्प है क्योंकि सॉफ़्टवेयर में वह सुविधा नहीं हो सकती है। और वहां निश्चित रूप से अन्य सॉफ़्टवेयर मौजूद हैं जो नहीं ... हर बार विक्रेता को कॉल करना परेशान होगा। – ine

उत्तर

5

Process Lasso की एक विशेषता यह प्रक्रिया शुरू होने पर प्रक्रिया के संबंध को सेट करना है।

3

SetProcessAffinityMask() का उपयोग करें। और सावधान रहना, Processor Affinity is inherited!

आप ImageFileExecutionOptions का उपयोग विशेष रूप से the "Debugger" option, और अपने खुद के छोटे निष्पादन योग्य है कि खुद पर SetProcessAffinityMask() कहता है, और फिर एक नई प्रक्रिया spawns, जो एक आप के लिए आत्मीयता सेट करना चाहते है लिखने के लिए की आवश्यकता होगी । इसे डीबगर के रूप में सेट करें, और आप कर चुके हैं।

+1

वास्तव में इस पर प्रलेखन पढ़ें। आप आसानी से पैर में खुद को गोली मार सकते हैं; बहुत सारे गॉथस। –

5

आप /AFFINITY पैरामीटर start पर देख सकते हैं।

मदद से:

AFFINITY The new application will have the specified processor 
      affinity mask, expressed as a hexadecimal number. 

विंडोज पर प्रोसेसर आत्मीयता के रूप में बिटमास्क आप कुछ प्रयोग की आवश्यकता हो सकती है, लेकिन मुझे लगता है था 1, पहली कोर किया जा रहा है इसलिए 7 पहले तीन कोर जा रहा है और F सब किया जा रहा है चार। या केवल चौथे के लिए 8

आप उचित पैरामीटर के साथ start पर कॉल के साथ अनुसूचित कार्यों या शॉर्टकट को प्रतिस्थापित कर सकते हैं।

+1

विंडोज एक्सपी में 'एफ़िनिटी' विकल्प नहीं है। –

3

आप एकल प्रोसेस एफ़िनिटी एप्लिकेशन शिम का उपयोग निष्पादन योग्य स्तर पर एक प्रोसेसर को मजबूर करने के लिए कर सकते हैं, जो प्रक्रिया को एक कोर पर मजबूर कर देगा।

यह आलेख, http://msdn.microsoft.com/en-us/library/bb173458.aspx, शिम को नीचे की ओर सक्षम करने पर एक अनुच्छेद है।

+0

आलेख http://msdn.microsoft.com/en-us/library/ee417693.aspx –

0

आप प्रक्रिया की प्राथमिकता को सेट करने का प्रयास कर सकते हैं ताकि यहां तक ​​कि यदि यह 100% सीपीयू का उपयोग करने का निर्णय लेता है, तो ऐसा कुछ भी हो सकता है जब इसे ऐसा करने की आवश्यकता हो।

Doing this automatically (टास्क मैनेजर में खेलने के बजाए) कुछ ऐसा है जो मैंने कुछ समय पहले पूछा था।

+0

पर ले जाया गया है प्रश्न प्रोसेसर एफ़िनिटी के बारे में है, प्रक्रिया प्राथमिकता नहीं है। –

3

ImageCfg.exe उपयोगिता काम करता है। मैंने आज इसे कंपनी के मुद्दे को हल करने के लिए इस्तेमाल किया।यह उपलब्ध है से http://www.robpol86.com/pages/imagecfg.php

Imagecfg -एक 0x3 xxx.exe

, CPU0 और CPU1 को .exe को सीमित करता है, उदाहरण के लिए।

+0

पता नहीं क्यों, लेकिन यह मेरे मामले में काम नहीं किया। – bychkov

6

http://waynes-world-it.blogspot.com/2009/06/processor-affinity-on-windows-server.html

PowerShell

उपयोग PowerShell एक या अधिक चल रहा है प्रक्रियाओं के लिए प्रोसेसर आत्मीयता स्थापित करने के लिए। पहले 4 प्रोसेसर में calc.exe के प्रोसेसर मास्क को सेट करते हुए नीचे एक उदाहरण स्क्रिप्ट है। मुझे यह विधि पसंद है क्योंकि स्क्रिप्ट सरल है, यह निर्धारित करना आसान होगा, x86 और x64 पर काम करता है, उसी नाम की कई प्रक्रियाओं का समर्थन करता है और कम से कम आंशिक रूप से क्योंकि यह हाइलाइट करता है कि PowerShell के साथ प्रशासन कितना आसान है।

ध्यान दें कि यदि आप calc.exe (n!) के साथ बड़ी संख्या में फ़ैक्टोरियल का उपयोग करते हैं तो आप 100% CPU उत्पन्न करेंगे जो परीक्षण के लिए उपयोगी हो सकता है। नीचे मुखौटा 0xf = 1111 है - केवल पहले चार प्रोसेसर की एक मुखौटा उपयोग करने की अनुमति:

$calcSet = Get-Process -ProcessName "calc" 
foreach ($calc in $calcSet) {$calc.ProcessorAffinity=0xF} 
1

जाहिर है इस सूत्र पुरानी हो चुकी है, लेकिन im वैसे भी एक टिप्पणी जोड़ने सिर्फ मामले में किसी को भी इस विषय पर Google की (मैंने किया था के रूप में)

आप प्रक्रिया की प्राथमिकता को सेट कर सकें तो भले ही वह , सीपीयू की 100% कुछ है कि है उच्च प्राथमिकता है जब यह ऐसा करने के लिए की जरूरत है सकते हैं अपने हाथ में लेने का उपयोग करने का फैसला करता है कि।

इसे स्वचालित रूप से करना (कार्य प्रबंधक में खेलने के बजाए) कुछ समय पहले मैंने कुछ पूछा था।

प्रारंभ कमांड का उपयोग प्रक्रिया की स्टार्टअप प्राथमिकता सेट करने के लिए किया जा सकता है।

ईजी। कम प्राथमिकता के लिए start "my path\my process" /LOW

अनुमति प्राथमिकता स्विच LOW, NORMAL, HIGH, REALTIME, ABOVENORMAL, BELOWNORMAL

उदाहरण के लिए एक batchfile से कहा जा सकता है।

+0

प्रश्न प्रोसेसर एफ़िनिटी के बारे में है, प्रक्रिया प्राथमिकता नहीं। –