2011-10-27 35 views
16

Đôi khi bản dựng của tôi không thành công với lỗi này.lỗi MSB4166: Nút con đã thoát sớm. Tắt

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

Dường như hoàn toàn ngẫu nhiên và tôi không thể tạo lại theo ý muốn. Tôi đang chạy VS2010 Win7 x64 MSBuild 4.0 nhưng vấn đề này có vẻ là nền tảng và hệ điều hành độc lập. Tôi đang xây dựng các giải pháp song song (/ m switch + BuildInParallel = True) và tôi không muốn vô hiệu hóa tính năng này bởi vì tôi đang biên dịch ứng dụng chứa hơn 800 dự án. Bất kỳ ý tưởng làm thế nào để giải quyết nó?

EDIT: Khi tôi cài đặt .NET 4.5 Developer Preview, lỗi đăng nhập được cải thiện trong MSBuild 4,5 và bây giờ là chuỗi lỗi như sau:

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 

Tôi có thể tìm thấy tập tin log lỗi trong thư mục Temp. . Đây là nội dung của MSBuild _ * tập tin 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() 
+0

Tôi đang gặp khó khăn tương tự. Tôi cũng đã thấy các ngoại lệ ngoài bộ nhớ liên quan đến lỗi này. Việc hạn chế nó thành một bản dựng đồng thời không giúp ích gì; nó vẫn còn lỗi: [Xem ảnh chụp màn hình ở đây] (http://i.stack.imgur.com/FSyuG.png); lỗi xảy ra chính xác khi mức tiêu thụ bộ nhớ vượt quá bộ nhớ vật lý có sẵn. Nó có một vài bàn chải gần với cái chết và sau đó nó đạt đến mức tối đa và chết, lấy Outlook và Process Explorer đi kèm, cung cấp một trình gỡ lỗi JIT không khởi động và phát hành MSBuild.exe để trở thành một quá trình zombie nằm trong bộ nhớ cho đến khi tôi tự giết nó. –

+0

Điều kỳ lạ là tôi đang sử dụng 64bit MSBuild trên máy tính xách tay 64bit Win7 với 4GB RAM ảo và "không giới hạn" vật lý. Quá trình MSBuild đang sử dụng khoảng 1GB RAM (đỉnh 1,5GB). – Ludwo

+0

Tôi đang sử dụng 32bit MSBuild trên máy tính để bàn WinXP 32 bit với RAM 2 GB và RAM ảo không giới hạn tương tự. Điều kỳ lạ là sự cố xảy ra khi RAM vật lý được sử dụng hết. Nó giống như tôi đã có bộ nhớ ảo không! –

Trả lời

1

Bạn có thể chạy ra khỏi bộ nhớ, khiến một trong những quá trình xây dựng tiểu thất bại - nó không ít hơn nếu bạn sử dụng/m: 2 để hạn chế nó cho hai bản dựng đồng thời? (giả sử bạn có nhiều hơn 2 nhân)

Hoặc nếu bạn có thể mượn RAM từ máy khác hoặc tăng kích thước hoán đổi, điều đó có xảy ra ít hơn khi bạn cài đặt thêm bộ nhớ trên máy xây dựng không?

+0

Tôi chỉ có 2 lõi. Xây dựng của tôi đôi khi thất bại trong bộ nhớ ngoại lệ. Tôi sẽ làm một số điều tra và tôi sẽ cho bạn biết ... – Ludwo

+0

Tôi có rất nhiều bộ nhớ miễn phí và thất bại của tôi một lần nữa. Nó nên được bằng cách nào đó liên quan đến giới hạn bộ nhớ 32bit vì xây dựng của tôi đang sử dụng hơn 2GB RAM. Nhưng tôi không thấy làm thế nào nó có thể được bởi vì quá trình MSBuild của tôi là 64bit. – Ludwo

2

Như đã thảo luận trong việc trao đổi ý kiến ​​với câu hỏi:

Lạ một điều là tôi đang sử dụng 64bit MSBuild trên 64bit laptop Win7 với 4GB vật lý và "không giới hạn" RAM ảo. Quá trình MSBuild đang sử dụng khoảng 1GB RAM (đỉnh 1,5GB). - Ludwo 4 giờ trước

Tôi đang sử dụng 32bit MSBuild trên 32bit WinXP máy tính để bàn với 2GB RAM ảo vật lý và không giới hạn tương tự. Điều kỳ lạ là sự cố xảy ra khi RAM vật lý được sử dụng hết. Nó giống như tôi đã có bộ nhớ ảo không! - Kevin Vermeer 3 giờ trước

Vâng, nó có vẻ như MSBuild không sử dụng bộ nhớ ảo :) - Ludwo 2 giờ trước

Nó dường như giống như MSBuild đã không sử dụng ảo ký ức. Tôi đã làm một số xét nghiệm (bắt đầu một loạt các chương trình) và nó có vẻ như không có gì đã sử dụng bộ nhớ ảo. Tôi đã thực hiện một số tìm kiếm dẫn tôi đến kiểm tra

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

