2010-02-16 15 views
8

Cách tốt nhất để tìm rò rỉ bộ nhớ trong mô-đun httpd và httpd Apache là gì?Tìm kiếm rò rỉ bộ nhớ trong Apache httpd và các mô-đun

Có bất kỳ howtos nào không?

I'v thử valgrind một chút, nhưng vài chướng ngại vật xuất hiện:

  1. Valgrind hy vọng cho nhị phân để thoát bình thường. Tôi đã quản lý để làm điều đó với tham số MaxRequestsPerChild và -X.
  2. Valgrind báo cáo về rất nhiều nội dung, có thể được kết nối với hồ bơi, nhưng không có gì hữu ích.

Hệ điều hành: Linux

PS:

Valgrind lệnh: $ valgrind --leak-check=full --leak-resolution=med --log-file=/tmp/valgrind.log ./bin/httpd -X

Valgrind đầu ra ví dụ: http://paste-it.net/public/x5b6e8b/

Trả lời

2

Tôi không biết của một viên đạn ma thuật, nhưng bạn có thể có một cái nhìn tại valgrind/valgrind.h, nó có một số macro hữu ích để làm cho mọi thứ Valgrind nhận thức và thay đổi beha của họ vior nếu chạy dưới Valgrind.

Ví dụ

#ifndef HAVE_VALGRIND_VALGRIND_H 
#define RUNNING_ON_VALGRIND 0 
#else 
#include <valgrind/valgrind.h> 
#endif 

if (RUNNING_ON_VALGRIND) { 
    printf("Hello, this is Valgrind instance %d\n", RUNNING_ON_VALGRIND); 
    /* set debug output annoyingly high */ 
    /* exit after one request */ 
} 

Bạn cũng có thể bọc rằng toàn bộ mớ hỗn độn với NDEBUG để giữ cho nó ra khỏi sản xuất xây dựng.

Điều đó sẽ giúp bạn không phải lo lắng với máy chủ mỗi khi bạn gỡ lỗi, nó sẽ 'thực hiện' nếu Valgrind được phát hiện. RUNNING_ON_VALGRIND sẽ mở rộng thành thể hiện valgrind hoặc vẫn là 0 nếu không áp dụng.

Đối với phần còn lại (và tôi tưởng tượng bạn đang nhận được rất nhiều tiếng ồn, rất có thể bắt đầu với invalid read of size xx), bạn có thể áp dụng hệ thống triệt tiêu. Nếu bạn đăng một số đầu ra, nó có thể dễ dàng hơn để đưa ra gợi ý cho các lệnh cấm bạn có thể dính vào một tập tin.

Ngẫu nhiên, danh sách gửi thư của người dùng Valgrind là vô cùng hữu ích và rất khoan dung. Bạn cũng có thể đăng tiếng ồn khó chịu nhất và không thích hợp ở đó, bạn sẽ nhận được câu trả lời bằng cách ngăn chặn nó khá nhanh.

Nếu tất cả những gì bạn muốn là một bản tóm tắt các rò rỉ và các điểm vào dẫn đến chúng, nó không quá khó để đóng hầu hết mọi thứ khác.

+0

Tôi đã thêm đầu ra valgrind. Có rất nhiều thứ, vài trong số đó là từ mô-đun của tôi. –

0

Có lẽ đó là thời gian để cấu trúc lại mã để bạn có thể chạy thử nghiệm bên ngoài apache?

Nếu bạn thêm kiểm tra đơn vị kiểm tra đường dẫn mã cấp phát bộ nhớ, bạn có thể xác minh rằng tất cả bộ nhớ được giải phóng, bằng cách chạy các kiểm tra đơn vị theo valgrind. Bằng cách đó bạn không phải lo lắng về việc làm cho mã đầy đủ chạy dưới apache xử lý chỉ số lượng nhỏ các giao dịch.Ngoài ra nó sẽ được dễ dàng hơn để kiểm tra tất cả các đường dẫn mã với các bài kiểm tra đơn vị.

+0

Ý của bạn là gì? –