MSB4166 қатесі: Бала түйіні мерзімінен бұрын аяқталды. Өшіру

Кейде менің құралымым осы қатеге ұшырамайды.

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

Бұл толығымен кездейсоқ секілді көрінеді, мен оны ерік-жігерге айналдыра алмадым. Мен VS2010 Win7 x64 MSBuild 4.0 жұмыс істеп жатырмын, бірақ бұл мәселе платформа және ОС-ға тәуелсіз. Мен параллель шешімдерді жасаймын (/ m switch + BuildInParallel = True) және 800+ жобаны қамтитын қолданбаны құрастыратындықтан, осы мүмкіндікті өшіргім келмейді. Оны қалай шешуге болатыны туралы кез-келген ой.

EDIT: .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 _ *. Failure.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
Бір қызығы, 64bit MSBuild 64 Гбайт Win7 ноутбугінде 4 Гб физикалық және «шексіз» виртуалды жады бар. MSBuild процесі шамамен 1 Гбайт жедел жады (1,5 Гбайт шыңы) пайдаланылады.
қосылды автор Ludwo, көзі
Ия, MSBuild виртуалды жадты пайдаланбаған сияқты көрінеді :)
қосылды автор Ludwo, көзі
Бірақ бұл дұрыс емес. Мен оны тексердім және 800МБ бос физикалық жады бар болса бұл мәселе бойынша сәтсіздікке ұшырады.
қосылды автор Ludwo, көзі
Менде осындай қиындықтар бар. Мен сондай-ақ, осы қатеге байланысты жадтан тыс ерекшеліктерді көрдім. Оны бір мезгілде орнатуға шектеу көмектеспейді; ол әлі қате: Скриншотты қараңыз еске түсіру физикалық қол жетімді жадтан асқан кезде қате орын алады. Ол қайтыс болғаннан кейін бірнеше қашықтықта щеткалар болды, содан кейін ол максималды соққыға жетті және Outlook және Process Explorer-ді алып, JIT-ны бастай алмайтын отладчик ұсынды және MSBuild.exe-ді босатып, Мен оны қолмен өлтірмейінше.
қосылды автор Kevin Vermeer, көзі
32 биттік MSBuild 32 биттік WinXP жұмыс үстелінде 2 Гб физикалық және ұқсас шектелмеген виртуалды RAM арқылы пайдаланамын. Бір қызығы, апаттың орын алуы физикалық ЖЖҚ толығымен пайдаланылғанда орын алады. Бұл менің нөлдік виртуалды жадым сияқты!
қосылды автор Kevin Vermeer, көзі

4 жауаптар

Сұраққа пікір алмасу барысында айтылғандай:

Бір қызығы, 64bit MSBuild 64 Гбайт Win7 ноутбугында 4 ГБ физикалық және «шексіз» виртуалды жады бар. MSBuild процесі шамамен 1 Гбайт жедел жады (1,5 Гбайт шыңы) пайдаланылады. - Ludwo 4 сағат бұрын

32 биттік MSBuild 32 биттік WinXP жұмыс үстелінде 2Гб физикалық және ұқсас шектелмеген виртуалды RAM арқылы пайдаланамын. Бір қызығы, апаттың орын алуы физикалық ЖЖҚ толығымен пайдаланылғанда орын алады. Бұл менің нөлдік виртуалды жадым сияқты! - Kevin Vermeer 3 сағат бұрын

Иә, MSBuild виртуалды жадты пайдаланбайды ғой - Ludwo 2 сағат бұрын

MSbuild виртуалды жадты пайдаланбаған сияқты көрінді. Мен кейбір сынақтарды жасадым (бағдарламалардан бастаған) және ол ештеңе сияқты виртуалды жадты пайдаланған сияқты көрінді. Мені тексеруге әкелетін ізденістер жасадым

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

және менің виртуалды жад көлемін шектейтін параметр бар екенін анықтады. Менің ойымша, виртуалды жады тиімді болуы шексіз, немесе, дәлірек, 32-биттік XP-дегі әрбір процесс үшін 4 Гбайт. Мен осы шегіне жақындамадым. Дегенмен, менің виртуалды жадымның кеңістігі ... 0MB. Керемет емес, кім немесе кім бұлай жасады.

Мен оны кем дегенде 1024 МБ және ең көп дегенде 4096 Мб виртуалды жад бөлу үшін өзгерттім. Мен «Виртуалды өлшем» бағанын Process Explorer ішіне қосып көрдім. «System Commit» диаграммасы, енді мен физикалық RAM таяқтарында қолжетімді мөлшерден көбірек жадты қолданатынымды көрсетеді.

