Chúng tôi có bộ đệm nginx rất lớn (gigabyte) mà đôi khi chúng tôi cần phải xóa. Tôi đã tạo ra một tập lệnh xóa bộ nhớ cache ngay lập tức (liên quan đến Nginx) và sau đó xóa thư mục bộ đệm mà không bỏ đói ứng dụng chính cho I / O đĩa.
Tóm tắt:
- Di chuyển thư mục bộ đệm đến một vị trí mới (trên cùng hệ thống tệp!) (Điều này không phá vỡ bất kỳ mô tả tệp đang mở nào)
- Tạo lại thư mục bộ đệm gốc, trống
- Tải lại Nginx ( tải lại duyên dáng , trong đó nginx cho phép nhân viên cũ hoàn thành các yêu cầu đang thực hiện)
- Xóa dữ liệu lưu trữ cũ
Đây là tập lệnh, được điều chỉnh theo Ubuntu 16.04 LTS, với bộ đệm được đặt tại /mnt/nginx-cache
:
#!/bin/bash
set -e
TMPCACHE=`mktemp --directory --tmpdir=/mnt nginx-cache-XXXXXXXXXX`
TMPTEMP=`mktemp --directory --tmpdir=/mnt nginx-temp-XXXXXXXXXX`
# Move the old cache folders out of the way
mv /mnt/nginx-cache $TMPCACHE
mkdir -p /mnt/nginx-cache
chmod -R 775 /mnt/nginx-cache
chown www-data:www-data /mnt/nginx-cache
mv /mnt/nginx-temp $TMPTEMP
mkdir -p /mnt/nginx-temp
chmod -R 775 /mnt/nginx-temp
chown www-data:www-data /mnt/nginx-temp
# Tell Nginx about the new folders.
service nginx reload
# Create an empty folder.
rm -rf /mnt/empty
mkdir -p /mnt/empty
# Remove the old cache and old temp folders w/o thrashing the disk...
# See http://serverfault.com/questions/546177/how-to-keep-subtree-removal-rm-rf-from-starving-other-processes-for-disk-i
# Note: the `ionice` and `nice` may not actually do much, but why not?
ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ $TMPCACHE
ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ $TMPTEMP
rm -rf $TMPCACHE
rm -rf $TMPTEMP
rm -rf /mnt/empty
Và trong trường hợp nó hữu ích, đây là cấu hình Nginx chúng tôi sử dụng:
upstream myapp {
server localhost:1337 fail_timeout=0;
}
proxy_cache_path /mnt/nginx-cache/app levels=2:2:2 keys_zone=app_cache:100m inactive=1y max_size=10g;
proxy_temp_path /mnt/nginx-temp/app;
server {
listen 4316 default;
server_name myapp.com;
location / {
proxy_pass http://appserv;
proxy_cache app_cache;
proxy_cache_valid 200 1y;
proxy_cache_valid 404 1m;
}
}
proxy_cache
?