程序员必备的十大技能(进阶版)之性能调优与故障排查(三)

简介: 教程来源 https://bgnno.cn/ 本节系统讲解网络与数据库性能问题排查:涵盖TCP连接状态分析、TIME_WAIT优化、延迟诊断、连接池配置;以及慢查询定位、索引失效识别、事务锁监控和连接池调优,助力高效定位并解决生产环境常见瓶颈。

五、网络问题排查

5.1 网络连接问题

# 1. 查看网络连接状态
netstat -antp | awk '{print $6}' | sort | uniq -c

# 状态分布:
# ESTABLISHED: 正常连接
# TIME_WAIT: 主动关闭后等待(过多说明频繁创建连接)
# CLOSE_WAIT: 被动关闭后未调用close(应用层bug)
# SYN_RECV: 半连接队列满

# 2. 查看TCP连接详情
ss -tni

# 3. 抓包分析
tcpdump -i eth0 -s 0 -w capture.pcap -c 1000

# 4. 分析抓包文件
tcpdump -r capture.pcap -nn
# 或使用Wireshark图形化分析

# 5. 检查端口监听
netstat -tlnp

5.2 TIME_WAIT过多问题

# 查看TIME_WAIT数量
netstat -ant | grep TIME_WAIT | wc -l

# 解决方案:
# 1. 开启端口复用
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
# 2. 减小FIN_WAIT2超时时间
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
# 3. 使用连接池复用连接
# 4. 调整客户端为短连接时使用长连接

5.3 网络延迟排查

# 1. ping测试基础延迟
ping -c 10 target-host

# 2. traceroute查看路由跳数
traceroute target-host

# 3. mtr综合测试(实时显示丢包和延迟)
mtr target-host

# 4. 端到端延迟测试
iperf3 -c server -p 5201

# 5. 应用层延迟分析(客户端curl)
curl -w "@curl-format.txt" -o /dev/null -s https://api.example.com

# curl-format.txt内容:
# time_namelookup:  %{time_namelookup}\n
# time_connect:     %{time_connect}\n
# time_appconnect:  %{time_appconnect}\n
# time_pretransfer: %{time_pretransfer}\n
# time_redirect:    %{time_redirect}\n
# time_starttransfer: %{time_starttransfer}\n
# ----------\n
# time_total:       %{time_total}\n

5.4 连接池问题

// HTTP连接池配置示例(Apache HttpClient)
public class HttpClientPoolConfig {

    public CloseableHttpClient createOptimizedClient() {
        // 连接池配置
        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        cm.setMaxTotal(200);           // 最大连接数
        cm.setDefaultMaxPerRoute(50);  // 每个路由最大连接数

        // 请求配置
        RequestConfig config = RequestConfig.custom()
            .setConnectTimeout(3000)    // 连接超时
            .setSocketTimeout(5000)     // Socket超时
            .setConnectionRequestTimeout(1000) // 从连接池获取连接超时
            .build();

        // 空闲连接清理
        cm.setValidateAfterInactivity(1000);

        return HttpClientBuilder.create()
            .setConnectionManager(cm)
            .setDefaultRequestConfig(config)
            .setKeepAliveStrategy((response, context) -> 30000) // 30秒保活
            .evictIdleConnections(30, TimeUnit.SECONDS)
            .build();
    }
}

// 连接池问题排查:
// 1. 查看连接池监控指标(活跃连接数、空闲连接数)
// 2. 检查是否有连接泄漏(不归还连接)
// 3. 检查连接池大小是否合理

六、数据库性能优化

6.1 慢查询排查

-- 开启慢查询日志
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
SET GLOBAL log_queries_not_using_indexes = ON;

-- 查看慢查询日志位置
SHOW VARIABLES LIKE 'slow_query_log_file';

-- 查看当前执行中的SQL
SHOW PROCESSLIST;
-- 或更详细的信息
SELECT * FROM information_schema.PROCESSLIST WHERE COMMAND != 'Sleep';

-- 查看锁等待
SELECT * FROM information_schema.INNODB_TRX;
SELECT * FROM information_schema.INNODB_LOCKS;
SELECT * FROM information_schema.INNODB_LOCK_WAITS;

6.2 索引失效分析

-- 使用EXPLAIN分析执行计划
EXPLAIN FORMAT=JSON
SELECT o.*, u.name
FROM orders o
JOIN users u ON o.user_id = u.id
WHERE o.create_time > '2024-01-01'
  AND o.status = 1
ORDER BY o.id DESC
LIMIT 100;

-- 关键指标解读:
-- type: ALL(全表扫描) > index(索引全扫) > range(范围) > ref(引用) > eq_ref > const > system
-- Extra: Using filesort(需优化) / Using temporary(需优化) / Using index(覆盖索引)

-- 索引使用情况统计
SELECT 
    index_name,
    cardinality,
    (cardinality / (SELECT COUNT(*) FROM orders)) * 100 AS selectivity
FROM information_schema.STATISTICS
WHERE table_name = 'orders';

6.3 事务与锁问题

-- 查看当前事务
SELECT 
    trx_id,
    trx_state,
    trx_started,
    TIMESTAMPDIFF(SECOND, trx_started, NOW()) as duration_sec,
    trx_mysql_thread_id,
    trx_query
FROM information_schema.INNODB_TRX
ORDER BY duration_sec DESC;

-- 查看未提交的事务(可能导致死锁)
SELECT * FROM information_schema.INNODB_TRX WHERE trx_state = 'RUNNING';

