定位与排查路径
常见瓶颈与对策
| 瓶颈维度 | 典型症状 | 快速定位 | 优化要点 |
|---|---|---|---|
| CPU | 持续接近100%,响应变慢 | top/pidstat找进程;多次kill -3取thread dump,将LWP/线程ID转16进制nid对照堆栈 | 定位热点方法/锁;优化算法与SQL;适度并行;选择合适的GC策略(如G1) |
| 内存 | Full GC频繁、Old区涨、OOM | -verbose:gc与GC日志曲线;必要时HeapDumpOnOutOfMemoryError | 合理设置**-Xms/-Xmx**(建议等值);JDK8+设置**-XX:MaxMetaspaceSize**;修复泄漏(JDBC/缓存/会话) |
| 线程与队列 | 队列积压、超时增多 | 管理控制台看执行线程/队列长度;thread dump看阻塞与等待 | 依据CPU/IO调整线程池;减少锁竞争;优化慢请求与下游依赖 |
| JDBC/数据库 | 连接获取超时、吞吐上不去 | 数据源监控(活跃/等待/泄漏);开启profile connection leak | 合理初始/最大/递增与超时/验证;避免连接泄漏;优化SQL与索引 |
| 网络 | 吞吐低、时延高、丢包 | sar/ifstat/ping/抓包 | 开启网卡多队列、调优TCP窗口/队列;必要时用Nginx/Apache做反向代理与静态资源卸载 |
| 存储/文件系统 | I/O等待高、日志写入慢 | iostat -x、vmstat;检查挂载与磁盘健康 | 使用XFS/ext4并合理挂载;调vm.dirty_ratio/background_ratio;减少同步日志级别与频率 |
| 随机数/熵 | 重启后控制台登录卡5–10分钟 | 观察类加载与阻塞点(如SecureRandom) | 启动参数加入:-Djava.security.egd=file:/dev/./urandom |
| 应用代码/第三方 | 某接口持续慢、热点方法固定 | JProfiler/OptimizeIt采样;thread dump/火焰图 | 减少字符串/XSLT等重操作;缓存结果;修复HTTP客户端连接未释放等资源管理问题 |
关键配置建议
监控与诊断命令清单
压测与回放流程