chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

靜態(tài)資源訪(fǎng)問(wèn)很慢的排查思路和處理方法

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2026-04-22 14:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景與問(wèn)題

在日常運(yùn)維工作中,前端開(kāi)發(fā)人員經(jīng)常向運(yùn)維反饋“靜態(tài)資源訪(fǎng)問(wèn)很慢”、“頁(yè)面加載時(shí)間長(zhǎng)”、“CDN 好像沒(méi)生效”等問(wèn)題。作為運(yùn)維工程師,我們需要能夠系統(tǒng)地排查這類(lèi)問(wèn)題,而不是簡(jiǎn)單地把責(zé)任推給前端或者 CDN 提供商。

靜態(tài)資源訪(fǎng)問(wèn)慢的原因可能是多方面的:網(wǎng)絡(luò)層面的 DNS 解析延遲、CDN 節(jié)點(diǎn)選擇不當(dāng)、源站連接問(wèn)題;服務(wù)器層面的磁盤(pán) I/O 瓶頸、帶寬限制、Web 服務(wù)器配置不當(dāng);應(yīng)用層面的緩存策略不合理、請(qǐng)求處理效率低;甚至可能是客戶(hù)端瀏覽器本身的問(wèn)題??焖俣ㄎ粏?wèn)題的真正根源,是運(yùn)維工程師的核心能力之一。

本文將從網(wǎng)絡(luò)鏈路、服務(wù)器配置、應(yīng)用層、客戶(hù)端等多個(gè)維度,系統(tǒng)講解靜態(tài)資源訪(fǎng)問(wèn)慢的排查思路和方法。

1 排查前的信息收集

1.1 明確問(wèn)題現(xiàn)象

在開(kāi)始排查之前,首先需要準(zhǔn)確理解問(wèn)題現(xiàn)象。不同的問(wèn)題表現(xiàn)對(duì)應(yīng)不同的排查方向。

如果所有用戶(hù)都反映慢,問(wèn)題可能在服務(wù)端或源站;如果只有部分地區(qū)的用戶(hù)反映慢,問(wèn)題可能在 CDN 節(jié)點(diǎn)或網(wǎng)絡(luò)路由;如果偶爾出現(xiàn)慢,可能是偶發(fā)的網(wǎng)絡(luò)抖動(dòng)或服務(wù)器負(fù)載波動(dòng);如果首次訪(fǎng)問(wèn)慢、再次訪(fǎng)問(wèn)快,說(shuō)明緩存沒(méi)有生效或緩存過(guò)期。

收集以下信息:具體是哪些靜態(tài)資源慢(圖片、CSS、JS、字體)?是什么類(lèi)型的用戶(hù)受影響(全部還是部分)?問(wèn)題是一持續(xù)存在還是間歇性出現(xiàn)?是否與特定的訪(fǎng)問(wèn)時(shí)間相關(guān)?用戶(hù)使用的瀏覽器和網(wǎng)絡(luò)環(huán)境是什么?

1.2 基礎(chǔ)連通性測(cè)試

首先確認(rèn)網(wǎng)絡(luò)層面的基本連通性:

# 測(cè)試 DNS 解析是否正常
nslookup static.example.com
dig static.example.com
host static.example.com

# 測(cè)試到源站的連通性和延遲
ping -c 10 origin.example.com

# 測(cè)試到 CDN 節(jié)點(diǎn)的連通性和延遲
ping -c 10 cdn.example.com

# 測(cè)試端口是否可達(dá)
nc -zv origin.example.com 80
nc -zv origin.example.com 443
telnet origin.example.com 80

# 測(cè)試 TCP 連接建立時(shí)間
time nc -zv origin.example.com 80

1.3 查看 HTTP 響應(yīng)時(shí)間

使用 curl 命令測(cè)量各個(gè)階段的耗時(shí):

# 測(cè)量 DNS 解析、連接建立、SSL 握手(如果是 HTTPS)、首字節(jié)時(shí)間、響應(yīng)總時(shí)間
curl -o /dev/null -s -w"DNS: %{time_namelookup}s
TCP: %{time_connect}s
SSL: %{time_appconnect}s
TTFB: %{time_starttransfer}s
Total: %{time_total}s
"https://static.example.com/js/app.js

# 測(cè)量多次取平均值
foriin{1..5};do
  curl -o /dev/null -s -w"Time: %{time_total}s
"https://static.example.com/js/app.js
done

# 使用 HEAD 請(qǐng)求只獲取響應(yīng)頭(測(cè)試服務(wù)器響應(yīng)速度,不傳輸內(nèi)容)
curl -I -s https://static.example.com/js/app.js

# 測(cè)試響應(yīng)頭中的緩存信息
curl -I -s https://static.example.com/js/app.js | grep -i"cache|expires|last-modified|etag"

2 網(wǎng)絡(luò)層面排查

2.1 DNS 解析問(wèn)題

