分布式微服務系統架構第134集:筆記1運維服務器經驗,高并發,大數據量系統

加群聯系作者vx:xiaoda0423

倉庫地址:https://webvueblog.github.io/JavaPlusDoc/

https://1024bat.cn/

https://github.com/webVueBlog/fastapi_plus

https://webvueblog.github.io/JavaPlusDoc/




? 一、查看端口是否被占用的常用命令

1???lsof?命令(最推薦)

lsof -i :端口號
示例:
lsof -i :8080

輸出:

COMMAND ? PID ?USER ? FD ? TYPE ?DEVICE SIZE/OFF NODE NAME
java ? ? 1278 ?root ? 45u ?IPv6 ?123456 ? ? ?0t0 ?TCP *:http-alt (LISTEN)

表示:Java 進程正在監聽 8080 端口。


2???netstat?命令(傳統方式)

netstat -tunlp | grep :端口號
示例:
netstat -tunlp | grep :8080

輸出:

tcp6 ?0 ?0 :::8080 ?:::* ?LISTEN ?1278/java

3???ss?命令(更快更現代)

ss -ltnp | grep :端口號
示例:
ss -ltnp | grep :8080

輸出:

LISTEN 0 128 :::8080 :::* users:(("java",pid=1278,fd=45))

? 二、查看哪個程序占用了端口

命令組合:

lsof -i :端口號
# 或
netstat -tunlp | grep :端口號
# 或
ss -ltnp | grep :端口號

你會看到:

  • PID:進程 ID

  • COMMAND:進程名

  • fd:文件描述符

  • LISTEN?狀態:表示該端口是服務端監聽中


? 三、查看端口是否能訪問(遠程端口)

本地 telnet(測試遠程是否通):

telnet ip port
示例:
telnet 127.0.0.1 8080

如果顯示?Connected to 127.0.0.1.,說明端口是開放的。


? 四、沒有?lsof?/?netstat?時怎么辦?

安裝命令:

# Debian/Ubuntu
sudo apt install lsof net-tools# CentOS/RHEL
sudo yum install lsof net-tools

? 五、進階工具(可選)

工具

用途

nmap

掃描本機或遠程端口是否開放

fuser

快速找出哪個 PID 占用端口

nc -zv

測試端口連通性

`ss -anp

grep LISTEN`


查看端口是否被占用,我通常使用?lsof -i :端口?或?ss -ltnp,能直接定位是哪一個進程監聽該端口。實際中如果是端口沖突導致服務啟動失敗,可以結合?kill PID?或?fuser -k?來釋放端口。


  • 先宏觀、后細節:先看全局指標再聚焦具體進程 / 線程 / 調用棧

  • 先“活數據”,后“冷分析”?:先用實時工具捕捉異常,再用離線日志或 Dump 深挖

  • 留證據、可復現:執行高頻采樣時先確認磁盤空間、權限和對業務的影響


0 事前準備

動作

目的

記錄時間線

(報警觸發點、峰值出現點)

方便對比前后基線

確認變更

(發布、配置、流量)

排除代碼 / 業務層面因素

確保 root / sudo + perf/ebpf 權限

避免臨時被卡權限


1 快速橫向體檢(1–2 分鐘)

uptime ? ? ? ? ? ?# load & run-queue
top -b -n 1 ? ? ??# CPU/Load/Swap 一眼看
free -m ? ? ? ? ??# 內存概覽
df -hT ? ? ? ? ? ?# 容量/只讀分區
iostat -xz 1 3 ? ?# 磁盤 util% / await
sar -n DEV 1 3 ? ?# 網卡收發速率/丟包

判斷優先級

  1. load≈CPU 核數且 %sy/%wa 高 → 先查 CPU 或磁盤

  2. free 可用內存低 + swpd 增長 → 查內存泄漏 / OOM

  3. iostat %util 常年 >80% 或 await > 50 ms → 查磁盤

  4. 網絡丟包 / re-trans 增長 → 查網絡


2 CPU 排查

步驟

命令

說明

① 進程定位

top -H

?/?htop

找到高 CPU PID 或線程 (TID)

② 線程源碼歸位

