Trên một VPS Ubuntu chạy nginx + mysql, khi kiểm tra dung lượng ổ đĩa, ta thấy thư mục /var/log phình to bất thường:
5.7G /var/log 4.1G /var/log/journal 1.5G /var/log/nginx 8.7M /var/log/mysql 5.4M /var/log/letsencrypt 92K /var/log/apt 72K /var/log/unattended-upgrades
👉 Nguyên nhân chính:
systemd journal không bị giới hạn dung lượngnginx access/error log ghi quá nhiều (bot, crawler, request 404…)Đây không phải lỗi, mà là do chưa cấu hình log rotation / log limit.
/var/log/journal – Thủ phạm lớn nhất (4.1GB)systemd-journald quản lýKiểm tra dung lượng journal:
journalctl --disk-usage
/var/log/nginx – Access & Error log (1.5GB)Thường bao gồm:
access.logerror.logaccess.log.1, error.log.1*.gzNguyên nhân:
| Thư mục | Dung lượng | Đánh giá |
|---|---|---|
| mysql | 8.7MB | Bình thường |
| letsencrypt | 5.4MB | Bình thường |
| apt / unattended | <100KB | Không cần xử lý |
Giữ lại log 7 ngày:
sudo journalctl --vacuum-time=7d
Hoặc giới hạn 500MB:
sudo journalctl --vacuum-size=500M
✔ Không làm sập server
✔ Không cần reboot
Mở file cấu hình:
sudo nano /etc/systemd/journald.conf
Thêm / sửa:
SystemMaxUse=500M SystemKeepFree=200M MaxRetentionSec=7day
Áp dụng:
sudo systemctl restart systemd-journald
👉 Từ nay journal không bao giờ vượt quá 500MB
ls -lh /var/log/nginx
sudo rm -f /var/log/nginx/*.gz sudo rm -f /var/log/nginx/*.[0-9]
sudo truncate -s 0 /var/log/nginx/access.log sudo truncate -s 0 /var/log/nginx/error.log
👉 Không dùng rm access.log vì nginx đang giữ file descriptor
Reload nginx:
sudo systemctl reload nginx
Mở cấu hình nginx logrotate:
cat /etc/logrotate.d/nginx
Cấu hình chuẩn nên có:
/var/log/nginx/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null
endscript
}
Chạy test logrotate:
sudo logrotate -f /etc/logrotate.conf
location ~* \.(jpg|jpeg|png|gif|css|js|ico|webp)$ {
access_log off;
}
# Dọn journal journalctl --vacuum-time=7d # Dọn nginx log rm -f /var/log/nginx/*.gz rm -f /var/log/nginx/*.[0-9] truncate -s 0 /var/log/nginx/access.log truncate -s 0 /var/log/nginx/error.log systemctl reload nginx # Kiểm tra lại du -sh /var/log/*
/var/log lớn không phải lỗi👉 Sau khi xử lý, /var/log thường chỉ còn < 1GB và không tăng vô hạn nữa.
Bài viết dựa trên dữ liệu thực tế hệ thống:
5.7G /var/log 4.1G journal 1.5G nginx
Phù hợp cho VPS Ubuntu, nginx, website tin tức, crawler nhiều.