- 有慢sql,引起cpu飚高(内存可能飚高)。
出现CPU飚高或者内存飚高的情况,先查慢sql,是否有全表扫描,或者全局模糊查询的情况。SELECT * FROM information_schema.processlist WHERE info IS NOT NULL ORDER BY TIME DESC; select * from information_schema.processlist t where t.COMMAND='Query';
- 有死锁,在jstack文件的最下方找。
- 线程数多(没有及时销毁)。
- 频繁切换上下文(其实和3是一样的,导致线程数较多)。
- 资源不够用,申请扩容。
vim /
chmod a+w /
为什么我们要给所有的用户赋权呢?
因为我们的java进程是运行在admin用户下面的,所以要通过root给admin赋权
top
jstack 6140 > /
注意这里6140是进程
top -p 6140 -H
printf "%x" 26719
对应的就是 685f
注意这里 26719是6140进程下面的线程
less /
这个时候就要考虑资源是否够用的情况了。
top -Hp pid
jstack pid(进程id) | grep 线程id(十六进制的,printf “%xn” pid的结果)-A 30
jstack 23745 | grep 5cff -A 30
问题排查:猜测是因线程太多导致的
ps -ef |grep java
查到PID为12179后,执行top -Hp //查看线程
所以这里执行top -Hp 12179,查到该线程的用户为admin
切换用户至admin,使用su username命令,所以这里执行
su admin
执行jstack
名称前缀为****-pool 的线程数量高达1.8个w
然后看代码排查问题
主要是这里开启了多线程。
本地分析
解决方法
退出出最后关闭线程池。
使用完线程池一定记得回收,否则跑着跑着就内存爆炸崩溃。
现象描述,生产应用总共4个pod节点,不定时的有台机器就会挂掉,其它中心调用自己部门的接口会超时,情况定位。
数据库右模糊匹配,搜出来的数据量大,超时,导致CPU飚高。
有个查询语句没有加查询条件,导致全表扫描,由于tomcat在一直等数据库的返回,导致应用CPU飚高。
top命令
top -p 23234 -H
这个时候来查看show的文件 通过上图中的十六进制5ae1的线程ID
这个时候就可以具体的看到哪行代码的问题了。
在中,拉到文档最下面,就可以看到下面死锁的情况了
本文发布于:2024-01-31 15:33:30,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170668641329545.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |