2009-09-27 16 views
5

Tôi cần sử dụng Valgrind để phát hiện bất kỳ vi phạm truy cập bộ nhớ nào được thực hiện trong ứng dụng máy chủ. Máy chủ tạo ra nhiều luồng. Tôi nghi ngờ rằng có một tình trạng đua gây ra các máy chủ sụp đổ mỗi 1 giờ hoặc lâu hơn. Chúng tôi đã sử dụng Valgrind để phân tích mức sử dụng bộ nhớ của nó nhưng tốc độ máy chủ 'giảm đáng kể. Tốc độ của máy chủ giảm rất nhiều đến nỗi nó hầu như không thể sử dụng được và không có điều kiện đua khi có thể xảy ra.Làm thế nào để chạy Valgrind song song với quy trình của chúng tôi nên hiệu suất của nó không giảm quá nhiều?

Có cách nào để chạy Valgrind song song với ứng dụng của chúng tôi để chúng tôi không bị mất hiệu suất đó nhiều không?

Trả lời

5

Cần lưu ý rằng Valgrind, trong khi hỗ trợ các chương trình đa luồng, sẽ không thực sự chạy các luồng của chương trình song song nếu bạn có nhiều lõi có sẵn. Nó cũng xen kẽ các luồng ở một hạt mịn hơn so với lịch trình hệ điều hành gốc. Hai sự kiện kết hợp này có thể làm cho nó trở thành một chương trình với các điều kiện chủng tộc hoặc các dị thường đồng thời khác sẽ hoạt động khác nhau.

Bạn có thể muốn thử Helgrind, một công cụ chủ yếu nhằm phát hiện đúng kỷ luật khóa và drd, một công cụ chủ yếu nhằm phát hiện các cuộc đua dữ liệu.

1

Điều này không trực tiếp trả lời câu hỏi của bạn, nhưng nếu bạn nghi ngờ lỗi đồng bộ hóa, bạn đã thử sử dụng công cụ Valgrind Helgrind chưa?

+0

Tôi không biết Helgrind trước đây vì tôi không phải là người dùng Valgrind chuyên nghiệp. Tôi vừa mới học về nó ngày hôm nay. Tôi nghi ngờ là một đối tượng đang bị xóa nhưng một chủ đề khác đang cố gắng truy cập nó và làm hỏng quy trình. Điều này là rất có thể xảy ra kể từ khi ứng dụng đã được mã hóa rất kém. Tôi sẽ thử Helgrind và xem những gì nó có thể cung cấp. –

9

Bạn không thể làm điều đó. Valgrind không thực sự thực thi mã của bạn một cách tự nhiên - thay vào đó nó chạy nó bên trong một trình giả lập. Đó là lý do tại sao nó quá chậm. Vì vậy, không có cách nào để làm cho nó chạy nhanh hơn, và vẫn nhận được lợi ích của Valgrind.

Đặt cược tốt nhất của bạn là đặt ulimit để chương trình của bạn tạo tệp lõi khi nó gặp sự cố. Sau đó, bạn có thể cố gắng tìm ra vấn đề là kiểm tra lõi.

+1

+1, tôi sắp đưa ra một câu trả lời gần như giống hệt nhau. –

0

Valgrind hoạt động bằng cách móc vào các cuộc gọi malloc của bạn, vì vậy bạn có thể mong đợi chương trình của mình chạy chậm hơn dưới mức độ valgrind. Vì vậy, tôi sẽ nói rằng bạn không thể chạy chương trình của bạn nhanh hơn theo valgrind có được lợi ích của việc phân tích lỗi bộ nhớ.

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