và thấy rằng có cài đặt giới hạn kích thước bộ nhớ ảo trên toàn hệ thống của tôi. Tôi đã tưởng tượng rằng bộ nhớ ảo để có hiệu quả vô hạn, hoặc, chính xác hơn, 4 GB cho mỗi quá trình trên XP 32-bit. Tôi đã không đạt đến giới hạn này. Tuy nhiên, không gian bộ nhớ ảo của tôi bị giới hạn ... 0MB. Không mát mẻ, bất cứ ai hay bất cứ điều gì đã làm điều đó.

Tôi đã thay đổi điều này để phân bổ tối thiểu là 1024 MB và tối đa 4096 MB bộ nhớ ảo. Tôi đã thêm cột "Kích thước ảo" vào Process Explorer, cùng với biểu đồ "Cam kết hệ thống", chứng minh rằng giờ đây tôi sử dụng nhiều bộ nhớ hơn số lượng có sẵn trong các thanh RAM vật lý.

Điều này đã khắc phục được sự cố của tôi. Thật không may, hệ thống của tôi nghiền đến gần tạm dừng bất cứ khi nào nó cố gắng để trang bất kỳ bộ nhớ, nhưng đó là tốt hơn so với một vụ tai nạn. Tôi đã bật lại các bản dựng song song; nó parallelizes và sử dụng rất nhiều CPU trong khi tôi có RAM còn lại (đó là đúng cho hầu hết các tập tin) và dips đến 1% sử dụng CPU khi tôi không có nhiều RAM. Khi các tệp đó được thực hiện, tốc độ được khôi phục.

+0

Máy ảo của tôi được kích hoạt và hệ thống được quản lý – Ludwo

+0

@ Ludwo - Đó là một điều tốt và chắc chắn có nhiều nguyên nhân có thể xảy ra đối với loại lỗi này, nhưng bạn đã thử cài đặt thủ công chưa? –

+0

Nó không phải là vấn đề cài đặt máy ảo. Tôi có 800 MB bộ nhớ trống. Bây giờ tôi sẽ kiểm tra nếu nó được gây ra bởi phần mở rộng 32bit hay không ... – Ludwo

1

Có lẽ đó là bản dựng tương đương với điều kiện chủng tộc?

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

Nếu bạn đang sử dụng một thẻ tham khảo thông thường cho một sự phụ thuộc vào kết quả của một dự án khác là một phần của việc xây dựng (chứ không phải là một thẻ ProjectReference), bạn có thể nhận được một tình huống mà thường dự án X hoàn thành trước dự án Y (phụ thuộc vào đầu ra của dự án X) nhưng đôi khi chúng xây dựng đồng thời, trong trường hợp đầu ra của X sẽ không tồn tại khi Y tìm kiếm nó, khiến Y thất bại. Tôi không thể tìm thấy bất cứ điều gì về những gì loại đầu ra lỗi MSBuild cho trong tình huống đó mặc dù (và không có một cách sẵn sàng để thử nghiệm nó ngay bây giờ), do đó có thể không được nó.

Vẫn còn sự mâu thuẫn trong kết quả (thường thành công, đôi khi thất bại) khiến tôi nghi ngờ rằng điều gì đó tương tự cũng có thể là nguyên nhân.

+0

No. Tôi có số lượng lớn các dự án trong nhiều giải pháp. Tôi sử dụng nhiệm vụ hợp nhất của mình để kết hợp các giải pháp và tôi tạo ra một giải pháp lớn trước mỗi lần xây dựng để có thể xây dựng tất cả các dự án song song. Trong nhiệm vụ giải pháp hợp nhất, tôi chuyển đổi tất cả các tham chiếu thành tham chiếu dự án nếu có thể. Vì vậy, các tệp dự án của tôi được cập nhật sau khi hợp nhất các giải pháp như được mô tả trong ví dụ2 trong bài viết được liên kết của bạn. – Ludwo

+0

+1 cho câu trả lời của bạn bởi vì bạn gián tiếp giải thích cho tôi lý do tại sao chỉ có một thể hiện của MSBuild đang hoạt động trong khi các phiên bản khác không hoạt động. Trong cuộc thảo luận, tôi tìm thấy liên kết đến [lỗi này] (https://connect.microsoft.com/VisualStudio/feedback/details/635800/msbuild-exe-xuất hiện-để-treo-khi-maxcpucount-được-sử dụng-và-một-lớn-số-of-dự án-tài liệu tham khảo-tồn tại # chi tiết). Nó được sửa trong bản phát hành MSBuild trong tương lai sau phiên bản v4.0. Tôi phải chia dự án của mình thành các phần nhỏ hơn để cải thiện hiệu suất msbuild: ( – Ludwo

+0

@Ludwo - Nếu nó giúp, tôi đã có 8 dự án trong giải pháp của mình khi tôi tìm và khắc phục vấn đề này. Chúng được chia thành 800 tệp và 16.000 dòng mã Khoảng 40% số này đã được chứa trong một dự án –

1

Trong trường hợp của tôi, câu trả lời là cập nhật Antlr. Rõ ràng, điều này chỉ áp dụng nếu bạn đang sử dụng Antlr trong dự án của bạn.

Các vấn đề liên quan