分布式微服务系统架构第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. profiletcpconnlatbiolatency).

  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
  • 重点关注 freeavailableswap 是否频繁使用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;测试和调试 …