त्रुटि एमएसबी 4166: चाइल्ड नोड समय से बाहर निकल गया। बंद करना

कभी-कभी मेरा निर्माण इस त्रुटि के साथ विफल रहता है।

 0>MSBUILD : error MSB4166: Child node "3" exited prematurely. Shutting down.

ऐसा लगता है कि यह पूरी तरह यादृच्छिक है और मैं इसे इच्छानुसार पुन: उत्पन्न करने में सक्षम नहीं हूं। मैं वीएस -2010 विन 7 एक्स 64 एमएसबिल्ड 4.0 चला रहा हूं लेकिन यह समस्या प्लेटफ़ॉर्म और ओएस स्वतंत्र प्रतीत होती है। मैं समांतर (/ एम स्विच + BuildInParallel = True) में समाधान बना रहा हूं और मैं इस सुविधा को अक्षम नहीं करना चाहता क्योंकि मैं 800+ परियोजनाओं वाले अनुप्रयोग को संकलित कर रहा हूं। किसी भी विचार को हल करने के लिए कैसे?

संपादित करें: जब मैंने .NET 4.5 डेवलपर पूर्वावलोकन स्थापित किया है, तो MSBuild 4.5 में त्रुटि लॉगिंग में सुधार हुआ था और अब त्रुटि स्ट्रिंग इस तरह दिखती है:

error MSB4166: Child node "3" exited prematurely. Shutting down. Diagnostic information may be found in files in the temporary files directory named MSBuild_*.failure.txt

मैं Temp फ़ोल्डर में त्रुटि लॉग फ़ाइल पा सकते हैं। यह MSBuild _ *। Fail.txt फ़ाइल की सामग्री है:

System.InvalidOperationException: BuildEventArgs has formatted message while serializing!
   at Microsoft.Build.Framework.LazyFormattedBuildEventArgs.WriteToStream(BinaryWriter writer)
   at Microsoft.Build.Framework.BuildMessageEventArgs.WriteToStream(BinaryWriter writer)
   at Microsoft.Build.Shared.LogMessagePacketBase.WriteToStream(INodePacketTranslator translator)
   at Microsoft.Build.BackEnd.NodeEndpointOutOfProcBase.PacketPumpProc()
19
अजीब चीज यह है कि मैं 64 बिट विन 7 लैपटॉप पर 64 बिट एमएसबिल्ड का उपयोग कर रहा हूं जिसमें 4 जीबी भौतिक और "असीमित" वर्चुअल रैम है। एमएसबिल्ड प्रक्रिया लगभग 1 जीबी रैम (1,5 जीबी शिखर) का उपयोग कर रही है।
जोड़ा लेखक Ludwo, स्रोत
हां, ऐसा लगता है कि एमएसबिल्ड वर्चुअल मेमोरी का उपयोग नहीं कर रहा है :)
जोड़ा लेखक Ludwo, स्रोत
लेकिन यह सच नहीं है। मैंने इसे चेक किया और यह इस मुद्दे पर विफल रहा अगर इसमें 800 एमबी मुफ्त भौतिक मेमोरी उपलब्ध है।
जोड़ा लेखक Ludwo, स्रोत
मुझे एक ही समस्या है। मैंने इस त्रुटि से संबंधित मेमोरी अपवाद भी देखा है। इसे एक साथ बनाने के लिए प्रतिबंधित करने से मदद नहीं मिलती है; यह अभी भी त्रुटियों से बाहर है: यहां स्क्रीनशॉट देखें ; त्रुटि तब होती है जब स्मृति खपत भौतिक उपलब्ध स्मृति से अधिक हो जाती है। इसमें मौत के साथ कुछ करीबी ब्रश थे और फिर यह अधिकतम और मर गया, इसके साथ आउटलुक और प्रोसेस एक्सप्लोरर को ले जा रहा था, जो एक जेआईटी डीबगर पेश करता है जो शुरू नहीं होगा, और एमएसबील्ड.एक्सई को स्मृति पर बैठे ज़ोंबी प्रक्रिया बनने के लिए रिलीज़ करेगा जब तक मैं इसे मैन्युअल रूप से मार नहीं देता।
जोड़ा लेखक Kevin Vermeer, स्रोत
मैं 32 बिट एमएसबिल्ड का उपयोग 32-बिट WinXP डेस्कटॉप पर 2 जीबी भौतिक और इसी तरह असीमित वर्चुअल रैम के साथ कर रहा हूं। अजीब चीज यह है कि क्रैश तब होता है जब भौतिक RAM पूरी तरह से उपयोग किया जाता है। ऐसा लगता है कि मुझे शून्य वर्चुअल मेमोरी मिल गई है!
जोड़ा लेखक Kevin Vermeer, स्रोत

