सवाल प्रक्रिया एक निर्धारित कार्य के रूप में धीमी गति से चलती है, यह अंतःक्रियात्मक रूप से करती है


मेरे पास एक निर्धारित कार्य है जो बहुत सीपीयू- और आईओ-गहन है, और चलाने के लिए लगभग चार घंटे लगते हैं (यदि आप उत्सुक हैं तो बिल्डिंग सोर्स कोड)। यह कार्य एक पावरहेल स्क्रिप्ट है जो अपने काम करने के लिए विभिन्न उप-प्रक्रियाओं को जन्म देता है। जब मैं एक ही प्रक्रिया को एक पावरहेल प्रॉम्प्ट से इंटरैक्टिव रूप से चलाता हूं, उसी उपयोगकर्ता खाते के रूप में, यह लगभग ढाई घंटे तक चलता है। कार्य विंडोज सर्वर 2008 आर 2 पर चल रहा है।

मैं क्या जानना चाहता हूं कि नियत कार्य के रूप में चलाने में इतना लंबा समय लगता है - एक घंटे से अधिक समय तक। एक बात मैंने देखी है कि कार्य शेड्यूलर नीचे-सामान्य प्राथमिकता पर चलता है, इसलिए जब मेरा कार्य शुरू होता है, तो यह वही कम प्राथमिकता प्राप्त करता है। हालांकि, मैंने पावरहेल प्रक्रिया प्राथमिकता को सामान्य पर वापस सेट करने के लिए स्क्रिप्ट को अद्यतन किया है, और यह अभी भी उतना ही समय लेता है।

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


37
2018-06-16 18:05


मूल


कोई सुधार? मैं यह देखने के लिए बहुत उत्सुक हूं कि आप क्या पा सकते हैं। - mfinni
मुझे लगता है कि मुझे क्या कारण था; नीचे मेरा जवाब देखें। - Charlie
विंडोज 10 फॉल क्रिएटर के रूप में, यह समस्या अभी भी मौजूद है और @ जेसन मैथिसन का वर्कअराउंड (टास्क शेड्यूलर .xml फ़ाइल संपादित करें) अभी भी सबसे अच्छा समाधान है। - BSalita


जवाब:


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

वैसे भी, निर्धारित कार्य प्राथमिकता तय करने के साथ भी, आपके कार्य की स्मृति प्राथमिकता 4 पर सेट की गई है, जो 5 की सामान्य सेटिंग के नीचे एक पायदान है। जब मैंने मैन्युअल रूप से 5 तक अपने कार्य की स्मृति प्राथमिकता को बढ़ाया, तो प्रदर्शन चालू था प्रक्रिया को पारस्परिक रूप से चलाने के बराबर।

प्राथमिकता को बढ़ावा देने के बारे में जानकारी के लिए, देखें संबंधित स्टैक ओवरफ्लो प्रश्न का मेरा जवाब आईओ प्राथमिकता के बारे में; स्मृति प्राथमिकता को सेट करना इसी तरह, एनटीएसईटी इन्फोर्मेशन प्रोसेस के माध्यम से किया जाता है PROCESS_INFORMATION_CLASS करने के लिए सेट ProcessMemoryPriority (इसका मूल्य 39 या 0x27 है)। मैं एक मुफ्त उपयोगिता बना सकता हूं जिसका उपयोग इसे सेट करने के लिए किया जा सकता है, अगर दूसरों को इसकी आवश्यकता है और प्रोग्रामर टूल्स तक पहुंच नहीं है।

संपादित करें: मैं आगे बढ़ गया हूं और किसी कार्य की स्मृति प्राथमिकता को क्वेरी करने और सेट करने के लिए एक निःशुल्क उपयोगिता लिखी है, यहां उपलब्ध है। डाउनलोड में स्रोत कोड और एक संकलित बाइनरी दोनों शामिल हैं।


32
2018-06-21 01:08



खुशी है कि आप इसे मिला, साझा करने के लिए धन्यवाद। - MadBoy
आप एक्ज़ीक्यूटेबल के नाम पर डबल क्लिक करके प्रोसेस एक्सप्लोरर में मेमोरी प्राथमिकता देख सकते हैं, "प्रदर्शन" टैब खोलकर और "भौतिक मेमोरी" के तहत "मेमोरी प्राथमिकता" के लिए एक प्रविष्टि है। - Moshe


मुद्दा यह है कि आपकी प्रक्रिया कम I / O प्राथमिकता और कम स्मृति प्राथमिकता से शुरू हो रही है। इसे सत्यापित करने का सबसे आसान तरीका sysinternals से प्रक्रिया एक्सप्लोरर के साथ है। यदि आप इस निर्धारित कार्य से उत्पन्न की गई किसी भी प्रक्रिया के गुणों को देखते हैं, तो आप देखेंगे कि इसमें 2 की निम्न और स्मृति प्राथमिकता की I / O प्राथमिकता है।

इस मुद्दे का समाधान यहां दिया गया है:

  1. कार्य बनाएं
  2. कार्य पर राइट क्लिक करें और इसे "निर्यात करें"
  3. Task.xml फ़ाइल को संपादित करें जिसे आपने अभी निर्यात किया था
  4. आपको समान रेखा मिल जाएगी <Priority>7</Priority>
  5. मान को सामान्य प्राथमिकता में बदलें (4-6 के बीच)। संभावित मूल्यों की एक तालिका: टास्कसेटिंग। प्राथमिकता संपत्ति
    • 4 के मान में एक ही I / O और स्मृति प्राथमिकता एक इंटरैक्टिव प्रक्रिया के रूप में होगी। 5 और 6 के मानों में कम स्मृति प्राथमिकता होगी
  6. कार्य शेड्यूलर में, प्रारंभिक रूप से बनाए गए कार्य को हटाएं
  7. कार्य शेड्यूलर में, क्रिया क्षेत्र में, XML फ़ाइल से कार्य आयात करें