ps -Lp <PID>

將 TID ? 線程名

③ 調用棧抓取

perf top -p <PID>

?或?perf record -F 99 -p <PID> -- sleep 30,隨后?perf report

取熱點函數

④ Java 專用

jstack -l <PID>

?/ async-profiler

對應線程狀態、死循環、GC 卡頓

⑤ 內核搶占

mpstat -P ALL 1

pidstat -w

context-switch、cpu steal 判斷虛機噪音


3 內存排查

步驟

命令

說明

① ??初判

free -m

vmstat 1

緩存/緩存回收、swap in/out

② 進程級

top -o %MEM

smem -r

找占用最大的進程

③ 映射明細

pmap -x <PID>

?/?cat /proc/<PID>/smaps_rollup

堆 / 共享庫 / 匿名頁

④ Java 堆

jmap -heap <PID>

jmap -histo:livejcmd GC.heap_info

老年代溢出、類加載飆升

⑤ 堆 Dump

jmap -dump:live,format=b,file=heap.hprof <PID>

,MAT / VisualVM 分析

根因定位(集合持有 / 緩存未清)

⑥ 內核緩存

slabtop

kmemleak

罕見但要排除 driver 泄漏


4 磁盤 & IO 排查

步驟

命令

說明

① 負載概覽

iostat -xz 1%util

awaitavgrq-sz

② 進程級

pidstat -d 1

iotop -b -n 3

哪個進程讀寫大

③ 磁盤延遲

blktrace /dev/sdX

?+?blkparse

隊列/設備層延遲

④ 文件定位

lsof +D /path

?或?fileslower-bpfcc

頻繁訪問文件路徑

⑤ FS 級別

df -ih

dumpe2fs -h

inode 耗盡、磁盤壞塊

⑥ 調優

deadline→mq-deadline

noopfio?基準

IO 調度、RAID/SSD 隊列深度


5 網絡排查

步驟

命令

說明

① 速率 / 丟包

sar -n DEV 1

ethtool -S eth0

TX/RX errors, drops

② 連接數

ss -s

ss -ant state established

SYN flood? FD 耗盡?

③ 會話詳情

ss -ntp sport = :8080

哪些遠端連接最多

④ RTT / 路由

mtr <ip>

tracepath

跨機房抖動排除

⑤ 微包/重傳

tcpdump -i eth0 -w cap.pcap

?+ Wireshark

Window size、Dup ACK

⑥ Socket 隊列

`netstat -anp

grep?ss -ltn`