4 उत्तर

जैसा कि टिप्पणी के टिप्पणियों के आदान-प्रदान में चर्चा की गई है:

अजीब बात यह है कि मैं 64 बिट विन 7 लैपटॉप पर 64 बिट एमएसबिल्ड का उपयोग कर रहा हूं जिसमें 4 जीबी भौतिक और "असीमित" वर्चुअल रैम है। एमएसबिल्ड प्रक्रिया लगभग 1 जीबी रैम (1,5 जीबी शिखर) का उपयोग कर रही है। - लुडवो 4 घंटे पहले

मैं 32 बिट एमएसबिल्ड का उपयोग 32-बिट WinXP डेस्कटॉप पर 2 जीबी भौतिक और समान असीमित वर्चुअल रैम के साथ कर रहा हूं। अजीब चीज यह है कि क्रैश तब होता है जब भौतिक RAM पूरी तरह से उपयोग किया जाता है। ऐसा लगता है कि मुझे शून्य वर्चुअल मेमोरी मिल गई है! - केविन वर्मीर 3 घंटे पहले

हां, ऐसा लगता है जैसे एमएसबिल्ड वर्चुअल मेमोरी का उपयोग नहीं कर रहा है :) - लुडवो 2 घंटे पहले

ऐसा लगता है कि एमएसबिल्ड वर्चुअल मेमोरी का उपयोग नहीं कर रहा था। मैंने कुछ परीक्षण किए (प्रोग्रामों का एक समूह शुरू किया) और ऐसा लगता है कि कुछ नहीं वर्चुअल मेमोरी का उपयोग कर रहा था। मैंने कुछ खोज की जो मुझे जांचने के लिए प्रेरित करती हैं

Control Panel -> System -> Advanced -> Performance -> Advanced -> Virtual Memory

और पाया कि एक ऐसी सेटिंग मौजूद है जो मेरे वर्चुअल मेमोरी आकार को सिस्टम-व्यापी सीमित कर दे। मैंने कल्पना की थी कि 32-बिट एक्सपी पर प्रत्येक प्रक्रिया के लिए वर्चुअल मेमोरी प्रभावी रूप से असीमित, या अधिक सटीक, 4 जीबी होगी। मैं इस सीमा तक नहीं पहुंच रहा था। हालांकि, मेरी वर्चुअल मेमोरी स्पेस सीमित थी ... 0 एमबी। अच्छा नहीं, जो भी हो या जो भी हो।

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

यह मेरी समस्याओं को ठीक करता है। दुर्भाग्यवश, जब भी यह किसी भी स्मृति को पृष्ठ पर करने का प्रयास करता है, तो मेरी प्रणाली निकट-बंद हो जाती है, लेकिन यह एक दुर्घटना से बेहतर है। मैंने समांतर बिल्डों को फिर से सक्षम किया; यह बहुत सी CPU का उपयोग करता है और इसका उपयोग करता है जबकि मेरे पास रैम शेष है (जो अधिकांश फ़ाइलों के लिए सच है) और जब मेरे पास कोई रैम नहीं है तो CPU उपयोग के 1% तक डुबकी लगाता है। जब उन फाइलें की जाती हैं, तो गति बहाल हो जाती है।

2
जोड़ा
मेरा वीएम सक्षम है और सिस्टम प्रबंधित है
जोड़ा लेखक Ludwo, स्रोत
यह वीएम सेटिंग्स मुद्दा नहीं है। मेरे पास 800 एमबी मुफ्त मेमोरी है। अब मैं जांच करूंगा कि यह 32 बिट एक्सटेंशन के कारण है या नहीं ...
जोड़ा लेखक Ludwo, स्रोत
@ लुडवो - यह एक अच्छी बात है, और इस तरह की त्रुटि के लिए निश्चित रूप से कई संभावित कारण हैं, लेकिन क्या आपने इसे मैन्युअल रूप से सेट करने का प्रयास किया है?
जोड़ा लेखक Kevin Vermeer, स्रोत