-- 查看死锁信息
SHOW ENGINE INNODB STATUS\G
-- 重点关注 "LATEST DETECTED DEADLOCK" 部分

6.4 数据库连接池调优

HikariCP配置优化:
  minimumIdle: 10
  maximumPoolSize: 20
  connectionTimeout: 30000
  idleTimeout: 600000
  maxLifetime: 1800000
  leakDetectionThreshold: 60000  # 连接泄漏检测(生产环境开启)

  # MySQL驱动优化
  dataSourceProperties:
    cachePrepStmts: true
    prepStmtCacheSize: 250
    prepStmtCacheSqlLimit: 2048
    useServerPrepStmts: true
    rewriteBatchedStatements: true

# 连接泄漏检测日志:
# "Connection leak detection: connection returned to pool after 65 seconds"

来源:
https://detxg.cn/

相关文章
|
2月前
|
运维 Java 测试技术
程序员必备的十大技能(进阶版)之性能调优与故障排查(四)
教程来源 https://aescc.cn/ 本节系统介绍Java应用性能分析与稳定性保障核心实践:涵盖Arthas诊断、火焰图性能剖析、全链路压测方法论及JMeter实战、混沌工程故障注入(ChaosBlade),并复盘Full GC与数据库死锁两大典型故障案例,助力高效定位与解决线上性能问题。
|
资源调度 JavaScript Windows
yarn install命令运行报错:无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。...
yarn install命令运行报错:无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。...
3979 1
yarn install命令运行报错:无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。...
|
2月前
|
自然语言处理 监控 数据可视化
大模型应用:MiniLM实战案例:基于MiniLM模型的多语言智能客服问答检索系统.124
本项目构建基于深度语义理解的智能客服原型系统,支持中英日多语言混合输入与跨语言语义对齐;采用Sentence Transformer向量化+余弦相似度检索,实现口语化、同义表述精准匹配;集成PCA/t-SNE可视化、知识库热力图及性能监控,确保毫秒级响应与可解释性。
246 7
|
2月前
|
缓存 安全 Windows
电脑开关机、运行卡顿! 科学清理 C 盘释放存储空间实用妙招!
电脑C盘爆红、卡顿、软件闪退?本文提供一套安全、高效、可长期维护的C盘清理流程,从基础清理到系统优化,再到专业工具深度处理,新手也能轻松上手,一次性释放大量空间,让电脑重回流畅状态
|
2月前
|
JSON 安全 JavaScript
静态扫描工具第二讲-Horusec
Horusec是一款极速开源SAST工具,18种语言一键扫描,3分钟出报告(较Semgrep提速10倍),深度检测漏洞与Git历史密钥泄露,支持CLI/CI/CD及自定义规则,简单高效、开箱即用。
259 0
|
2月前
|
Prometheus 监控 Cloud Native
MySQL 性能监控实战:从零搭建 Prometheus + Grafana 监控告警体系(附排查 SOP)
数据库小学妹带你从零学监控!本文详解MySQL五大核心指标维度(资源、连接、查询、InnoDB、主从),手把手配置PMM/Prometheus+Grafana监控栈,设置关键告警规则,并提供SQL快照脚本与三步排障SOP。新手友好,即装即用,让性能问题无所遁形!
|
2月前
|
运维 Java 程序员
程序员必备的十大技能(进阶版)之性能调优与故障排查(一)
教程来源 https://qeext.cn/ 本文系统讲解性能调优与故障排查核心技能,涵盖故障方法论、CPU/内存/I/O/网络/数据库问题定位、Java诊断工具(Arthas/JVM)、全链路压测及混沌工程,辅以实战案例与黄金排查原则,助开发者从“重启党”进阶为问题终结者。
|
2月前
|
Arthas 运维 Java
程序员必备的十大技能(进阶版)之性能调优与故障排查(二)
教程来源 qfcrz.cn 本节系统梳理Java内存问题排查全流程:涵盖JVM内存结构(堆、元空间、直接内存等)、四大典型泄漏场景(静态集合、ThreadLocal、监听器、动态代理)、jstat/jmap/jcmd/Arthas等实战工具用法、MAT深度分析技巧(Dominator Tree、OQL查询),以及GC调优策略与I/O问题定位方法。
|
7月前
|
存储 弹性计算 安全
阿里云服务器2核2G3M99元1年怎么样?实例性能,应用场景解析
本文将为大家介绍阿里云推出的价格亲民、性价比极高的云服务器,配置为2核2G,3M固定带宽,40G ESSD Entry云盘,新老同享优惠价格99元一年,续费99元1年。此实例适合个人开发者和小型企业用于搭建简单的网站、进行开发测试等场景,以极低的成本满足基本的业务需求。此款云服务器凭借其出色的性能、稳定的表现以及实惠的价格,深受广大个人和初创企业用户的喜欢。本文为大家详细介绍一下这款云服务器的性能和适用场景以及可选择的组合套餐。
820 4
|
存储 搜索推荐 数据挖掘
模型并行之Embedding表
Embedding表在推荐模型中起着关键作用,可将高维稀疏数据转化为低维稠密向量,支持用户兴趣建模与相似度计算。本文介绍了5种Embedding表切分方式:Table Wise(集中存储)、Row Wise(按key维度切分)、Column Wise(按列切分)、Table Wise & Row Wise(组合行切分)及网格切分(综合多种方式)。此外,还提及了数据并行方法,即每个Rank保留整个表的副本。这些策略有助于优化大规模模型训练中的存储和计算资源分配。

热门文章

最新文章