DNS 解析是瀏覽器獲取資源 IP 地址的第一步,DNS 解析慢會(huì)直接影響整體加載時(shí)間。

檢查 DNS 解析時(shí)間:

# 使用 dig 查看詳細(xì)解析信息
dig +stats static.example.com

# 查看權(quán)威 DNS 的響應(yīng)時(shí)間
dig @8.8.8.8 static.example.com

# 批量測(cè)試多個(gè)域名的 DNS 解析時(shí)間
fordomaininstatic1.example.com static2.example.com;do
  time_dns=$(dig +stats$domain| grep"Query time:"| awk'{print $4}')
 echo"$domain:${time_dns}ms"
done

DNS 解析慢的常見(jiàn)原因:本地 DNS 服務(wù)器性能問(wèn)題;遞歸查詢(xún)鏈路長(zhǎng);權(quán)威 DNS 服務(wù)器響應(yīng)慢;DNS 緩存未命中;域名被劫持或污染。

解決方案:使用更快的公共 DNS(如 Google 8.8.8.8、Cloudflare 1.1.1.1);啟用 DNS 緩存(dnsmasq、nscd);使用 DNS 預(yù)解析(rel="dns-prefetch");接入專(zhuān)業(yè) DNS 解析服務(wù)。

2.2 CDN 相關(guān)問(wèn)題

如果使用了 CDN,需要確認(rèn) CDN 是否正常工作。

檢查 CDN 是否生效:

# 查看響應(yīng)頭中的 CDN 特有字段
curl -I -s https://static.example.com/js/app.js | grep -i"x-cache|x-cdn|cf-|server|via"

# 查看是否返回 CDN 節(jié)點(diǎn)的 IP(而不是源站 IP)
curl -I -s https://static.example.com/js/app.js | grep -i"^server:"

# 對(duì)比直接訪(fǎng)問(wèn)源站和通過(guò) CDN 訪(fǎng)問(wèn)的時(shí)間差異
time curl -o /dev/null -s https://origin.example.com/js/app.js
time curl -o /dev/null -s https://cdn.example.com/js/app.js

# 查看 CDN 節(jié)點(diǎn) IP
curl -I -s https://static.example.com/js/app.js 2>&1 | grep -i"X-Served-By|X-Cache|X-Request-Id"

CDN 緩存未命中是最常見(jiàn)的慢請(qǐng)求原因之一。檢查緩存命中狀態(tài):

# 第一次請(qǐng)求(可能未命中)
curl -I -s https://static.example.com/js/app.js | grep -i"x-cache|miss|hit"

# 第二次請(qǐng)求(應(yīng)該命中)
curl -I -s https://static.example.com/js/app.js | grep -i"x-cache|miss|hit"

# 查看 Cache-Control 和 Expires 頭
curl -I -s https://static.example.com/js/app.js | grep -iE"cache-control|expires|last-modified|etag"

CDN 配置問(wèn)題排查清單:CDN 域名未正確解析到 CDN 節(jié)點(diǎn);源站配置錯(cuò)誤或源站不可達(dá);緩存規(guī)則配置不當(dāng)(TTL 太短);緩存 key 配置不包含必要的參數(shù)(導(dǎo)致相同資源不同參數(shù)都回源);CDN 節(jié)點(diǎn)與用戶(hù)地理位置不匹配;HTTPS 證書(shū)配置問(wèn)題;CDN 流量超限被限流。

2.3 網(wǎng)絡(luò)路由和延遲

使用 traceroute 或 mtr 追蹤網(wǎng)絡(luò)路徑:

# Windows 下使用 tracert
tracert static.example.com

# Linux 下使用 traceroute
traceroute -m 30 static.example.com

# mtr 是 traceroute 和 ping 的結(jié)合,持續(xù)追蹤路由
mtr -r -c 10 static.example.com
mtr -rw -c 10 static.example.com

# 查看各跳的延遲和丟包
mtr -rwbc 50 static.example.com

分析 traceroute 結(jié)果:如果某一跳延遲突然增高,說(shuō)明那一跳的網(wǎng)絡(luò)設(shè)備有問(wèn)題或擁塞;如果某些跳完全超時(shí),可能是防火墻攔截了 ICMP 包;如果最終到達(dá)的 IP 不是預(yù)期的 CDN 節(jié)點(diǎn) IP,說(shuō)明路由可能被劫持。

3 服務(wù)器層面排查

3.1 Web 服務(wù)器配置檢查

Nginx 配置檢查:

# 檢查 Nginx 配置語(yǔ)法
nginx -t

