Câu hỏi Giới thiệu về bộ nhớ cache của Linux


Tôi đang chạy một kịch bản python để làm một số số liệu thống kê và bộ nhớ thực sự được sử dụng là thấp, khoảng 10%. Và không có quá trình khác chi phí bộ nhớ nhiều hơn. Tuy nhiên, khi tôi sử dụng free -m và nó cho thấy rằng gần như 95% bộ nhớ đã được sử dụng. Điểm là kịch bản của tôi nên làm rất nhiều đọc từ các tập tin, vì vậy tôi tự hỏi nếu có bất kỳ cơ chế bộ nhớ cache Linux gây ra vấn đề?echo 1 >> /proc/sys/vm/drop_caches hoạt động, nhưng nó có vẻ bằng tay. Làm thế nào tôi có thể giảm chi phí bộ nhớ và không làm cho một hiệu ứng xấu về đọc các tập tin?


4
2017-09-28 07:05


gốc




Các câu trả lời:


Hạt nhân Linux tự động lưu trữ các tệp trong bộ nhớ để có hiệu quả. Đây không phải là một điều xấu. Khi chạy free -m bạn sẽ thấy bên phải số lượng bộ nhớ được sử dụng trong bộ nhớ cache. Nếu một ứng dụng cần bộ nhớ thì hạt nhân sẽ giải phóng một số bộ nhớ cache. Bạn không nên tự mình cố gắng và tự mình quản lý nó.


7
2017-09-28 07:17





Tôi không nghĩ rằng bạn có một vấn đề thực tế ở đây.

Tại sao bạn quan tâm bao nhiêu bộ nhớ đang được sử dụng? Nó có làm tổn thương gì không?

Linux cố gắng sử dụng bộ nhớ của bạn hiệu quả nhất có thể. Nếu bạn có rất nhiều bộ nhớ trống và bạn đang đọc rất nhiều tệp, nó sẽ sử dụng bộ nhớ miễn phí để lưu trữ các tệp đó. Nếu bạn có rất nhiều bộ nhớ hoạt động, nó sẽ sử dụng ít bộ nhớ hơn để lưu vào bộ nhớ đệm. Đó là cách nó phải làm việc. Nếu bạn không muốn bộ nhớ được sử dụng ở tất cả, lấy chip ra khỏi máy tính của bạn.

Có một số trường hợp không phổ biến mà rất nhiều bộ nhớ đệm có thể là xấu. Có lẽ sự bùng nổ của việc đọc luôn xảy ra ngay trước khi một sự phân bổ bộ nhớ bị vỡ. Có thể một cái gì đó về trường hợp cụ thể của bạn có nghĩa là không có lợi ích có thể, và bạn cần phải ép ra rằng chi phí hiệu suất 0,1% cuối cùng. Có thể bạn đang sử dụng hệ thống nhúng có sử dụng RAM với thời lượng giới hạn. Nếu bạn có trường hợp như vậy, hãy cho chúng tôi biết đó là gì.


5
2017-09-28 07:14



Vâng, thực sự vấn đề là kịch bản không chiếm quá nhiều bộ nhớ, gần 10% và máy của tôi không làm gì khác. Khi tôi đọc dữ liệu vào bộ nhớ, con trăn có một MemoryError cho thấy không có đủ bộ nhớ. - cheneydeng