Бұл менің проблемаларымды анықтады. Өкінішке орай, менің жүйем кез келген жадқа ұмтылған кез келген уақытта тоқтап қалады, бірақ бұл апатқа қарағанда жақсы. Мен параллельді құрылымдарды қайтадан іске қостым; ол RAM қалдырылған кезде көптеген процессорларды параллелдейді және пайдаланады (бұл көптеген файлдарға қатысты) және одан да көп ЖЖҚ болмаған кезде CPU пайдаланудың 1% -ға дейін төмендейді. Бұл файлдар орындалса, жылдамдық қалпына келтіріледі.

2
қосылды
Менің VM қосылған және жүйе басқарылды
қосылды автор Ludwo, көзі
Бұл VM параметрлері мәселесі емес. Менде 800 МБ бос жады бар. Енді 32 биттік кеңейтулердің туындағанын тексеремін немесе жоқпын ...
қосылды автор Ludwo, көзі
@Ludwo - Бұл жақсы нәрсе және бұл қате үшін көптеген мүмкін себептер бар, бірақ оны қолмен орнатуға тырыстық ба?
қосылды автор Kevin Vermeer, көзі

Менің жағдайда, Antlr-ді жаңартуға жауап болды. Әлбетте, бұл сіздің жобаңызда Antlr-ды қолдансаңыз ғана қолданылады.

1
қосылды

Есте қалуыңыз мүмкін, себебі құрылғының біреуінің істен шыққан процестерінің біреуі сәтсіздікке ұшырады - егер сіз оны/m: 2 қолдансаңыз, оны екі мезгілді құрастыруға шектеу керек пе? (егер сізде 2 ден астам ядро ​​болса)

Немесе егер басқа машинадан кейбір RAM-ді қарызға ала алсаңыз немесе своптың мөлшерін көбейтсеңіз, онда сізде құрылғыны көп жад орнатылған кезде ол аз болады ма?

1
қосылды
Менде тек 2 ядро ​​бар. Менің кейде есімімді еске алудан тыс қалмайды. Мен кейбір тергеу жұмыстарын жүргіземін, мен сізге хабарласамын ...
қосылды автор Ludwo, көзі
Менде көп бос жады бар, қайтадан сәтсіз болды. Ол қандай да бір түрде 32 биттік процестің жады шектеуімен байланысты болуы керек, себебі менің құралымым 2 ГБ оперативті жадты пайдаланады. Бірақ менің қалайша MSBuild процесі 64 бит болғандықтан, бұл мүмкін бола алмайды.
қосылды автор Ludwo, көзі

Мүмкін, бұл жарыс жағдайының құрама баламасы болуы мүмкін бе?

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

Егер сіз әдеттегі анықтамалық тегті құрылыстың бөлігі болып табылатын басқа жобаның (ProjectReference тегіне емес) шығуына тәуелді болсаңыз, жобаның X жобасы (мысалы, жоба X-ге байланысты) шығыс), бірақ кейде олар бір мезгілде құрастырады, бұл жағдайда Y шыққан кезде Y шығарылымы болмайды, ол Y бұзылмайды. MSBuild қатесінің қандай түрін шығаруға болатыны туралы ештеңе таба алмаймын, бірақ бұл мүмкін болмауы үшін (және қазіргі уақытта оны тексеру үшін оңай қол жетімді жолы жоқ).

Нәтижелердің сәйкессіздігі (көбінесе табысты, кейде сәтсіз) мені осындай нәрсеге себеп болуы мүмкін деп күдіктенуге мәжбүр етеді.

1
қосылды
Жоқ. Көптеген шешімдерде көптеген жобаларым бар. Мен шешімдерді біріктіру үшін менің біріктіру тапсырмамды қолдана отырып, мен барлық жобаларды параллельді түрде құрастыра алу үшін әр бір құрылыстың алдында бір үлкен шешім жасаймын. Біріктіруге арналған тапсырмада мүмкіндігінше барлық сілтемелерді жоба сілтемелеріне айналдырып отырамын. Сондықтан жобаларым файлдар сілтемесіндегі мақалада мысалда сипатталғандай шешімдерді біріктіргеннен кейін жаңартылады.
қосылды автор Ludwo, көзі
Сіздің жауапыңыз үшін +1, себебі сіз неге MSBuild-тің бір данасы басқа инстанциялардың жұмыс істемей тұрғанын жанама түрде түсіндірдім. Талқылау барысында мен this bug . Ол v4.0 кейінгі MSBuild шығарылымында бекітілген. Msbuild өнімділігін жақсарту үшін менің жобаларды кішігірім бөліктерге бөлуге тура келеді :(
қосылды автор Ludwo, көзі
Рахмет! Демек, бұл үлкен жоба бірінші болып құрастырылған кезде және барлық басқа тәуелді жобалар оны күтуде қалыпты жағдай.
қосылды автор Ludwo, көзі
@Ludwo - Егер бұл көмектессе, мен бұл мәселені тапқанымда және шешкенімде менің шешімімде 8 жоба болды. Олар 800-ге жуық файлға және 16 000 жол кодқа бөлінді; оның шамамен 40% бір жобада қамтылған.
қосылды автор Kevin Vermeer, көзі