6 跨資源綜合分析

  1. 時間軸對齊:Grafana/Prometheus 將 CPU、iowait、GC、p99 延遲放在同一 Dashboard。

  2. 內核 ebpf:用 bcc / bpftrace 即時追蹤 (e.g.?profile,?tcpconnlat,?biolatency).

  3. 壓測復現:ab / wrk / vegeta 重放流量,配合?perf/kernexec?抓熱點。

  4. 容器視角docker stats、cgroup?/sys/fs/cgroup/*/usage_usec、K8s Metrics-Server。

  5. 自動化:把常用采樣腳本寫成?diag.sh,配合 Ansible/Fabric 一鍵收集,避免線上手動誤操作。


7 建議的“黃金三板斧”腳本

# gstack + top
pid=$(top -b -n1 | awk?'/^ *[0-9]+/ && $9>500 {print $1;exit}')
gstack?$pid?> /tmp/stack.$(date +%s)# 30s CPU 火焰圖
perf record -F 99 -g -p?$pid?-- sleep 30
perf script | flamegraph.pl > /tmp/cpu.svg# ebpf: 連接延遲
/tcpconnectlat-bpfcc -d 10 > /tmp/tcplat.log

結語

  1. 先定位資源瓶頸 → 再定位進程 → 再看線程 / 調用棧 / 系統調用 / 數據結構

  2. 復現-> 采樣-> 驗證,任何優化都要有客觀指標前后對比。

  3. 腳本化、自動化:把上述高頻操作固化到倉庫,避免“憑感覺”排障。


? 一、CPU 性能問題排查

🔍 排查目標:

  • 哪個進程/線程占用 CPU 高?

  • 是系統調用高?還是業務代碼死循環?

  • 多核是否均衡?

🛠? 常用命令:

命令

用途

top

查看實時 CPU 使用率、負載、占用進程

htop

圖形化顯示各核使用,支持排序和篩選

ps aux --sort=-%cpu

靜態查看占用 CPU 的進程

pidstat -u -p <pid> 1

查看某個進程的 CPU 使用詳情

perf top

?/?perf record

查看熱點函數,分析死循環

jstack <pid>

Java 進程線程棧分析,定位死循環線程

🚨 實戰指標:

  • load average?高,但 CPU 利用率低 → IO 等待

  • top?中?%us(用戶態)高 → 業務邏輯問題

  • %sy?高 → 系統調用多,可能頻繁網絡/disk 操作

  • %id(空閑)低 → CPU 打滿


? 二、內存問題排查

🔍 排查目標:

  • 是否 OOM(內存打爆)?

  • 是哪個進程吃內存?

  • 有沒有內存泄漏?

🛠? 常用命令:

命令

用途

free -h

查看整體內存和 swap 使用情況

top

?/?htop

查看哪個進程吃內存

ps aux --sort=-%mem

內存占用排序

vmstat 1si/so

?代表 swap in/out(頻繁表示內存不足)

smem

?/?pmap <pid>

查看進程內存映射

jmap -heap <pid>

?/?jstat -gc <pid>

Java 堆信息

`dmesg

grep -i oom`

🚨 實戰指標:

  • swap 使用過高 → 內存不足

  • OOM Killer?出現 → 殺掉了高占用進程

  • Java 內存泄漏 → 用?MAT?工具分析 dump


? 三、磁盤空間問題排查

🔍 排查目標:

  • 是否磁盤已滿?

  • 是哪個目錄/文件太大?

  • 哪些臨時文件沒有清理?

🛠? 常用命令:

命令

用途

df -h

查看磁盤各分區使用情況

du -sh *

查看當前目錄大小

ncdu

交互式目錄體積分析

find / -type f -size +500M

找出超過 500M 的文件

`lsof

grep deleted`

🚨 實戰指標:

  • /var?或?/tmp?被日志打滿 → 服務異常

  • 日志文件被刪但沒釋放 → 需重啟進程

  • docker/log/core dump?等導致空間異常消耗


? 四、磁盤 IO 問題排查

🔍 排查目標:

  • 是否磁盤讀寫速率限制系統?

  • 哪個進程 IO 頻繁?

  • IO 等待高?

🛠? 常用命令:

命令

用途

iostat -x 1

查看每塊磁盤的利用率?util?和等待?await

iotop

實時查看進程的讀寫 IO 負載

vmstat 1wa

?字段高說明 IO 等待高

dstat -d

磁盤寫入速率

sar -d 1 5

歷史 IO 數據

🚨 實戰指標:

  • iostat?中某磁盤?util?> 80% → 說明該磁盤是瓶頸

  • await?> 50ms → 表示磁盤響應慢

  • Java 日志寫入頻繁也會導致 IO 擁堵


? 五、網絡性能問題排查

🔍 排查目標:

  • 網絡延遲?丟包?帶寬不夠?

  • 服務端口未監聽?

  • 某服務連接滿了?

🛠? 常用命令:

命令

用途

ping

,?traceroute

檢查網絡連通性、路徑問題

curl

,?telnet ip port

檢查端口是否通

netstat -anp

?/?ss -lntp

查看端口監聽狀態

iftop

,?nethogs

查看實時帶寬占用

tcpdump

抓包分析異常

sar -n DEV 1

查看網絡設備流量

`conntrack -L

wc -l`

🚨 實戰指標:

  • ping?延遲高丟包多 → 網絡鏈路問題

  • ss?發現端口未監聽 → 應用未啟動或崩潰

  • established?鏈接數過多 → 服務未釋放連接或未加連接池


? 六、問題排查流程總結圖

系統性能異常│┌──────┴──────┐↓ ? ? ? ? ? ? ↓
CPU高 ? ? ? 內存爆/GC頻↓ ? ? ? ? ? ? ↓
top/ps ? ? ? free/vmstat
jstack ? ? ? jmap/jstat↓ ? ? ? ? ? ? ↓
磁盤滿/慢 ? ?IO 卡頓?↓ ? ? ? ? ? ? ↓
df/du ? ? ?iostat/iotop↓ ? ? ? ? ? ? ↓
網絡問題?↓
ping/tcpdump/ss/curl

遇到系統響應慢問題,我會先看 CPU/內存是否異常(用?top?/?vmstat),然后用?iostat?確認是否是磁盤瓶頸,如果都正常再排查網絡(pingsstcpdump),實際中配合?dmesg/journalctl?查異常日志也很重要。


排查 Linux 系統中的?CPU、內存、磁盤、IO、網絡性能問題?通常遵循「定位瓶頸 → 查找進程 → 分析原因 → 優化方案」這條主線。以下是各個方向的排查思路和常用命令:


🧠 一、CPU 性能問題排查

1.1 初步排查

top
htop ? ? ? ? ? ?# 更直觀(需安裝)
  • 關注?%CPUload average(是否超過核心數)

  • 找出 CPU 占用高的進程(PID)

1.2 深入分析

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
pidstat -u -p <PID> 1 ? ? ??# 查看某進程 CPU 占用變化

1.3 Java 應用場景

jstack <PID> ? ? ? ? ? ? ? ?# 查看線程棧,排查死循環
top -Hp <PID> ? ? ? ? ? ? ??# 找出占用 CPU 高的線程 TID(十進制)
printf?"%x\n"?<TID> ? ? ? ??# 轉為十六進制匹配 jstack 中的 nid

🧠 二、內存問題排查

2.1 查看整體使用

free -h
top / htop
vmstat 1
  • 重點關注?free,?available,?swap?是否頻繁使用

2.2 查找占用高的進程

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
smem -r | head ? ? ? ? ? ? ?# 更準確統計(需安裝)

2.3 檢查 OOM 歷史

dmesg | grep -i?kill

💽 三、磁盤使用排查

3.1 空間使用

df -h ? ? ? ? ? ? ? ? ? ? ? ?# 查看掛載點使用率
du -sh /var/log/* ? ? ? ? ? ?# 查看目錄占用

3.2 清理建議

  • 定期清理大日志文件

  • 使用 logrotate 自動歸檔壓縮日志


🖴 四、磁盤 IO 性能排查

4.1 實時 IO 狀態

iostat -x 1 ? ? ? ? ? ? ? ? ?# 觀察 %util(高表示 IO 飽和)

4.2 觀察讀寫情況

iotop ? ? ? ? ? ? ? ? ? ? ? ?# 查看讀寫最多的進程(需 root)

🌐 五、網絡問題排查

5.1 基本命令

netstat -tnlp ? ? ? ? ? ? ??# 查看端口監聽情況
ss -s ? ? ? ? ? ? ? ? ? ? ??# TCP 狀態統計
ss -ant | grep -i estab ? ??# 當前活躍連接

5.2 查看流量和連接

iftop ? ? ? ? ? ? ? ? ? ? ??# 實時流量(需安裝)
nethogs ? ? ? ? ? ? ? ? ? ??# 進程級別的網絡流量(需安裝)

5.3 ping & traceroute

ping <目標地址> ? ? ? ? ? ??# 查看網絡是否通暢、延遲
traceroute <目標地址> ? ? ??# 路由跳數分析

📌 實戰經驗總結

問題現象

排查思路

CPU 飆高

top → jstack → 定位死循環

內存不足

free → ps → OOM 日志

磁盤滿了

df/du 分析目錄占用

IO 慢卡頓

iostat → iotop 分析進程

網絡斷連/慢

ping/traceroute/iftop


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81479.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IS-IS 中間系統到中間系統

前言&#xff1a; 中間系統到中間系統IS-IS&#xff08;Intermediate System to Intermediate System&#xff09;屬于內部網關協議IGP&#xff08;Interior Gateway Protocol&#xff09;&#xff0c;用于自治系統內部 IS-IS也是一種鏈路狀態協議&#xff0c;使用最短路徑優先…

前端安全:XSS、CSRF 防御與最佳實踐

引言 隨著互聯網應用的普及&#xff0c;前端安全問題日益凸顯。作為開發者&#xff0c;了解并防范常見的安全威脅至關重要。本文將深入探討兩種最常見的前端安全威脅&#xff1a;跨站腳本攻擊&#xff08;XSS&#xff09;和跨站請求偽造&#xff08;CSRF&#xff09;&#xff…

uniapp 彈窗封裝(上、下、左、右、中五個方位)

無腦復制即可&#xff01;&#xff01;&#xff01; <template><view><viewv-if"mask"class"tui-drawer-mask":class"{ tui-drawer-mask_show: visible }":style"{ zIndex: maskZIndex }"tap"handleMaskClick&qu…

Axure制作可視化大屏動態滾動列表教程

在可視化大屏設計中&#xff0c;動態滾動列表是一種常見且實用的展示方式&#xff0c;能夠有效地展示大量信息。本文將詳細介紹如何使用Axure制作一個動態滾動的列表展示模塊。 一、準備工作 打開Axure軟件&#xff1a;確保你已經安裝并打開了Axure RP軟件。創建新項目&#x…

零基礎玩轉Apache Superset可視化部署

根據官方Quick Start Guide&#xff0c;你可以按照以下步驟進行部署&#xff1a; 1. 確認環境2. 獲取代碼3. 獲取官方最新代碼4. 啟動服務5. 訪問Superset Web界面6. 接入數據源 前提條件&#xff1a; dockerdocker compose 1. 確認環境 安裝Docker和Docker Compose 確保你…

服務器數據恢復—XFS文件系統分區消失的數據恢復案例

服務器數據恢復環境&故障&#xff1a; 服務器上有一組由raid卡組建的raid5磁盤陣列。上層安裝linux才做系統&#xff0c;采用XFS文件系統&#xff0c;劃分了3個分區。 管理員將服務器的操作系統重裝后&#xff0c;發現服務器上的分區發生了改變&#xff1a;一個分區消失&am…

2025/5/18

繼續研究一下大佬的RAG項目。開始我的碎碎念。 RAG可以分成兩部分&#xff1a;一個是問答&#xff0c;一個是數據處理。 問答是人提問&#xff0c;然后查數據庫&#xff0c;把查的東西用大模型組織成人話&#xff0c;回答人的提問。 數據處理是把當下知識庫里的東西&#xf…

在 Vue 中插入 B 站視頻

前言 在 Vue 項目中&#xff0c;有時我們需要嵌入 B 站視頻來豐富頁面內容&#xff0c;為用戶提供更直觀的信息展示。本文將詳細介紹在 Vue 中插入 B 站視頻的多種方法。 使用<iframe>標簽直接嵌入,<iframe>標簽是一種簡單直接的方式&#xff0c;可將 B 站視頻嵌…

OpenCv高階(八)——攝像頭調用、攝像頭OCR

文章目錄 前言一、攝像頭調用通用方法1、導入必要的庫2、創建攝像頭接口 二、攝像頭OCR1.引入庫2、定義函數&#xff08;1&#xff09;定義顯示opencv顯示函數&#xff08;2&#xff09;保持寬高比的縮放函數&#xff08;3&#xff09;坐標點排序函數&#xff08;4&#xff09;…

特斯拉虛擬電廠:能源互聯網時代的分布式革命

在雙碳目標與能源轉型的雙重驅動下&#xff0c;特斯拉虛擬電廠&#xff08;Virtual Power Plant, VPP&#xff09;通過數字孿生技術與能源系統的深度融合&#xff0c;重構了傳統電力系統的運行范式。本文從系統架構、工程實踐、技術挑戰三個維度&#xff0c;深度解析這一顛覆性…

【漫話機器學習系列】258.拐點(Inflection Point)

拐點&#xff08;Inflection Point&#xff09;詳解&#xff1a;定義、原理與應用 在數學分析與數據建模中&#xff0c;“拐點&#xff08;Inflection Point&#xff09;”是一個非常重要的概念。今天這篇文章&#xff0c;我們將結合圖示&#xff0c;深入理解拐點的定義、數學…

語音識別——聲紋識別

通過將說話人的聲音與數據庫中的記錄聲音進行比對&#xff0c;判斷說話人是否為數據庫白名單中的同一人&#xff0c;從而完成語音驗證。目前&#xff0c;3D-Speaker 聲紋驗證的效果較為出色。 3D-Speaker 是一個開源工具包&#xff0c;可用于單模態和多模態的說話人驗證、說話…

DeepSeek 賦能軍事:重塑現代戰爭形態的科技密碼

目錄 一、引言&#xff1a;AI 浪潮下的軍事變革與 DeepSeek 崛起二、DeepSeek 技術原理與特性剖析2.1 核心技術架構2.2 獨特優勢 三、DeepSeek 在軍事偵察中的應用3.1 海量數據快速處理3.2 精準目標識別追蹤3.3 預測潛在威脅 四、DeepSeek 在軍事指揮決策中的應用4.1 戰場態勢實…

uWSGI是什么?

uWSGI 是一個功能強大的應用服務器&#xff0c;專為部署高性能 Web 應用設計&#xff0c;尤其適合 Python 生態系統。以下是對其核心介紹及適用場景的總結&#xff1a; uWSGI 是什么&#xff1f; uWSGI 是一個實現了 WSGI&#xff08;Web Server Gateway Interface&#xff09…

Digi XBee XR 系列介紹

Digi 延續了 20 多年來亞 GHz 射頻模塊的傳統&#xff0c;推出了 Digi XBee XR 系列遠距離模塊&#xff0c;包括 Digi XBee XR 900 - 已通過多個地區的預先認證 - 以及 Digi XBee XR 868 - 已通過歐洲地區應用的預先認證。 這些先進的射頻模塊專為遠距離抗干擾無線通信而設計。…

RabbitMq C++客戶端的使用

介紹 RabbitMQ 是一個開源的消息代理和隊列服務器&#xff0c;用于在分布式系統之間傳遞消息。它實現了高級消息隊列協議(AMQP)&#xff0c;同時也支持其他協議如 STOMP、MQTT 等。 核心概念 Producer(生產者): 發送消息的應用程序 Consumer(消費者): 接收消息的應用程序 Q…

HTML 中的 input 標簽詳解

HTML 中的 input 標簽詳解 一、基礎概念 1. 定義與作用 HTML 中的 <input> 標簽是表單元素的核心組件&#xff0c;用于創建各種用戶輸入字段。作為一個空標簽&#xff08;沒有閉合標簽&#xff09;&#xff0c;它通過 type 屬性來決定呈現何種輸入控件&#xff0c;是實…

基于Piecewise Jerk Speed Optimizer的速度規劃算法(附ROS C++/Python仿真)

目錄 1 時空解耦運動規劃2 PJSO速度規劃原理2.1 優化變量2.2 代價函數2.3 約束條件2.4 二次規劃形式 3 算法仿真3.1 ROS C仿真3.2 Python仿真 1 時空解耦運動規劃 在自主移動系統的運動規劃體系中&#xff0c;時空解耦的遞進式架構因其高效性與工程可實現性被廣泛采用。這一架…

2025云上人工智能安全發展研究

隨著人工智能&#xff08;AI&#xff09;技術與云計算的深度融合&#xff0c;云上AI應用場景不斷擴展&#xff0c;但安全挑戰也日益復雜。結合2025年的技術演進與行業實踐&#xff0c;云上AI安全發展呈現以下關鍵趨勢與應對策略&#xff1a; 一、云上AI安全的主要挑戰 數據泄露…

MCU裸機程序如何移植到RTOS?

目錄 1、裸機編程 2、實時操作系統 3、移植裸機程序到RTOS的步驟 步驟1&#xff1a;分析裸機代碼 步驟2&#xff1a;選擇并設置RTOS環境 步驟3&#xff1a;設計任務架構 步驟4&#xff1a;實現任務間通信 步驟5&#xff1a;處理硬件交互 步驟6&#xff1a;測試和調試 …