从日志出发的缓存策略优化
一 采集与字段设计
%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %D %{If-Modified-Since}i %{Cache-Control}o %{ETag}o
二 指标口径与日志分析
awk 'BEGIN{total=0; hit=0} {
total++; if($9==304 || ($9==200 && $8==0)) hit++
} END {printf "协商缓存命中率: %.2f%%\n", hit/total*100}' access.log
awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -10
# 假设 %D 为第10列,阈值 500ms
awk '$10 > 500000 {print $7, $10/1000000 "s"}' access.log | sort -k2 -nr
awk '{
url=$7; cc=$12;
if($9!=304 && (cc !~ /max-age/ && cc !~ /public/)) print url, cc
}' access.log | sort | uniq -c | sort -nr
三 依据日志的优化动作
<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
<init-param>
<param-name>ExpiresByType text/css</param-name>
<param-value>access plus 1 month</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType application/javascript</param-name>
<param-value>access plus 1 month</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType image/jpeg</param-name>
<param-value>access plus 1 month</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>*.css</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.png</url-pattern>
</filter-mapping>
<Connector port="8080" protocol="HTTP/1.1"
compression="on"
compressableMimeType="text/html,text/xml,text/plain,text/css,application/javascript,application/json"
compressionMinSize="1024" />
四 闭环与风险控制