性能分析调优学习-工具/java/sql

本文深入探讨了性能优化的各种工具,包括APP性能调测、压力测试、流量复制和数据库基准测试。在Java分析部分,详细介绍了如何通过线程定位和监控解决CPU、IO等问题。对于MySQL,分析了缓冲池使用率、SQL性能、内存监控和配置项检查。提供了一站式的性能瓶颈排查和优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、测试工具

APP性能调测分析:Emmaggee

性能压测工具:jmeter ,locust,Gatling,Ngrinder

流量复制工具:tcpcopy,goreplay

数据库基准测试(属于流量压测):sysBench,HammerDB

前端性能监控—浏览器上的performance,开源的zaneperfor。

链路监控(APM监控)—链路追踪,埋点各个接口的函数或类的链接关系,请求链路。目的就是找出拿个环节消耗时间最长,那么性能瓶颈定位分析就指向哪个环节。

 结论:性能瓶颈一般会在最大TPS之前出现,为了让性能问题更明显的暴露,就算TPS达到峰值了还会继续往上压,因为还要借助RT指标来分析。

二、Java分析

1、us cpu 的java的cpu过高时,线程定位:

top #查看高uscpu 的java的进程pid

top -p pid H #查看java对应的线程

printf “%x\n” 线程id # 将高线程的id转换成十六进制

2、sy cpu 的java的cpu过高时,线程定位

top #查看高uscpu 的java的进程pid

top -p pid H #查看java对应的线程

(发现分析:有两个进程很高,且处于sleep和run不断切换,确定是上下文切换)

jstack -l 进程id #输出对应进程的dump线程信息

jstack 进程id |grep 线程id -A 30 #输出对应进程下的对应线程信息

vmstat 2 10 #查看上下文切换

jstack -l 进程id|grep "java.lang.Thread.State”|awk '{print $2$3$4$5}’ | sort |uniq -c. #统计不同状态的线程数量

jstack -l 进程id |grep “on object monitor". #显示waiting on object monitor 状态的线程信息

3、java 的文件IO分析 

top # 查看%iowait是否波动明显

iostat -x 2 10

pidstat -d -p java_pid 1 10. # 跟踪java进程的io

jstack -l 进程id|grep "java.lang.Thread.State”|awk '{print $2$3$4$5}’ | sort |uniq -c. #统计不同状态的线程数量

4、网络Io分析

5、内存分析 

 

三、mysql分析: 

1

缓冲池使用率=(Innodb_buffer_pool_pages_total-Innodb_buffer_pool_pages_free)/Innodb_buffer_pool_pages_total

缓存命中率 Innodb_buffer_pool_read_hits=(1-Innodb_buffer_reads/Innodb_buffer_pool_read_requests)*100%

2

Sq进程分析

SHOW FULL PROCESSLIST;

SELECT * FROM ‘information_schema’.’PROCESSLIST'

sql性能分析

set profiling =1;

set profiling_history_size=20;

show profiles;

show profile cpu,block_io,memory,swaps,context switches,source for query [Query_ID];

select QUERY_ID,SEQ,DURATION,CPU_SYSTEM,BLOCK_OPS_IN,BLOCK_OPS_OUT from information_schema.PROFILING where QUERY_ID=[Query_ID];

Explain sql语句

3 Mysql IO分析

iostat -d -x -k l

iotop -p mysql_pid

SHOW FULL PROCESSLIST;

mysqladmin -uroot -p123456 pr|grep -v Sleep

4 内存监控

查看是否开启监控

SELECT * FROM perormance_schema.setup_instruments

WHERE NAM LIKE ‘%memory%' and NAME not LIKE '%memory/performance_schema%';

临时开启命令:

update performance_schema.setup_instruments set enabled='yes' where NAM LIKE ‘%memory%' and NAME not LIKE '%memory/performance_schema%';

查看内存占用:

Select SUBSTRING_INDEX(envent_name,' /',2) AS code_area, sys.foramte_bytes(SUM(current_alloc)) AS current_alloc FROM sys.x$memory_global_by_current_bytes GROUP BY SUBSTRING_INDEX(event_name,' /',2) ORDER BY SUM(current_alloc)

进一步细化查询memory/innodb:

SELECT * FROM sys.memory_global_by_current_bytes WHERE event_name Like ‘memory/innodb%';

5 内存配置项查看

查看global级共享内存分配情况:

Show variables where variable_name in ('innodb_buffer_pool_size','innodb_log_buffer_size','innodb_additonal_mem_pool_size','query_cache_size','key_buffer_size');

查看session级私有内存情况:

show variables where variable_name in ('tmp_table_size','sort_buffer_size','read_buffer_size','read_rnd_buffer_size',’join_buffer_size','thread_stack','binlog_cach_size');

 6 内存计算器

http://www.mysqlcalculator.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值