# 查看 Nginx 配置
cat /etc/nginx/nginx.conf
cat /etc/nginx/conf.d/*.conf

# 查看 Nginx 工作進(jìn)程數(shù)和 CPU 親和性配置
worker_processes
worker_connections
worker_cpu_affinity

# 檢查是否啟用了 gzip 壓縮
grep -r"gzip"/etc/nginx/

# 檢查 keepalive 連接配置
grep -r"keepalive"/etc/nginx/

Nginx 關(guān)鍵配置優(yōu)化項(xiàng):worker_processes 應(yīng)該設(shè)置為 auto(自動(dòng)等于 CPU 核心數(shù));worker_connections 影響并發(fā)處理能力;gzip 壓縮可以顯著減少傳輸量;expires 頭設(shè)置緩存時(shí)間;tcp_nodelay 和 tcp_nopush 優(yōu)化 TCP 傳輸;open_file_cache 緩存文件元數(shù)據(jù)。

Apache 配置檢查:

# 檢查配置語(yǔ)法
apachectl configtest

# 查看模塊啟用狀態(tài)
apachectl -M

# 查看 MPM 配置
apachectl -V | grep -i mpm

# 查看加載的配置文件
apachectl -S

3.2 帶寬和網(wǎng)絡(luò) I/O 監(jiān)控

確認(rèn)服務(wù)器帶寬是否成為瓶頸:

# 查看網(wǎng)絡(luò)接口帶寬使用
cat /proc/net/dev
iftop -i eth0
nethogs

# 查看端口級(jí)別的帶寬占用
iptraf-ng

# 使用 sar 查看網(wǎng)絡(luò) I/O 統(tǒng)計(jì)
sar -n DEV 1 5

# 查看 TCP 連接狀態(tài)分布
netstat -an | awk'/^tcp/ {s[$NF]++} END {for(k in s) print k, s[k]}'

# 查看當(dāng)前的網(wǎng)絡(luò)連接數(shù)
ss -s

帶寬計(jì)算:假設(shè)一個(gè)頁(yè)面包含 50 個(gè)靜態(tài)資源文件,平均每個(gè) 50KB,總大小 2.5MB;如果用戶(hù)帶寬是 10Mbps(約 1.2MB/s),單純下載這些資源需要 2 秒以上;如果 CDN 節(jié)點(diǎn)帶寬不足或源站帶寬不足,會(huì)造成排隊(duì)等待。

3.3 磁盤(pán) I/O 排查

靜態(tài)資源最終是從磁盤(pán)讀取的,磁盤(pán) I/O 瓶頸會(huì)直接影響響應(yīng)時(shí)間。

檢查磁盤(pán) I/O 狀態(tài):

# 查看磁盤(pán)使用率
df -h

# 查看磁盤(pán) I/O 使用率
iostat -x 1 5
iotop

# 查看哪些進(jìn)程在大量讀寫(xiě)磁盤(pán)
ps aux --sort=-%io | head -10

# 查看具體的 I/O 操作
pidstat -d 1 5

如果發(fā)現(xiàn)磁盤(pán) I/O 很高,考慮以下優(yōu)化方案:使用 SSD 替代機(jī)械硬盤(pán);啟用 Nginx 的 open_file_cache 緩存文件元數(shù)據(jù);將靜態(tài)資源放到內(nèi)存文件系統(tǒng)(tmpfs);使用 CDN 減輕源站壓力;優(yōu)化文件存儲(chǔ)結(jié)構(gòu)減少隨機(jī)讀取。

3.4 系統(tǒng)負(fù)載排查

使用 top 和 ps 檢查服務(wù)器負(fù)載:

# 查看系統(tǒng)負(fù)載和 CPU、內(nèi)存狀態(tài)
top
htop

# 按 CPU 使用率排序
ps aux --sort=-%cpu | head -10

# 按內(nèi)存使用率排序
ps aux --sort=-%mem | head -10

# 查看進(jìn)程等待 I/O 的時(shí)間
ps aux --sort=-%io | head -10

# 查看 CPU 核心負(fù)載分布(按 1 展開(kāi)多核)
top
# 按 1

如果服務(wù)器負(fù)載很高(load average 接近或超過(guò) CPU 核心數(shù)),需要先解決服務(wù)器本身的性能問(wèn)題,再排查靜態(tài)資源訪(fǎng)問(wèn)慢的問(wèn)題。

4 應(yīng)用層面排查

4.1 Web 服務(wù)器請(qǐng)求日志分析

Nginx 訪(fǎng)問(wèn)日志配置和字段:

# 查看日志格式配置
grep"log_format"/etc/nginx/nginx.conf

# 默認(rèn)的 combined 日志格式包含:IP、時(shí)間、請(qǐng)求方法、URI、狀態(tài)碼、響應(yīng)大小、 Referer、User-Agent
# $request_time 是請(qǐng)求處理時(shí)間(包括 upstream 響應(yīng)時(shí)間、發(fā)送響應(yīng)時(shí)間等)
# $upstream_response_time 是 upstream 響應(yīng)時(shí)間

# 分析訪(fǎng)問(wèn)日志中的慢請(qǐng)求(request_time 很長(zhǎng))
awk'{if($NF > 1) print}'/var/log/nginx/access.log | tail -20

# 按響應(yīng)時(shí)間排序
awk'{print $NF, $0}'/var/log/nginx/access.log | sort -rn | head -20

# 分析哪些 URI 響應(yīng)最慢
awk'{sum[$7]++} END {for(uri in sum) print sum[uri], uri}'/var/log/nginx/access.log | sort -rn | head -20

# 分析響應(yīng)時(shí)間分布
awk'{if($NF > 0.5) print "slow"}'/var/log/nginx/access.log | wc -l
awk'{if($NF > 1) print "very_slow"}'/var/log/nginx/access.log | wc -l

4.2 緩存配置檢查

檢查緩存相關(guān)的 HTTP 響應(yīng)頭:

# 檢查 Cache-Control 頭
curl -I -s https://static.example.com/js/app.js | grep -i"cache-control"

# 檢查 Expires 頭
curl -I -s https://static.example.com/js/app.js | grep -i"expires"

# 檢查 ETag 和 Last-Modified
curl -I -s https://static.example.com/js/app.js | grep -iE"etag|last-modified"

# 對(duì)比不同文件的緩存策略
forfilein/js/app.js /css/style.css /images/logo.png;do
 echo"===$file==="
  curl -I -s https://static.example.com$file| grep -iE"cache|etag|last-modified"
done

緩存策略最佳實(shí)踐:靜態(tài)資源(JS、CSS、圖片、字體)應(yīng)該設(shè)置很長(zhǎng)的緩存時(shí)間(如 1 年),通過(guò)文件名哈希來(lái)控制版本;使用Cache-Control: max-age=31536000, public;使用ETag或Last-Modified支持條件請(qǐng)求;對(duì)于頻繁變更的資源,使用較短的緩存時(shí)間(如幾分鐘到幾小時(shí));確保 CDN 也配置了相應(yīng)的緩存規(guī)則。

4.3 請(qǐng)求大小和壓縮檢查

檢查資源是否啟用了壓縮:

# 測(cè)試 gzip 壓縮是否啟用
curl -I -s -H"Accept-Encoding: gzip"https://static.example.com/js/app.js | grep -i"content-encoding"

# 對(duì)比壓縮前后的文件大小
curl -s -H"Accept-Encoding: gzip"https://static.example.com/js/app.js | wc -c
curl -s https://static.example.com/js/app.js | wc -c

# 測(cè)試 Brotli 壓縮(如果服務(wù)器支持)
curl -I -s -H"Accept-Encoding: br"https://static.example.com/js/app.js | grep -i"content-encoding"

4.4 連接復(fù)用檢查

檢查 HTTP Keep-Alive 是否正確配置:

# 檢查 Connection 頭
curl -I -s https://static.example.com/ | grep -i"connection"

# 測(cè)試多次請(qǐng)求是否復(fù)用同一個(gè)連接(看時(shí)間差異)
time curl -s -o /dev/null https://static.example.com/js/app.js
time curl -s -o /dev/null https://static.example.com/js/app.js

# 強(qiáng)制新建連接測(cè)試(禁用 keep-alive)
curl -I -s -H"Connection: close"https://static.example.com/js/app.js

5 客戶(hù)端層面排查

5.1 瀏覽器開(kāi)發(fā)者工具

瀏覽器 DevTools 是排查前端性能問(wèn)題的利器。

打開(kāi) Chrome DevTools(按 F12),使用 Network 面板:勾選 Disable cache 模擬首次訪(fǎng)問(wèn);勾選 Offline 模擬斷網(wǎng);右鍵點(diǎn)擊列標(biāo)題可以添加更多列,如 Response、Initiator、Waterfall;使用 Filter 過(guò)濾特定類(lèi)型的資源;點(diǎn)擊某個(gè)請(qǐng)求可以查看詳細(xì)信息(Headers、Preview、Response、Timing)。

Timing 面板顯示請(qǐng)求各階段的耗時(shí):Queueing 是請(qǐng)求在瀏覽器隊(duì)列中等待的時(shí)間;Stalled 是請(qǐng)求開(kāi)始前的等待時(shí)間(包括 DNS、TCP、SSL);DNS Lookup 是 DNS 解析時(shí)間;Initial connection 是 TCP 連接建立時(shí)間;SSL 是 SSL/TLS 握手時(shí)間;Request sent 是發(fā)送請(qǐng)求的時(shí)間;Waiting (TTFB) 是等待服務(wù)器響應(yīng)的時(shí)間;Content Download 是下載響應(yīng)內(nèi)容的時(shí)間。

如果 Waiting (TTFB) 很長(zhǎng),問(wèn)題在服務(wù)端;如果 Content Download 很長(zhǎng),問(wèn)題可能是帶寬不足或資源太大;如果 Queueing 很長(zhǎng),說(shuō)明并發(fā)請(qǐng)求受限或服務(wù)器處理不過(guò)來(lái)。

5.2 瀏覽器緩存檢查

在 DevTools 的 Network 面板中:Size 列顯示資源來(lái)源,from memory cache 或 from disk cache 表示來(lái)自瀏覽器緩存,資源大小顯示為 (from disk cache) 或 (from memory cache);如果顯示為 (pending...) 說(shuō)明在等待下載。

強(qiáng)制刷新緩存:Ctrl+F5 或 Ctrl+Shift+R(Windows);Cmd+Shift+R(Mac);開(kāi)發(fā)者工具中右鍵點(diǎn)擊請(qǐng)求,選擇 Clear browser cache。

5.3 并發(fā)連接限制

瀏覽器對(duì)每個(gè)域名有并發(fā)連接數(shù)限制,通常是 6 個(gè)。如果頁(yè)面包含很多靜態(tài)資源,超出限制的請(qǐng)求會(huì)排隊(duì)等待。

使用 HTTP/2 可以突破這個(gè)限制:HTTP/2 支持多路復(fù)用,一個(gè) TCP 連接可以同時(shí)發(fā)送多個(gè)請(qǐng)求。

檢查服務(wù)器是否啟用了 HTTP/2:

curl -I -s -p https://static.example.com/ | grep -i"upgrade|http2"
curl -I -s -p --http2 https://static.example.com/ | grep -i"http"

6 常見(jiàn)問(wèn)題場(chǎng)景與解決方案

6.1 場(chǎng)景一:首次訪(fǎng)問(wèn)慢,重復(fù)訪(fǎng)問(wèn)快

現(xiàn)象:用戶(hù)第一次訪(fǎng)問(wèn)頁(yè)面時(shí)很慢,刷新后明顯變快。

原因分析:瀏覽器緩存未生效,每次都需要從服務(wù)器下載資源。

排查方法:使用 DevTools Network 面板,勾選 Disable cache,觀察首次訪(fǎng)問(wèn)和后續(xù)訪(fǎng)問(wèn)的差異。檢查資源的 Cache-Control 和 Expires 頭是否正確設(shè)置。檢查 CDN 節(jié)點(diǎn)的緩存狀態(tài)。

解決方案:配置正確的緩存頭(Cache-Control: max-age=31536000);使用帶哈希的文件名(app.a1b2c3d4.js)實(shí)現(xiàn)緩存更新;配置 CDN 的緩存規(guī)則;使用 Service Worker 實(shí)現(xiàn)更精細(xì)的緩存控制。

6.2 場(chǎng)景二:CDN 節(jié)點(diǎn)返回命中但仍然很慢

現(xiàn)象:響應(yīng)頭顯示 CDN 命中緩存,但用戶(hù)感知仍然很慢。

原因分析:CDN 節(jié)點(diǎn)與用戶(hù)物理距離遠(yuǎn);CDN 節(jié)點(diǎn)負(fù)載高;CDN 內(nèi)部網(wǎng)絡(luò)擁塞。

排查方法:使用多個(gè)地點(diǎn)的 CDN 測(cè)速工具測(cè)試。分析 traceroute 結(jié)果,看 CDN 節(jié)點(diǎn)的位置。使用 CDN 提供的監(jiān)控面板查看節(jié)點(diǎn)健康狀態(tài)和延遲統(tǒng)計(jì)。

解決方案:選擇更靠近用戶(hù)的 CDN 節(jié)點(diǎn)或使用 Anycast;使用 CDN 提供商的性能優(yōu)化功能(如協(xié)議優(yōu)化、壓縮優(yōu)化);考慮多 CDN 方案;聯(lián)系 CDN 提供商排查節(jié)點(diǎn)問(wèn)題。

6.3 場(chǎng)景三:某些地區(qū)用戶(hù)訪(fǎng)問(wèn)慢

現(xiàn)象:只有部分地區(qū)的用戶(hù)反映慢,其他地區(qū)正常。

原因分析:網(wǎng)絡(luò)路由問(wèn)題;CDN 節(jié)點(diǎn)覆蓋不完整;當(dāng)?shù)?ISP 限速或劫持。

排查方法:收集用戶(hù)反映慢的地區(qū)信息。使用各地的 CDN 測(cè)速工具(如 CDN Planet)。聯(lián)系當(dāng)?shù)赜脩?hù)獲取 traceroute 結(jié)果。對(duì)比不同地區(qū)用戶(hù)的訪(fǎng)問(wèn)延遲。

解決方案:如果是 CDN 問(wèn)題,考慮更換或增加 CDN 提供商;如果是路由問(wèn)題,聯(lián)系 ISP 或 CDN 提供商排查;使用 DNS 智能解析,將用戶(hù)引導(dǎo)到最近的服務(wù)器。

6.4 場(chǎng)景四:大量小文件導(dǎo)致響應(yīng)慢

現(xiàn)象:每個(gè)文件都很小(幾 KB),但請(qǐng)求很多,總響應(yīng)時(shí)間很長(zhǎng)。

原因分析:每個(gè)請(qǐng)求都需要建立 TCP 連接(如果沒(méi)有 keep-alive);每個(gè)請(qǐng)求都有 DNS、TCP、SSL 開(kāi)銷(xiāo);請(qǐng)求并發(fā)受限。

排查方法:使用瀏覽器 DevTools 分析請(qǐng)求瀑布圖??词欠裼写罅空?qǐng)求處于 Stalled 狀態(tài)。檢查請(qǐng)求頭中的 Connection 是否為 keep-alive。

解決方案:合并小文件(CSS sprites、JS bundle);使用 HTTP/2 多路復(fù)用;使用內(nèi)聯(lián)資源(data URI);優(yōu)化域名分區(qū)策略。

6.5 場(chǎng)景五:圖片加載慢

現(xiàn)象:圖片明顯比其他資源慢。

原因分析:圖片未經(jīng)壓縮或壓縮比低;圖片尺寸太大;圖片格式不優(yōu)化;未使用 CDN 加速。

排查方法:檢查圖片文件大小。檢查圖片是否使用了壓縮(如 WebP)。檢查圖片是否使用了 CDN。檢查圖片是否有正確的緩存頭。

解決方案:使用圖片壓縮工具優(yōu)化圖片大小;使用響應(yīng)式圖片(srcset);使用 WebP 或 AVIF 等現(xiàn)代格式;配置 CDN 緩存圖片資源;使用 CDN 的圖片處理功能(裁剪、壓縮、格式轉(zhuǎn)換)。

7 自動(dòng)化監(jiān)控和告警

7.1 靜態(tài)資源響應(yīng)時(shí)間監(jiān)控腳本

#!/bin/bash
# monitor_static.sh - 靜態(tài)資源響應(yīng)時(shí)間監(jiān)控

STATIC_URLS=(
 "https://static.example.com/js/app.js"
 "https://static.example.com/css/main.css"
 "https://static.example.com/images/logo.png"
)

THRESHOLD=1 # 秒
ALERT_EMAIL="ops@example.com"

LOG_FILE="/var/log/static_monitor.log"

log() {
 echo"$(date '+%Y-%m-%d %H:%M:%S')-$1">>$LOG_FILE
}

send_alert() {
 echo"Static resource$1took$2s(threshold:${THRESHOLD}s)"| mail -s"Static Resource Alert"$ALERT_EMAIL
}

forurlin"${STATIC_URLS[@]}";do
  response_time=$(curl -o /dev/null -s -w"%{time_total}""$url")

 if(( $(echo"$response_time>$THRESHOLD"| bc -l) ));then
   log"SLOW:$url-${response_time}s"
    send_alert"$url""$response_time"
 else
   log"OK:$url-${response_time}s"
 fi
done

7.2 CDN 緩存命中率監(jiān)控

#!/bin/bash
# monitor_cdn_cache.sh - CDN 緩存命中率監(jiān)控

# 獲取 CDN 提供的實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)(示例使用 Cloudflare API)
API_KEY="your_cloudflare_api_key"
ZONE_ID="your_zone_id"

# 獲取緩存命中率統(tǒng)計(jì)
response=$(curl -s -X GET"https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/analytics/dashboard?since=60&until=0"
  -H"Authorization: Bearer${API_KEY}"
  -H"Content-Type: application/json")

# 提取緩存命中率
cache_rate=$(echo$response| jq'.result.totals.cache.ratio * 100')

log"CDN Cache Hit Rate:${cache_rate}%"

if(( $(echo"$cache_rate< 80"?| bc -l) ));?then
? ??echo"WARNING: CDN cache hit rate is?${cache_rate}% (expected > 80%)"| mail -s"CDN Cache Alert"ops@example.com
fi

8 結(jié)論

靜態(tài)資源訪(fǎng)問(wèn)慢是一個(gè)涉及多層面的問(wèn)題,運(yùn)維工程師需要建立系統(tǒng)化的排查思路。從網(wǎng)絡(luò)層面到服務(wù)器層面,從應(yīng)用配置到客戶(hù)端行為,每個(gè)環(huán)節(jié)都可能成為瓶頸。

快速定位問(wèn)題的關(guān)鍵是:先確認(rèn)問(wèn)題的范圍(全部用戶(hù)還是部分用戶(hù))、確定問(wèn)題的時(shí)間特征(持續(xù)還是偶發(fā))、明確是哪個(gè)環(huán)節(jié)慢(DNS、連接、TTFB 還是下載)。

最重要的排查工具包括:curl 用于測(cè)試服務(wù)端響應(yīng);traceroute/mtr 用于分析網(wǎng)絡(luò)路由;瀏覽器 DevTools 用于分析客戶(hù)端行為;Web 服務(wù)器日志用于分析服務(wù)端處理時(shí)間;系統(tǒng)工具(top、iostat、iftop)用于分析服務(wù)器負(fù)載。

建立常態(tài)化的監(jiān)控和告警機(jī)制,才能在問(wèn)題影響用戶(hù)之前發(fā)現(xiàn)并解決。靜態(tài)資源的性能優(yōu)化是一個(gè)持續(xù)的過(guò)程,需要結(jié)合業(yè)務(wù)特點(diǎn)、用戶(hù)分布、技術(shù)演進(jìn)不斷迭代。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    14

    文章

    10347

    瀏覽量

    91741
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    8333

    瀏覽量

    95554
  • DNS
    DNS
    +關(guān)注

    關(guān)注

    0

    文章

    230

    瀏覽量

    21228

原文標(biāo)題:靜態(tài)資源訪(fǎng)問(wèn)很慢,真的是前端問(wèn)題嗎?運(yùn)維排查思路來(lái)了

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux系統(tǒng)CPU占用率100%的排查思路

    今天浩道跟大家分享linux硬核干貨,工作中當(dāng)你服務(wù)器CPU達(dá)到100%時(shí),干著急是沒(méi)有用的,該查問(wèn)題還得自己去查。本文將給大家羅列排查異常故障思路,并且文末附上相關(guān)shell腳本,去實(shí)際一番,你會(huì)發(fā)現(xiàn)原來(lái)解決問(wèn)題的方法如此之簡(jiǎn)
    的頭像 發(fā)表于 01-23 10:26 ?7472次閱讀
    Linux系統(tǒng)CPU占用率100%的<b class='flag-5'>排查</b><b class='flag-5'>思路</b>

    科普小課堂|LCD 問(wèn)題排查思路解析

    在嵌入式系統(tǒng)開(kāi)發(fā)中,液晶顯示器(LCD)作為人機(jī)交互的重要界面,其穩(wěn)定性和可靠性至關(guān)重要。然而在實(shí)際應(yīng)用中,LCD難免會(huì)遇到各種問(wèn)題。今天和各位小伙伴分享一些常見(jiàn)的LCD問(wèn)題及其排查思路,幫助大家快速定位并解決這些問(wèn)題。
    的頭像 發(fā)表于 08-05 17:06 ?2706次閱讀
    科普小課堂|LCD 問(wèn)題<b class='flag-5'>排查</b><b class='flag-5'>思路</b>解析

    效率提升,飛凌AM62x開(kāi)發(fā)板的常見(jiàn)接口問(wèn)題及排查思路(第1期)

    。本文將針對(duì)開(kāi)發(fā)過(guò)程中可能遇到的各類(lèi)接口問(wèn)題,提供系統(tǒng)化的排查思路和解決方案,幫助開(kāi)發(fā)者快速定位并解決問(wèn)題。一、通用排查思路在硬件調(diào)試過(guò)程中,系統(tǒng)化的
    的頭像 發(fā)表于 06-06 14:33 ?2125次閱讀
    效率提升,飛凌AM62x開(kāi)發(fā)板的常見(jiàn)接口問(wèn)題及<b class='flag-5'>排查</b><b class='flag-5'>思路</b>(第1期)

    AM62x開(kāi)發(fā)板的常見(jiàn)接口問(wèn)題及排查思路(第2期)

    ?!堕_(kāi)發(fā)效率翻倍!AM62x開(kāi)發(fā)板的常見(jiàn)接口問(wèn)題及排查思路(第1期)》本篇文章將繼續(xù)針對(duì)開(kāi)發(fā)過(guò)程中可能遇到的各類(lèi)接口問(wèn)題,為大家提供系統(tǒng)化的排查思路和解決方案。
    的頭像 發(fā)表于 11-07 08:06 ?5415次閱讀
    AM62x開(kāi)發(fā)板的常見(jiàn)接口問(wèn)題及<b class='flag-5'>排查</b><b class='flag-5'>思路</b>(第2期)

    Flink on YARN(下):常見(jiàn)問(wèn)題與排查思路

    應(yīng)用資源分配問(wèn)題排查思路如果 Flink 應(yīng)用不能正常啟動(dòng)達(dá)到 RUNNING 狀態(tài),可以按以下步驟進(jìn)行排查:1.需要先檢查應(yīng)用當(dāng)前狀態(tài),根據(jù)上述對(duì)啟動(dòng)流程的說(shuō)明,我們知道:處于 N
    發(fā)表于 10-10 14:14

    Flink on YARN(下):常見(jiàn)問(wèn)題與排查思路

    }/▼ Flink 應(yīng)用資源分配問(wèn)題排查思路如果 Flink 應(yīng)用不能正常啟動(dòng)達(dá)到 RUNNING 狀態(tài),可以按以下步驟進(jìn)行排查:1.需要先檢查應(yīng)用當(dāng)前狀態(tài),根據(jù)上述對(duì)啟動(dòng)流程的說(shuō)明,
    發(fā)表于 10-14 15:04

    基于數(shù)據(jù)流分析與識(shí)別的Web資源訪(fǎng)問(wèn)控制

    針對(duì)動(dòng)態(tài)Web頁(yè)面資源中的實(shí)施細(xì)粒度和透明訪(fǎng)問(wèn)控制問(wèn)題,定義片斷的概念,提出基于數(shù)據(jù)流分析的“片斷”級(jí)Web頁(yè)面資源訪(fǎng)問(wèn)控制方法,分析數(shù)據(jù)
    發(fā)表于 04-09 09:27 ?23次下載

    在MATLAB環(huán)境中調(diào)用DLL對(duì)硬件資源訪(fǎng)問(wèn)方法

    MATLAB是一款高性能的科學(xué)與工程計(jì)算軟件,具有強(qiáng)大的數(shù)值計(jì)算和分析能力,但其對(duì)硬件的訪(fǎng)問(wèn)能力較弱。在MATLAB環(huán)境中實(shí)現(xiàn)對(duì)硬件資源的直接訪(fǎng)問(wèn)可以極大的方便對(duì)數(shù)據(jù)的處理及算法
    發(fā)表于 08-08 14:13 ?0次下載
    在MATLAB環(huán)境中調(diào)用DLL對(duì)硬件<b class='flag-5'>資源</b><b class='flag-5'>訪(fǎng)問(wèn)</b>的<b class='flag-5'>方法</b>

    TOP小區(qū)處理思路

    TOP小區(qū)處理思路,為T(mén)OP小區(qū)處理提供建議和方法,建議多多下載學(xué)習(xí),建議多多下載學(xué)習(xí),大幅提高工作效率
    發(fā)表于 12-08 11:05 ?0次下載

    建立一個(gè)方法和套路來(lái)對(duì) Load 高問(wèn)題排查

    講解 Linux Load 高如何排查的話(huà)題屬于老生常談了,但多數(shù)文章只是聚焦了幾個(gè)點(diǎn),缺少整體排查思路的介紹。所謂 “授人以魚(yú)不如授人以漁"。本文試圖建立一個(gè)方法和套路,來(lái)幫助讀者對(duì)
    的頭像 發(fā)表于 12-28 14:18 ?6305次閱讀
    建立一個(gè)<b class='flag-5'>方法</b>和套路來(lái)對(duì) Load 高問(wèn)題<b class='flag-5'>排查</b>

    學(xué)會(huì)處理Linux內(nèi)核訪(fǎng)問(wèn)外設(shè)I/O資源的方式

    Linux內(nèi)核訪(fǎng)問(wèn)外設(shè)I/O內(nèi)存資源的方式有兩種:動(dòng)態(tài)映射(ioremap)和靜態(tài)映射(map_desc)。
    發(fā)表于 05-05 13:54 ?842次閱讀

    網(wǎng)絡(luò)故障排查思路處理方法

    網(wǎng)絡(luò)故障是最容易出現(xiàn)的,且難以解決的問(wèn)題。本文提供的網(wǎng)絡(luò)故障排查思路處理方法,可解決日常工作中大部分網(wǎng)絡(luò)問(wèn)題。
    發(fā)表于 10-31 09:14 ?1.4w次閱讀

    網(wǎng)絡(luò)二層環(huán)路的排查思路與技巧

    今天浩道跟大家分享一篇關(guān)于網(wǎng)絡(luò)二層環(huán)路的排查思路與技巧,希望能夠在日常工作中幫助到你,得到老板的雞腿大餐!
    的頭像 發(fā)表于 12-29 15:38 ?5121次閱讀

    Linux服務(wù)器常見(jiàn)的網(wǎng)絡(luò)故障排查方法

    日常工作中我們有時(shí)會(huì)遇到服務(wù)器網(wǎng)絡(luò)不通問(wèn)題,導(dǎo)致服務(wù)器無(wú)法正常運(yùn)行。要想解決服務(wù)器網(wǎng)絡(luò)故障問(wèn)題,通常要先進(jìn)行網(wǎng)絡(luò)故障排查,這里以L(fǎng)inux服務(wù)器為例來(lái)看下常用的網(wǎng)絡(luò)故障排查方法介紹。 第1步、
    的頭像 發(fā)表于 04-14 15:47 ?4086次閱讀

    單片機(jī)串口發(fā)送數(shù)據(jù)很慢?這種方法幫助你提高!

    單片機(jī)串口發(fā)送數(shù)據(jù)很慢?這種方法幫助你提高!
    的頭像 發(fā)表于 11-02 17:43 ?2398次閱讀
    單片機(jī)串口發(fā)送數(shù)據(jù)<b class='flag-5'>很慢</b>?這種<b class='flag-5'>方法</b>幫助你提高!