首先需要從系統日志和應用日志中提取與網絡相關的錯誤信息。
journalctl
命令查看Node.js服務的系統級日志(需替換your-nodejs-service
為實際服務名),或直接讀取/var/log/syslog
文件:journalctl -u your-nodejs-service | grep -i "network\|error\|timeout"
cat /var/log/syslog | grep your-nodejs-service | grep -i "network"
winston
、morgan
等日志庫,調整日志級別為debug
或trace
(如logger.level = 'debug'
),捕獲更詳細的網絡請求細節(如請求URL、響應狀態、錯誤堆棧)。通過tail -f app.log
實時查看最新日志,重點搜索以下常見網絡錯誤關鍵詞:
ECONNREFUSED
:目標服務器未啟動或端口錯誤;ETIMEDOUT
:連接超時(網絡延遲或防火墻攔截);ENOTFOUND
:DNS解析失?。ㄓ蛎淮嬖诨駾NS服務器配置錯誤);EADDRINUSE
:端口已被其他進程占用。根據日志中的錯誤關鍵詞,快速判斷問題所屬類別:
systemctl status target-service
)、端口是否正確(如app.listen(3000)
中的3000
是否與客戶端配置一致)、防火墻是否攔截(ufw status
查看Debian防火墻規則)。ping <remote_ip>
測試網絡連通性,traceroute <remote_ip>
追蹤路由路徑(查看是否有網絡節點延遲過高);調整Node.js請求的超時設置(如http.request
的timeout
參數或axios
的timeout
配置)。nslookup <hostname>
或dig <hostname>
驗證域名解析是否正確,若解析失敗,檢查/etc/hosts
文件(本地域名映射)或更換DNS服務器(如8.8.8.8
)。lsof -i :<port>
(如lsof -i :3000
)查看占用端口的進程,終止沖突進程(kill -9 <PID>
)或更改應用端口。--inspect-brk
標志啟動應用(如node --inspect-brk app.js
),在Chrome瀏覽器中訪問chrome://inspect
,點擊“為Node打開專用DevTools”,設置斷點并逐步執行代碼,檢查網絡請求的變量值(如req.url
、res.statusCode
)和狀態流程。.vscode/launch.json
文件,配置調試任務(如針對Express應用的配置):{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug Node.js App",
"program": "${workspaceFolder}/app.js",
"runtimeArgs": ["--inspect-brk"],
"console": "integratedTerminal"
}
]
}
啟動調試后,通過“Step Over”“Step Into”等功能追蹤網絡請求的處理過程。tcpdump
(命令行)或Wireshark
(圖形化)捕獲網絡流量,分析TCP連接狀態(如SYN_SENT
、ESTABLISHED
、CLOSED
)、丟包率(packet loss
)或延遲(latency
),定位網絡層問題(如路由器故障、帶寬不足)。ping <target_ip>
測試可達性,traceroute <target_ip>
查看路由路徑(若有* * *
表示網絡中斷)。ufw status
查看Debian防火墻規則,確保Node.js應用的端口(如3000
、8080
)處于ALLOW
狀態(如ufw allow 3000
)。/etc/resolv.conf
文件(DNS服務器配置),確保域名解析正確(如nameserver 8.8.8.8
)。top
或htop
監控CPU、內存使用情況,若資源占用過高(如CPU使用率超過80%),可能導致網絡請求處理緩慢,需優化應用性能(如減少同步操作、增加緩存)或升級服務器硬件。ETIMEDOUT
、ECONNREFUSED
),在代碼中添加重試邏輯(如使用async-retry
庫),設置最大重試次數(如3次)和時間間隔(如1秒)。winston-daily-rotate-file
庫),通過Elasticsearch、Kibana等工具進行日志分析和可視化,設置告警規則(如ETIMEDOUT
錯誤超過10次/分鐘時發送郵件通知)。npm update
更新Node.js依賴庫,修復已知漏洞;使用apt update && apt upgrade
更新Debian系統和內核,提升系統穩定性。