WBF
2021-05-16
1、mysql: ①查看慢日志 ②top -Hp pid 定位线程号,通过线程号定位sql 然后查看执行计划分析是否存在全表扫描,表大小,制定优化方案 oracel: ②分析awr报告 2、 《1》定位堆栈 1、命令 (1)保存堆dump文件,打开dump文件,根据16进制线程号,查找代码的行号定位堆栈: a. jmap -histo:live 进程pid | more / jmap -histo pid|more) 通过进程号(jps -l)看线程调用堆栈 jmap -dump:format=b,file=文件名 进程pid; (b二进制格式) b. jstack 进程pid >>thread.dump ; c. jcmd 进程pid GC.heap_dump /filepath.hprof(二进制格式dump) d. ①配置java参数:(java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<file-or-dir-path>)自动抓取堆dump文件:java_pid.hprof ②使用Jconsole工具将操作调用的serVMOption参数:HeapDumpOnOutOfMemoryError 值设置为true (2)不保存dump文件,定位堆栈: a. 通过 perf record 命令录制进程一段时间,通过 perf report 分析堆栈 b. jstack 进程pid | grep 线程pid :top,top -Hp 进程pid,printf "%x\n" 线程pid,jstack 进程pid | grep 16进制线程pid 2、图形化工具: ①jvm右键java进程选择线程dump生成快照或打开dump文件 ②使用IBM Thread and Monitor Dump Analyzer for Java分析dump文件 ③jconsole ④使用MAT打开dump.hprof文件,查看可疑的内存消耗点的详情,查看对象以及它的依赖 dominator_tree 《2》分析源码: 查看代码行,分析所有调用该方法的代码逻辑,分析代码对应的SQL 《3》沟通:与开发沟通,是否存在定时任务,执行定时任务的数据量大小,有无加limit,线程数
展开
作者回复: 整理的不错哦。表扬! 温馨提醒一下,mysql中是没有AWR报告的,oracle里才有。
9
jy
2021-10-14
请问,容器里面如何执行mysqlreport 呢? 生成的数据如何拿出来?谢谢老师
作者回复: 一样的。可以在容器内安装,也可以远程执行哇。