分布式微服务系统架构第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
:进程 IDCOMMAND
:进程名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 # 网卡收发速率/丢包
判断优先级:
load≈CPU 核数且 %sy/%wa 高 → 先查 CPU 或磁盘
free 可用内存低 + swpd 增长 → 查内存泄漏 / OOM
iostat %util 常年 >80% 或 await > 50 ms → 查磁盘
网络丢包 / re-trans 增长 → 查网络
2 CPU 排查
步骤 | 命令 | 说明 |
---|---|---|
① 进程定位 | top -H / | 找到高 CPU PID 或线程 (TID) |
② 线程源码归位 | ps -Lp <PID> | 将 TID ↔ 线程名 |
③ 调用栈抓取 | perf top -p <PID> 或 | 取热点函数 |
④ Java 专用 | jstack -l <PID> / async-profiler | 对应线程状态、死循环、GC 卡顿 |
⑤ 内核抢占 | mpstat -P ALL 1 、 | context-switch、cpu steal 判断虚机噪音 |
3 内存排查
步骤 | 命令 | 说明 |
---|---|---|
① 누수初判 | free -m 、 | 缓存/缓存回收、swap in/out |
② 进程级 | top -o %MEM 、 | 找占用最大的进程 |
③ 映射明细 | pmap -x <PID> / | 堆 / 共享库 / 匿名页 |
④ Java 堆 | jmap -heap <PID> 、 | 老年代溢出、类加载飙升 |
⑤ 堆 Dump | jmap -dump:live,format=b,file=heap.hprof <PID> ,MAT / VisualVM 分析 | 根因定位(集合持有 / 缓存未清) |
⑥ 内核缓存 | slabtop 、 | 罕见但要排除 driver 泄漏 |
4 磁盘 & IO 排查
步骤 | 命令 | 说明 |
---|---|---|
① 负载概览 | iostat -xz 1 | %util 、 |
② 进程级 | pidstat -d 1 、 | 哪个进程读写大 |
③ 磁盘延迟 | blktrace /dev/sdX + | 队列/设备层延迟 |
④ 文件定位 | lsof +D /path 或 | 频繁访问文件路径 |
⑤ FS 级别 | df -ih 、 | inode 耗尽、磁盘坏块 |
⑥ 调优 | deadline→mq-deadline 、 | IO 调度、RAID/SSD 队列深度 |
5 网络排查
步骤 | 命令 | 说明 |
---|---|---|
① 速率 / 丢包 | sar -n DEV 1 、 | TX/RX errors, drops |
② 连接数 | ss -s 、 | SYN flood? FD 耗尽? |
③ 会话详情 | ss -ntp sport = :8080 | 哪些远端连接最多 |
④ RTT / 路由 | mtr <ip> 、 | 跨机房抖动排除 |
⑤ 微包/重传 | tcpdump -i eth0 -w cap.pcap + Wireshark | Window size、Dup ACK |
⑥ Socket 队列 | `netstat -anp | grep |
6 跨资源综合分析
时间轴对齐:Grafana/Prometheus 将 CPU、iowait、GC、p99 延迟放在同一 Dashboard。
内核 ebpf:用 bcc / bpftrace 即时追踪 (e.g.
profile
,tcpconnlat
,biolatency
).压测复现:ab / wrk / vegeta 重放流量,配合
perf/kernexec
抓热点。容器视角:
docker stats
、cgroup/sys/fs/cgroup/*/usage_usec
、K8s Metrics-Server。自动化:把常用采样脚本写成
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
结语
先定位资源瓶颈 → 再定位进程 → 再看线程 / 调用栈 / 系统调用 / 数据结构。
复现-> 采样-> 验证,任何优化都要有客观指标前后对比。
脚本化、自动化:把上述高频操作固化到仓库,避免“凭感觉”排障。
✅ 一、CPU 性能问题排查
🔍 排查目标:
哪个进程/线程占用 CPU 高?
是系统调用高?还是业务代码死循环?
多核是否均衡?
🛠️ 常用命令:
命令 | 用途 |
---|---|
top | 查看实时 CPU 使用率、负载、占用进程 |
htop | 图形化显示各核使用,支持排序和筛选 |
ps aux --sort=-%cpu | 静态查看占用 CPU 的进程 |
pidstat -u -p <pid> 1 | 查看某个进程的 CPU 使用详情 |
perf top / | 查看热点函数,分析死循环 |
jstack <pid> | Java 进程线程栈分析,定位死循环线程 |
🚨 实战指标:
load average
高,但 CPU 利用率低 → IO 等待top
中%us
(用户态)高 → 业务逻辑问题%sy
高 → 系统调用多,可能频繁网络/disk 操作%id
(空闲)低 → CPU 打满
✅ 二、内存问题排查
🔍 排查目标:
是否 OOM(内存打爆)?
是哪个进程吃内存?
有没有内存泄漏?
🛠️ 常用命令:
命令 | 用途 |
---|---|
free -h | 查看整体内存和 swap 使用情况 |
top / | 查看哪个进程吃内存 |
ps aux --sort=-%mem | 内存占用排序 |
vmstat 1 | si/so 代表 swap in/out(频繁表示内存不足) |
smem / | 查看进程内存映射 |
jmap -heap <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 | 查看每块磁盘的利用率 |
iotop | 实时查看进程的读写 IO 负载 |
vmstat 1 | wa 字段高说明 IO 等待高 |
dstat -d | 磁盘写入速率 |
sar -d 1 5 | 历史 IO 数据 |
🚨 实战指标:
iostat
中某磁盘util
> 80% → 说明该磁盘是瓶颈await
> 50ms → 表示磁盘响应慢Java 日志写入频繁也会导致 IO 拥堵
✅ 五、网络性能问题排查
🔍 排查目标:
网络延迟?丢包?带宽不够?
服务端口未监听?
某服务连接满了?
🛠️ 常用命令:
命令 | 用途 |
---|---|
ping , | 检查网络连通性、路径问题 |
curl , | 检查端口是否通 |
netstat -anp / | 查看端口监听状态 |
iftop , | 查看实时带宽占用 |
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
确认是否是磁盘瓶颈,如果都正常再排查网络(ping
、ss
、tcpdump
),实际中配合dmesg
/journalctl
查异常日志也很重要。
排查 Linux 系统中的 CPU、内存、磁盘、IO、网络性能问题 通常遵循「定位瓶颈 → 查找进程 → 分析原因 → 优化方案」这条主线。以下是各个方向的排查思路和常用命令:
🧠 一、CPU 性能问题排查
1.1 初步排查
top
htop # 更直观(需安装)
关注
%CPU
,load 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 |
相关文章:
分布式微服务系统架构第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 命令&…...
【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发
客户端验证HTTPS网站证书是否由受信任的根证书颁发机构(CA)签发,是一个多步骤的过程,涉及证书链验证、信任锚(Trust Anchor)检查、域名匹配和吊销状态验证等。以下是详细的验证流程: 1. 证书链的…...

SpringBoot基础项目搭建
资料链接:https://download.csdn.net/download/ly1h1/90855288?spm1001.2014.3001.5501 1.准备工作 1.1 安装IntelliJ IDEA 2023.3.4 (Ultimate Edition) 1.2 采用apache-maven-3.6.3 1.2.1 maven配置文件设置 1.2.2 IDEA配置maven 1.3 JDK采用17版本 2.手动创建…...
Rust 学习笔记:关于 HashMap 的练习题
Rust 学习笔记:关于 HashMap 的练习题 Rust 学习笔记:关于 HashMap 的练习题以下代码能否通过编译?若能,输出是?以下代码能否通过编译?若能,输出是? Rust 学习笔记:关于 …...
C语言-8.数组
8.1数组 8.1.1初试数组 如何写一个程序计算用户输入的数字的平均数? #include<stdio.h> int main() {int digit;//输入要求平均数的数字double sum=0;//记录输入数字的和int count=0;//记录输入数字的个数printf("请输入一组数字,用来求平均数,以-1结束\n&quo…...
Kotlin Android单元测试MockK指南
目录 MockK 简介环境配置基础用法高级用法Android 特有场景最佳实践 1. MockK 简介 MockK 是一个专为 Kotlin 设计的 Mocking 框架,支持协程、扩展函数、对象声明(object)等 Kotlin 特性。相比 Mockito,它提供更自然的 Kotlin A…...
C# lock
在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块。这是一种简单的同步机制,用来防止多个线程同时访问共享资源或执行需要独占访问的代码段(临界区),从而…...
《算法导论(第4版)》阅读笔记:p83-p85
《算法导论(第4版)》学习第 18 天,p83-p85 总结,总计 3 页。 一、技术总结 1. Strassen algorithm(施特拉森算法) 2.矩阵 (1)矩阵表示法 If we wish to refer to matrices without specifically writing out all their entries, we will use upperc…...
Go 后端中双 token 的实现模板
下面是一个典型的 Go 后端双 Token 认证机制 实现模板,使用 Gin 框架 JWT Redis,结构清晰、可拓展,适合实战开发。 项目结构建议 /utils├── jwt.go // Access & Refresh token 的生成和解析├── claims.go // 从请求…...

【拥抱AI】Deer-Flow字节跳动开源的多智能体深度研究框架
最近发现一款可以对标甚至可能超越GPT-Researcher的AI深度研究应用,Deer-Flow(Deep Exploration and Efficient Research Flow)作为字节跳动近期开源的重量级项目,正以其模块化、灵活性和人机协同能力引发广泛关注。该项目基于 La…...
第六天——贪心算法——字符串分隔
1. 题目 给定一个字符串 s,我们需要将其划分为尽可能多的部分,使得同一字母最多出现在一个部分中。 例如:字符串 "ababcc" 可以划分为 ["abab", "cc"],但要避免 ["aba", "bcc&quo…...
Python 条件语句详解
条件语句是编程中用于控制程序流程的基本结构,Python 提供了几种条件语句来实现不同的逻辑判断。 1. if 语句 最基本的条件语句形式: if 条件:# 条件为真时执行的代码块示例: age 18 if age > 18:print("你已经成年了")2. …...

前端获取用户的公网 IP 地址
可以使用免费的免费的公共服务网站 一:https://www.ipify.org/ 获取 JSON 格式的 IP 地址 // 旧地址不好使 // https://api.ipify.org/?formatjson // 新地址 https://api64.ipify.org/?formatjson 二:https://ipinfo.io/ https://ipinfo.io/ 三&a…...
在Maven中替换文件内容的插件和方法
在Maven中替换文件内容的插件和方法 Maven提供了几种方式来替换文件内容,以下是常用的插件和方法: 1. maven-replacer-plugin (推荐) 这是专门用于文件内容替换的插件,功能强大且灵活。 基本配置 <plugin><groupId>com.goog…...
符合Python风格的对象(再谈向量类)
再谈向量类 为了说明用于生成对象表示形式的众多方法,我们将使用一个 Vector2d 类,它与第 1 章中的类似。这一节和接下来的几节会不断实 现这个类。我们期望 Vector2d 实例具有的基本行为如示例 9-1 所示。 示例 9-1 Vector2d 实例有多种表示形式 &g…...

云电竞服务器 工作原理
云电竞服务器工作原理详解 一、核心架构原理 虚拟化资源池 通过 KVM/VMware 等虚拟化技术将物理服务器(含NVIDIA GPU集群)抽象为可动态分配的算力资源池,每个用户独享独立虚拟机实例,实现硬件资源的按需分配与隔离运行。 …...

【数据结构】线性表--队列
【数据结构】线性表--队列 一.什么是队列二.队列的实现1.队列结构定义:2.队列初始化函数:3.队列销毁函数:4.入队列函数(尾插):5.出队列函数(头删):6.取队头元素ÿ…...

[Vue3]语法变动
Vue3的语法相对比Vue2有不少改变,这篇讲一下基础语法在Vue3里的形式。 创建Vue对象 在脚手架项目中,index.html等资源不再编写代码,只作为一个容器。所有的页面代码都在.vue相关文件中进行编写,由main.js引入各个.vue文件渲染出页…...

Ubuntu服务器开启SNMP服务 监控系统配置指南 -优雅草星云智控简易化操作
Ubuntu服务器开启SNMP服务 & 监控系统配置指南 -优雅草星云智控简易化操作 一、Ubuntu服务器开启SNMP服务 步骤1:安装SNMP服务 sudo apt update sudo apt install snmp snmpd snmp-mibs-downloader -y 步骤2:配置SNMP(编辑配置文件&am…...

linux本地部署ollama+deepseek过程
1.Tags ollama/ollama GitHub 选择一个版本下载,我下的是0.5.12 2.tar解压该文件 3.尝试启动ollama ollama serve 4.查看ollama的版本 ollama -v 5.创建一个系统用户 ollama,不允许登录 shell,拥有一个主目录,并且用…...

从零开始实现大语言模型(十五):并行计算与分布式机器学习
1. 前言 并行计算与分布式机器学习是一种使用多机多卡加速大规模深度神经网络训练过程,以减少训练时间的方法。在工业界的训练大语言模型实践中,通常会使用并行计算与分布式机器学习方法来减少训练大语言模型所需的钟表时间。 本文介绍PyTorch中的一种…...

OpenCV进阶操作:指纹验证、识别
文章目录 前言一、指纹验证1、什么是指纹验证2、流程步骤 二、使用步骤(案例)三、指纹识别(案例)1、这是我们要识别的指纹库2、这是待识别的指纹图3、代码4、结果 总结 前言 指纹识别作为生物识别领域的核心技术之一,…...

网络安全-等级保护(等保) 2-5 GB/T 25070—2019《信息安全技术 网络安全等级保护安全设计技术要求》-2019-05-10发布【现行】
################################################################################ GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》包含安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、安…...

3D生成新突破:阶跃星辰Step1X-3D开源,可控性大幅提升
Step1X-3D 是由 StepFun 联合 LightIllusions 推出的新一代 高精度、高可控性 3D资产生成框架。基于严格的 数据清洗与标准化流程,我们从 500万 3D资产 中筛选出 200万高质量数据,构建了 标准化的几何与纹理属性数据集,为3D生成提供更可靠的训…...

MySQL数据类型之VARCHAR和CHAR使用详解
在设计数据库字段时,字符串类型算是最常见的数据类型之一了,这篇文章带大家深入探讨一下MySQL数据库中VARCHAR和CHAR数据类型的基本特性,以及它们之间的区别。 VARCHAR类型 VARCHAR(Variable Character,可变长度字符…...
数字人 LAM 部署笔记
目录 windos踩坑 GitHub - aigc3d/LAM: [SIGGRAPH 2025] LAM: Large Avatar Model for One-shot Animatable Gaussian Head windos踩坑 nvidia-smi环境 cuda 11.8conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit conda create --name cuda11.8 -y pyth…...

《Docker 入门与进阶:架构剖析、隔离原理及安装实操》
1 docker 简介 1.1 Docker 的优点 Docker 是一款开放平台,用于应用程序的开发、交付与运行,能将应用和基础架构分离,实现软件快速交付 ,还能以统一方式管理应用和基础架构,缩短代码从编写到上线的时间。其核心优势如…...

基于Akamai云计算平台的OTT媒体点播转码解决方案
点播视频(VOD)流媒体服务依赖于视频流的转码来高效分发内容。在转码工作流程中,视频被转换为适合观看设备、网络条件和性能限制的格式。视频转码是计算密集型过程,因此最大化可用硬件上可转码的视频流数量是首要考虑因素。不同基础…...

【MySQL】02.数据库基础
1. 数据库的引入 之前存储数据用文件就可以了,为什么还要弄个数据库? 文件存储存在安全性问题,文件不利于数据查询和管理,文件不利于存储海量数据,文件在程序中控制不方便。而为了解决上述问题,专家们设计出更加利于…...

选错方向太致命,华为HCIE数通和云计算到底怎么选?
现在搞HCIE的兄弟越来越多了,但“数通和云计算,到底考哪个?”这问题,依旧让不少人头疼。 一个是华为认证的老牌王牌专业——HCIE数通,稳、系统、岗位多; 一个是新趋势方向,贴合云原生、数字化…...