Thời gian gần đây mình nhận thấy có nhiều người dùng sử dụng CyberPanel bị tình trạng lỗi khi truy cập vào giao diện quản trị CyberPanel. Và nguyên nhân gặp phải nhiều nhất là do VPS bị Full Inodes, cụ thể Inodes bị đầy nhanh như vậy là do các session php được tạo ra liên tục, đây là cơ chế hoạt động của CyberPanel mà mình thấy nó chưa thực sự tối ưu.
Và ở đây mình có một VPS của khách hàng, cũng đang gặp tình trạng tương tự. Để kiểm tra các bạn có thể sử dụng lệnh df -i
, và như bạn thấy VPS này đang bị đầy Inodes với số lượng file lên tới hơn 3,5 triệu file.

Bước 1: Kiểm tra thư mục chứa nhiều Inodes
Đầu tiên bạn hãy di chuyển đến thư mục session
, đây sẽ là nơi lưu trữ các session php của CyberPanel. Trên CyberPanel các bạn cài đặt các version PHP nào, thì sẽ thấy tương ứng các thư mục PHP đó.
cd /var/lib/lsphp/session/
Sau khi di chuyển vào thư mục session
, các bạn dùng lệnh bên dưới để xem thống kê Inodes.
du -sh --inodes *
Và ở đây các bạn có thể thấy thư mục chứa nhiều Inodes nhất chính là thư mục lsphp74. Để xem nội dung bên trong thư mục này, bạn có thể dùng lệnh bên dưới để liệt kê 10 file đầu tiên. (Thường số lượng File Session sẽ rất lớn, nên việc sử dụng lệnh ll để xem sẽ rất lâu).
ls -U lsphp74 | head -10
Sau khi xem được các file Session được tạo ra bên trong, thì điểm chung là các file này đều bắt đầu bằng sess_
và phía sau là các ký tự chữ số random.

Bước 2: Xoá các file Session
Khi đã xác định được thư mục chiếm nhiều Inodes chính là các thư mục bên trong đường dẫn /var/lib/lsphp/session/
và các file sinh ra đều có định dạng bắt đầu bằng sess_
. Thì các bạn có thể sử dụng câu lệnh dưới đây để tìm và xóa nhanh các File bắt đầu bằng sess_
tại đường dẫn /var/lib/lsphp/session/
.
find /var/lib/lsphp/session/ -name 'sess_*' -delete
Khi chạy lệnh các bạn hãy chờ cho đến khi lệnh chạy hoàn tất. Quá trình xóa nhanh hay chậm tùy thuộc vào số lượng File nhiều hay ít. Ngoài ra bạn cũng có thể tham khảo thêm Script bên dưới để xóa, script này được chính nhà phát triển của CyberPanel là Usmannasir viết.
bash <(curl https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/CPScripts/setup_php_sessions.sh)
Sau khi chạy lệnh xóa xong, bạn hãy thử kiểm tra lại xem Inodes đã giảm hay chưa. Và ở trường hợp của mình, số lượng Inodes đã giảm từ 100% xuống còn 14%.

Bước 3: Cấu hình Cron xóa tự động
Để tránh các file Session sinh ra làm Full Inodes và để không phải mất công xóa thủ công thường xuyên, thì các bạn có thể sử dụng Cron trên VPS để xóa tự động. Ở đây mình sẽ thiết lập Cron chạy vào 6h sáng hàng ngày như sau:
Bạn thực hiện mở crontab bằng lệnh:
crontab -e
Sau đó thêm nội dung bên dưới vào cuối file và lưu lại. ( Bạn có thể điều chỉnh lại khung thời gian theo nhu cầu của mình. )
0 6 * * * find /var/lib/lsphp/session/ -name 'sess_*' -delete > /dev/null 2>&1
Cuối cùng là khởi động lại dịch vụ để đảm bảo Cron mới được áp dụng
systemctl restart cron
Hy vọng bài viết này sẽ giúp bạn xử lý được vấn đề Full Inodes do Session PHP trên CyberPanel. Chúc các bạn thực hiện thành công.!