Mycat因为宕机的内存分析,查找大结果集合的sql。
-
首先通过 jps 查找linux 中java的进程
可以知道mycat的进程是187644
2.dump jvm的内存
jmap -dump:live,format=b,file=temp2.bin 187644
通过上面的命令将jvm内存dump到temp2.bin中
3. 打包
tar -zcf temp2.tar.gz temp2.bin
4. 下载MemoryAnalyzer软件
5.打开temp2.bin文件
可以知道上面最大的2G的基本就是内存异常的
-
点击查看各个大对象
2.查找大对象
一般mycat 中的占用了如此大的内存 都是大sql导致,接下来叫大家如何抓取sql
session中放置的是对应的web 端连接的mycat的连接 通常加mysql连接.
rrs 对应的sql的路由的结果集合对象 ,
nodes : 有多少个集合 就是多少个分片需要执行.
statement: 就是接受到的sql , 但不是最终要执行的sql,最终要执行的sql ,是在nodes里面的RouteResultsetNode的statement
右边的图示nodes继续点开.
RouteResultsetNode继续点开
srcStatment放置的是web传送的sql
statement 才是真正要执行的sql.
至此 已经找到了执行的sql ,之后就是对sql 进行优化.
优化方法:
如果要查询200个节点,循环查询200次 单节点的查询, 而不是一次性查询200个节点.
6.查看正在执行的线程
点击过去可以查看各个正在运行的线程.