मेरे मामले में, जवाब Antlr अद्यतन करना था। जाहिर है, यह केवल तभी लागू होता है जब आप अपने प्रोजेक्ट में एंटरल का उपयोग कर रहे हों।

1
जोड़ा

आप स्मृति से बाहर हो सकते हैं, जिससे निर्माण उप प्रक्रियाओं में से एक विफल हो सकता है - यदि आप दो समवर्ती बिल्डों तक सीमित करने के लिए/m: 2 का उपयोग करते हैं तो यह कम विफल हो जाता है? (मान लीजिए कि आपके पास 2 से अधिक कोर हैं)

या, यदि आप किसी अन्य मशीन से कुछ रैम उधार ले सकते हैं, या अपना स्वैप आकार बढ़ा सकते हैं, तो क्या आपके निर्माण मशीन पर अधिक मेमोरी स्थापित होने पर यह कम होता है?

1
जोड़ा
मेरे पास केवल 2 कोर हैं। मेरा निर्माण कभी-कभी मेमोरी अपवाद से बाहर हो जाता है। मैं कुछ जांच करूंगा और मैं आपको बता दूंगा ...
जोड़ा लेखक Ludwo, स्रोत
मेरे पास बहुत सारी मुफ्त मेमोरी है और मैं फिर से असफल रहा। यह किसी भी तरह 32 बिट प्रक्रिया मेमोरी सीमा से संबंधित होना चाहिए क्योंकि मेरा निर्माण 2 जीबी से अधिक रैम का उपयोग कर रहा है। लेकिन मुझे नहीं लगता कि यह कैसे संभव होना चाहिए क्योंकि मेरी एमएसबिल्ड प्रक्रिया 64 बिट है।
जोड़ा लेखक Ludwo, स्रोत

शायद यह दौड़ की स्थिति के बराबर है?

http://blogs.msdn.com/b/msbuild/archive/2007/04/26/building-projects-in-parallel.aspx

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

अभी भी परिणामों में असंगतता (अक्सर सफल, कभी-कभी विफल हो जाती है) मुझे संदेह करती है कि ऐसा कुछ भी कारण हो सकता है।

1
जोड़ा
नहीं। मेरे पास कई समाधानों में बड़ी संख्या में परियोजनाएं हैं। मैं समाधान विलय के लिए अपने मर्ज कार्य का उपयोग करता हूं और प्रत्येक निर्माण को समांतर में सभी परियोजनाओं को बनाने में सक्षम होने से पहले मैं एक बड़ा समाधान बनाता हूं। विलय समाधान कार्य में यदि मैं संभव हो तो परियोजना संदर्भों में सभी संदर्भों को परिवर्तित कर रहा हूं। तो मेरे प्रोजेक्ट फ़ाइलों को आपके लिंक किए गए आलेख में उदाहरण 2 में वर्णित समाधान विलय के बाद अपडेट किया गया है।
जोड़ा लेखक Ludwo, स्रोत
आपके उत्तर के लिए +1 क्योंकि आपने अप्रत्यक्ष रूप से मुझे समझाया कि क्यों MSBuild का केवल एक उदाहरण सक्रिय है जबकि अन्य उदाहरण निष्क्रिय हैं। चर्चा में मुझे यह बग है। यह v4.0 के बाद भविष्य में एमएसबिल्ड रिलीज में तय किया गया है। एमएसबिल्ड प्रदर्शन को बेहतर बनाने के लिए मुझे अपनी परियोजनाओं को छोटे हिस्सों में विभाजित करना है :(
जोड़ा लेखक Ludwo, स्रोत
धन्यवाद! तो यह सामान्य बात है जब इस बड़ी परियोजना को पहले संकलित किया गया था और अन्य सभी निर्भर परियोजनाएं इसके लिए प्रतीक्षा कर रही थीं।
जोड़ा लेखक Ludwo, स्रोत
@ लुडवो - अगर यह मदद करता है, तो मुझे इस समस्या को मिला और ठीक करने पर मेरे समाधान में 8 परियोजनाएं थीं। उन्हें कुछ 800 फाइलों और कोड की 16,000 लाइनों में विभाजित किया गया था; इनमें से लगभग 40% एक परियोजना में निहित था।
जोड़ा लेखक Kevin Vermeer, स्रोत