在大量并发连接下判断ECS是否存在性能隐患,需要从多个维度进行系统性监控和分析。以下是详细的排查步骤和关键指标:
一、核心性能指标监控
1. CPU使用率
- 关注点:平均使用率 & 峰值持续时长
- 隐患阈值:
- 持续 > 70% 需关注
- 持续 > 90% 或频繁打满100%为严重隐患
- 排查工具:
top/htop:查看进程级CPU占用mpstat -P ALL:分析各核心负载均衡pidstat -u 1:追踪进程历史CPU使用
2. 内存使用
- 关键指标:
- 可用内存:
free -h关注available字段 - Swap使用:频繁Swap说明物理内存不足
- OOM事件:
dmesg | grep -i oom
- 可用内存:
- 隐患特征:
- 可用内存持续低于总内存20%
- Swap使用率持续增长
- 内存泄漏(进程内存占用随时间持续上升)
3. 磁盘I/O
- 监控命令:
iostat -x 1 # 查看await(响应时间)、%util(利用率) iotop # 进程级I/O监控 - 隐患信号:
await> 20ms(机械盘)或 > 5ms(SSD)%util持续 > 80%- 高IOPS场景下吞吐量达到磁盘上限
4. 网络瓶颈
- 关键检查:
sar -n DEV 1 # 网络吞吐、包量、错误率 ss -s # 连接数统计 netstat -s # 协议级错误统计 - 隐患点:
- 带宽打满:出/入带宽持续接近实例规格上限
- 连接数限制:
ss -s查看TCP连接数是否接近ulimit -n限制- 检查内核参数:
net.core.somaxconn、net.ipv4.tcp_max_syn_backlog - 丢包/错误:
ifconfig中errors、dropped计数增长
二、并发连接专项检查
1. 连接数分析
# 查看各状态连接数
ss -ant | awk 'NR>1 {++S[$1]} END {for(a in S) print a, S[a]}'
# 查看进程持有的连接数
ss -tp | awk '{print $6}' | cut -d: -f1 | sort | uniq -c | sort -rn
- 重点关注:
TIME_WAIT堆积:可能耗尽端口资源CLOSE_WAIT过多:应用未正常关闭连接SYN_RECV异常:可能遭受SYN Flood攻击
2. 端口资源监控
# 检查已用本地端口范围
cat /proc/sys/net/ipv4/ip_local_port_range
ss -ant | grep -c ESTAB
- 隐患:已用端口数接近
ip_local_port_range范围上限
3. 文件描述符限制
# 系统级限制
cat /proc/sys/fs/file-max
# 进程级限制
ps aux | grep <进程名> | awk '{print $2}' | xargs -I {} cat /proc/{}/limits | grep "open files"
- 处理:若接近限制,需调整
/etc/security/limits.conf和内核参数
三、应用层性能分析
1. 应用服务监控
- Web服务器(Nginx/Apache):
- 活跃连接数 vs 工作进程数
- 请求排队数(如Nginx的
Active connections: waiting)
- 数据库连接池:
- 活跃连接数 vs 连接池上限
- 连接等待超时日志
2. 响应时间分析
- 工具:
- 应用日志分析响应延迟
curl -o /dev/null -s -w "%{time_total}n"测试接口耗时
- 关联指标:高并发时响应时间是否线性增长
3. 线程/协程状态
- Java应用:
jstack <pid>查看线程阻塞 - Go应用:
pprof分析协程堆积 - 通用:
pstree -p <pid>查看进程树深度
四、云平台侧检查
1. ECS基础监控(阿里云为例)
- 必备看板:
- CPU使用率(注意Steal Time:虚拟化层抢占)
- 内网带宽使用率(包括PPS包量)
- 磁盘IOPS/吞吐量(与实例规格对比)
- 关键动作:
- 检查是否开启突发性能实例的积分耗尽
- 确认实例规格是否匹配业务类型(计算型/内存型/通用型)
2. 安全组/网络ACL限制
- 检查项:
- 安全组规则数量(过多影响性能)
- 连接跟踪(conntrack)表是否打满
cat /proc/sys/net/netfilter/nf_conntrack_count cat /proc/sys/net/netfilter/nf_conntrack_max
3. 资源竞争排查
- 多租户场景:同一物理机其他实例的负载干扰
- 解决方案:使用独享型实例或调整部署策略
五、压力测试与基线对比
1. 建立性能基线
- 在正常负载时记录关键指标作为基准
- 使用
sysbench、wrk、ab等工具进行压力测试 - 观察指标变化曲线,确定拐点
2. 渐进式压力测试
# 示例:逐步增加并发数
for conn in 100 500 1000 2000; do
wrk -t4 -c$conn -d30s http://localhost:8080/api/test
# 同步监控系统指标
done
六、常见性能隐患模式
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| CPU高但吞吐不增 | 锁竞争/频繁上下文切换 | 检查 vmstat 中 cs(上下文切换)值 |
| 响应时间波动大 | 垃圾回收(GC)停顿 | JVM GC日志分析 |
| 连接随机失败 | 端口耗尽/连接池满 | ss -s 查看 TCP 状态分布 |
| 磁盘延迟高但使用率低 | RAID卡策略/磁盘队列设置 | 检查 blockdev --getra、调度器设置 |
七、自动化预警建议
-
设置关键告警:
- CPU使用率 > 85% 持续5分钟
- 内存使用率 > 90%
- 磁盘空间使用率 > 85%
- 网络丢包率 > 1%
-
使用APM工具:
- 阿里云ARMS、SkyWalking等追踪链路性能
- 业务指标与系统指标关联分析
-
日志集中分析:
- 收集系统日志(
/var/log/messages) - 应用错误日志(连接超时、拒绝连接等)
- 收集系统日志(
总结排查流程
graph TD
A[并发性能下降] --> B{监控四层指标};
B --> C[CPU/内存/磁盘/网络];
C --> D[发现异常指标];
D --> E{定位根源};
E --> F[应用层问题];
E --> G[系统层问题];
E --> H[云平台限制];
F --> I[调整应用配置/代码优化];
G --> J[调整内核参数/扩容];
H --> K[升级实例规格/调整网络配置];
通过以上系统化排查,可以准确识别性能瓶颈所在。建议在业务低峰期进行基准测试并建立监控基线,这样当并发上升时能快速识别异常偏离。对于生产环境,务必在变更前做好预案和回滚准备。
CLOUD技术笔记