Tôi đã chạy kiểm tra bộ nhớ qua đêm trên một hệ thống Linux nhúng. Sử dụng vmstat tôi đã quan sát thấy rằng bộ nhớ tự do đều giảm theo thời gian. Theo một số phân tích smaps trong procfs, quá trình của một quá trình phát triển ở cùng tốc độ. Tôi nghi ngờ một rò rỉ bộ nhớ và tìm thấy một vài điểm trong mã nơi new
và delete
được sử dụng thường xuyên. Tuy nhiên, tôi không thấy cuộc gọi new
mà không khớp với các cuộc gọi delete
.Nếu/Khi nào thì bộ nhớ heap được phân phối lại có được khai hoang?
tôi chạy kiểm tra bộ nhớ một lần nữa và sáng nay xóa cache bộ nhớ với các cuộc gọi sau
echo 3 > /proc/sys/vm/drop_caches
Bộ nhớ miễn phí được liệt kê trong vmstat đi xuống đến một giá trị gần khi thử nghiệm đã được bắt đầu.
Hạt nhân có thường xuyên thu hồi các trang heap không sử dụng không? Nếu vậy, có những thời điểm nào khác ngoài thời gian trên mà việc này được thực hiện không? Có lẽ khi bộ nhớ miễn phí được dưới một ngưỡng nhất định?
Bộ nhớ không sử dụng là bộ nhớ bị lãng phí, do đó, linux sử dụng bộ nhớ, cho đến khi người khác muốn sử dụng bộ nhớ đó. – PlasmaHH
bạn đang nói về heap hạt nhân hoặc đống được sử dụng bởi quá trình này dường như bị rò rỉ? –
@Tom: Tôi đang nói về đống quy trình không gian người dùng – waffleman