दुर्भाग्य से जीयूआई से निर्धारित कार्यों की प्रारंभिक प्राथमिकता को संशोधित करने का कोई तरीका नहीं है।


15
2018-04-08 04:37



सलाह के लिये धन्यवाद। नियमित प्रक्रिया प्राथमिकता और आईओ प्राथमिकता निश्चित रूप से इसका हिस्सा हैं, और दूसरा भाग स्मृति प्राथमिकता है। अधिक जानकारी के लिए स्वीकृत उत्तर देखें। - Charlie
किसी XML फ़ाइल को कार्य निर्यात करने के बाद, आपको यूनिकोड से एएनएसआई तक वर्ण एन्कोडिंग को बदलने की आवश्यकता हो सकती है। विंडोज सर्वर 2008 आर 2 पर, निर्यात एक यूनिकोड फ़ाइल है और जब आप इसे वापस आयात करने का प्रयास करते हैं, तो त्रुटि संदेश The format of the task is not valid. The following error was reported: (1,2):: दिया हुआ है। फाइल को एएनएसआई में सहेजना मेरे लिए इसे हल करें। - Erik Anderson
बहुत बहुत धन्यवाद, यह वास्तव में सबसे अच्छा समाधान है। जैसा कि दस्तावेज़ों का उल्लेख है, आप उच्च CPU प्राथमिकता प्राप्त करने के लिए प्राथमिकता को भी कम से कम 1 तक सेट कर सकते हैं। - Rune Aamodt
किसी को भी सोचने के लिए कि आप रजिस्ट्री में इसे ट्विक करने में सक्षम हो सकते हैं, परेशान न करें, ऐसा लगता है कि यह एक अच्छी तरह से संपादन योग्य तरीके से नहीं है। - Nik


यदि आप इसे उपयोगकर्ता एक्स के रूप में शेड्यूल किए गए कार्य के रूप में चलाने के लिए सेट करते हैं, और उसके बाद इसे चलाने के पहले उपयोगकर्ता एक्स के रूप में लॉगिन करते हैं, तो इसे चलाने पर आपके सत्र में एक विंडो खोलनी चाहिए, यह आपके सत्र में चल रही होगी।

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

एक और विचार: इसे अनुसूचित कार्य के रूप में चलाने पर - अब जब आपने अपनी स्क्रिप्ट पर प्राथमिकता तय की है तो उप-प्रक्रियाओं को सामान्य, या नीचे-सामान्य के रूप में चलाया जाता है?


1
2018-06-16 18:42



Subprocesses निश्चित रूप से सामान्य के रूप में चलाते हैं, जैसा procexp / taskman द्वारा सत्यापित किया गया है। मुझे लगता है कि नेटवर्क चीज यह नहीं है, क्योंकि यह कोई वास्तविक नेटवर्क एक्सेस नहीं करता है, लेकिन मैं इसे दोबारा जांचूंगा। कार्य को इंटरैक्टिव के रूप में चलाने के बारे में विचार भी दिलचस्प है, मैं इसे आज़मा दूंगा। - Charlie
इस प्रक्रिया को किसी भी नेटवर्क पहुंच को करने की आवश्यकता नहीं है जिसे आप जानते हैं कि यह समस्या है। इस पोस्ट को Sysinternals से पढ़ें और देखें कि कुछ प्रतीत होता है कि कैसे असंबंधित लटका / धीमा हो सकता है। blogs.technet.com/b/markrussinovich/archive/2005/08/28/... - mfinni


शायद अनुसूचित कार्य डिफ़ॉल्ट रूप से कम प्राथमिकता पर चलते हैं।

उपयोग prio उच्च प्राथमिकता को मजबूर करने के लिए।


1
2018-06-16 18:11



आप सही हैं कि वे कम प्राथमिकता पर चलते हैं, लेकिन जैसा कि मैंने उल्लेख किया है, मैंने पहले से ही इसके लिए जिम्मेदार ठहराया है। जब तक प्रक्रिया प्राथमिकता के अलावा कुछ प्राथमिकता न हो जो मुझे नहीं पता। - Charlie


पहले - आप सामान्य प्राथमिकता से अधिक उपयोग कर सकते हैं (उदाहरण के लिए उच्च)

दूसरे पर - आपको समझना होगा, अग्रभूमि सत्र से कुछ संसाधन लेते हैं, मुख्य रूप से हार्ड डिस्क IO और स्मृति इसलिए निर्धारित कार्य कम हो जाता है। स्पष्ट बेंचमार्क के लिए आपको लॉगऑफ करना होगा जबकि आप स्क्रिप्ट चल रहे हैं

और आप प्रक्रियाओं को तेज करने के लिए कई हार्ड डिस्क पर अधिक स्मृति / उपयोग रैमड्राइव / स्प्लिट काम जोड़ने का प्रयास कर सकते हैं


0
2018-06-17 13:05



विचारों के लिए धन्यवाद। मशीन में बहुत सारी मेमोरी और आईओ क्षमता है, समस्या यह है कि चीजें नियत कार्यों के मुकाबले धीरे-धीरे चलती हैं। जब निर्धारित कार्य चल रहा है, आमतौर पर कोई इंटरैक्टिव लॉगऑन सत्र नहीं होता है, इसलिए मुझे लगता है कि यह मुद्दा भी नहीं है। - Charlie