赞
踩
- top 查看异常程序
- top -H -p pid 查看异常的线程
- printf “%x\n” 线程号 将线程号转化为16进制
- 使用jstack 进程号 | grep 16进制异常线程号 -A90 来定位异常代码位置。 举例:
jstack 23111 |grep -A 90 a8ea
- top 查看异常程序
- pstack pid 查看可疑的线程,找到对应线程的LWP
或者使用 top -H -p pid 查找可疑的线程- pstack pid | vim - 查看可疑堆栈
以上初步定位到问题,如果想具体查看问题位置。- gdb attach pid
- thread threadid (threadid可用pstack看到,是当前线程号,不是线程LWP)
- bt
- frame x
- p xxx
通过top命令,发现MySQL CPU很高,通过以下步骤定位并解决问题
- 登录MySQL,执行 show processlist;找到可以的sql (大多数情况是查询字段无索引,数据量大,索引冲突导致锁死)
- 通过kill ID 杀死可疑session,使用top命令继续查看CPU利用率,是否还会飙升。
- 如果有大量session连接导致CPU飙升,可以调节MySQL连接数与后台的数据库连接池数量。
- 大并发量时,将慢日志关闭。
- 如果出现死锁,使用explain优化sql语句
InnnoDB死锁问题定位:
以下介绍了索引什么时候导致上锁
一个表不要太多索引,尽量少使用单字段索引,多字段索引对单字段也会生效。
要清楚什么时候添加索引,什么时候索引无效。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。