Written By Hungnilon
Categories:

Cũng giống với các hệ điều hành khác, Linux đã được thiết kế để quản lý bộ nhớ đệm, RAM rất hiệu quả và thậm chí còn hơn cả hiệu quả. Nhưng nếu không may anh em không may gặp phải một tiến trình nào đó ngốn RAM của anh em quá nhiều và anh em muốn xóa nó, Linux cũng có thể hỗ trợ anh em thực hiện thủ công việc xóa RAM cache trong trường hợp cần thiết.

Hướng dẫn xóa RAM cache trên Linux

Các hệ điều hành Linux đều có 3 tùy chọn để xóa RAM cache mà không làm gián đoạn các tiến trình và dịch vụ đang chạy trên server của anh em:

1. Chỉ xóa PageCache

sync; echo 1 > /proc/sys/vm/drop_caches

2. Xóa dentries và inodes

sync; echo 2 > /proc/sys/vm/drop_caches

3. Xóa RAM cache toàn bộ: PageCache, dentries và inodes

sync; echo 3 > /proc/sys/vm/drop_caches

Có thể nhiều anh em chưa rõ PageCache, dentries và inodes là gì, để mình giải thích một chút.

xoa-ram-cache-linux-0

Một inode trong trường hợp này là một cấu trúc dữ liệu đại diện cho một file, dentrie là cấu trúc dữ liệu đại diện cho thư mục. Những cấu trúc dữ liệu này được sử dụng để xây dựng một bộ nhớ đệm (cache) đại diện cho cấu trúc của các file/thư mục trên ổ cứng. Để có được danh sách các file/thư mục, hệ điều hành sẽ tìm đến các dentries (nếu có thư mục) và liệt kê ra các file bên trong đó (là các inodes). Nếu không có cache, hệ thống sẽ phải đi vào ổ cứng và tìm lại các thông tin này, ghi vào RAM để sử dụng sau này.

Đối với PageCache, nó chứa các thông tin ánh xạ của các blocks trên ổ cứng. Anh em có thể hình dùng là bộ nhớ đệm I/O, các file được ánh xạ vào RAM,… nói chung là bất cứ thứ gì mà hệ điều hành có thể giữ được lên RAM mà nó lấy từ file.

Với những câu lệnh trên, hệ thống sẽ xóa đi những thứ này.

Một lời khuyên dành cho anh em là nếu muốn xóa RAM cache trên hệ thống đang chạy production, an toàn nhất chỉ nên dùng lệnh xóa PageCache thôi.

Đối với hệ điều hành Linux, RAM luôn được lấy 1 phần ra để phục vụ cho kernel và được lưu ở Buffer và Cache. Vậy có nên xóa 2 cái này không?

Xóa Buffer và Cache trong Linux

Lúc anh em áp dụng một cấu hình nào đó trong hệ thống và muốn check, nếu nó thực sự được triển khai đặc biệt trên một môi trường có lượng I/O thoải mái, khi đó có thể anh em sẽ cần xóa buffer cache. Anh em cos theer xoá cache bằng cách này thì không cần phải reboot lại, không phải downtime.

Đối với hệ điều hành Linux, trước khi nó đi tìm thông tin gì ở ổ cứng, nó sẽ đi tìm ở bộ nhớ cache trước. Nếu nó tìm thấy thông tin nó cần tìm trong bộ nhớ cache rồi thì nó sẽ không phải request gì đến ổ cứng nữa. Nếu anh em xóa cache thì hệ thống sẽ phải đi tìm thông tin trên ổ cứng, sẽ chậm hơn việc Linux đi tìm thông tin trên RAM rất nhiều.

Hơn thế nữa, việc xóa cache sẽ làm chậm hệ thống của anh em trong vài giây để Linux ghi lại thông tin từ ổ cứng lên cache trở lại. Anh em lưu ý việc này nhé.

xoa-ram-cache-linux-2

Ok, bây giờ chúng ta sẽ đi tạo một đoạn script nhỏ để hệ điều hành tự đi xóa RAM cache mỗi ngày vào lúc 2 giờ sáng theo crontab. Chúng ta sẽ tạo một file script có tên là clearcache.sh và thêm vào các dòng sau.

#!/bin/bash
echo "echo 3 > /proc/sys/vm/drop_caches"

Save đoạn script lại và cấp quyền thực thi cho script.

chmod 755 clearcache.sh

Bây giờ anh em đã có thể chạy script này mỗi khi cần xóa RAM cache.

Tiếp theo, để cho đoạn script xóa RAM cache tự chạy mỗi 2 giờ sáng. Mở crontab lên và đặt lịch.

crontab -e

Thêm dòng bên dưới vào crontab để script tự động chạy 2 giờ sáng mỗi ngày (anh em nhớ sửa lại đường dẫn đến script bên dưới cho chính xác).

0 2 * * *  /path/to/clearcache.sh

Anh em có thể dùng công cụ crontab guru để hỗ trợ thiết lập lịch cho crontab nếu anh em không rành crontab.

Xóa RAM Cache trên môi trường production?

Đừng! việc xóa RAM Cache trên môi trường production là không nên đâu anh em. Anh em cứ nghĩ đến trường hợp khi anh em tạo cron chạy xóa RAM cache mỗi ngày lúc 2 giờ sáng. Mỗi ngày lúc 2 giờ sáng đoạn script sẽ được thực thi và nó xóa hết RAM Cache của server. Một ngày nào đó vì lý do nào đó…công ty có sự kiện chẳng hạn, mà lúc 2 giờ sáng website của anh em có nhiều lượt truy cập.

Trong cùng lúc đó, đoạn script xóa RAM cache bắt đầu chạy và xóa hết mọi thứ trong bộ nhớ cache. Giờ toàn bộ người truy cập vào website phải lấy dữ liệu trực tiếp từ ổ cứng. Điều này sẽ dẫn đến kết quả là server gặp sự cố và có khả năng bị lỗi database. Vì vậy, anh em chỉ nên xóa RAM cache khi bắt buộc phải làm và anh em phải biết mình đang làm gì.

Làm sao để xóa bộ nhớ Swap trên Linux?

Nếu anh em muốn xóa Swap, anh em có thể chạy lệnh bên dưới.

swapoff -a && swapon -a

Ngoài ra, anh em có thể thêm lệnh bên trên vào crontab để chạy tự động trong khung thời gian mong muốn, tất nhiên là anh em cũng phải lường trước các rủi ro liên quan đến việc xóa Swap này.

Giờ chúng ta sẽ kết hợp lệnh xóa RAM cache và xóa Swap vào một lệnh thì sẽ như sau.

echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'

Mình chạy thử lệnh này cho anh em xem thử trước và sau khi chạy thì kết quả của lệnh free -h sẽ thế nào nhé.

xoa-ram-cache-linux-1

Như hình trên anh em có thể thấy sau khi chạy lệnh thì phần buff/cache và used của Swap đã giảm.

Vậy là mình đã hướng dẫn anh em cách xóa RAM cache của hệ điều hành Linux. Anh em có thể tham khảo thêm các bài viết khác của mình tại đây: https://toicaiwindao.com/category/huong-dan/