Khi kiểm tra bộ nhớ bằng lệnh free trên linux, có nhiều ae mới vào nghề rất dễ nhầm tưởng là mình đã xài hết RAM trong khi thực tế thì không. Ae lý giải cùng tôi nhé.

Ví dụ đây là kết quả của 1 lệnh free.

Free 1

Nhưng để dễ nhìn tôi thích dùng free -hm hoặc free -hg anh anh em ạ, cho nó hiện thị rõ đơn vị.

Free 1

Nhìn k/q lệnh thấy free có 157M (15%) nhiều ae nghĩ thôi chết mợ, xài hết RAM rồi, tuy nhiên thực tế thì không phải 🙂 ae yên tâm vì sao ư, đọc nốt đoạn còn lại trong post của tôi nha.

Memory cache & buffer

  • Cache: Chắc ae đều biết đọc dữ liệu từ ổ cứng thường chậm rất nhiều so với đọc từ memory. Vì lý do đó Linux đã lưu tạm các block data từ ổ cứng vào memory để đọc cho nhanh. Thực tế linux đã dùng hầu hết lượng ram free để làm cache data giúp cho việc xử lý dữ liệu hiệu quả nhất có thể.

  • Buffer: Khác với mục tiêu để tăng hiệu năng xử lý I/O disk, buffer là vùng dữ liệu lưu trữ tạm thời trong quá trình xử lý. Vùng này sẽ được giải phóng khi quá trình xử lý thực hiện xong. Lấy VD như khi ta request in một văn bản. Thông thường khả năng xử lý của máy in chậm hơn CPU rất nhiều như vậy CPU không thể cứ đợi làm việc cùng máy in kiểu face to face được như vậy dở hơi, tốn thời gia quá. Cách giải quyết thông minh hơn là CPU sẽ ném vùng dữ liệu cần in này ra buffer và đi làm việc khác còn máy in cứ từ từ, thông thả mà móc dữ liệu từ đây ra xử thôi. Đôi bên cùng có lợi.

Vậy điều gì xảy ra khi chương trình cần nhiều bộ nhớ hơn lượng free hiển thị?. Khi đó cache/buffer sẽ được tự động co lại để lấy chỗ trống phục vụ chương trình hoạt động. Như vậy cache/buffer luôn như là em gái uyển chuyển luôn biết dựa đông dựa tây lúc phù hợp để vừa lòng đôi bên.

Bộ nhớ thực sự free có thể sử dụng được tính như thế nào?

Actual Free Memory = Free + Buffers + Cached

Kiểm tra lại với cái hình ban đầu coi nào?

Actual Free Memory = 156M + 424M + 312M = 892M

Thoải mái đi vẫn còn dùng tẹt bô ae ạ,

Tham khảo:

https://scoutapm.com

https://kipalog.com