其他
Java进程CPU占用高导致的网页请求超时的故障排查
每天早晨,干货准时奉上!
本文作者:荣书
来源:blog.51cto.com/rongshu/2426712
二、定位故障
2.1、根据思路查看高占用的“进程中”占用高的“线程”,追踪发现7163的进程中16298的线程占用较高,使用命令:
top -Hbp 7163 | awk '/java/ && $9>50'
printf "%x\n" 16298
3faa
2.3、通过jvm的jstack查看进程信息,发现是调用数据库的问题。
jstack 7163 | grep "3faa" -A 30
2.4.1、打印mysql现有进程信息,并把信息生成log文件,使用的命令如下:
mysql -uroot -p -e "show full processlist" > mysql_full_process.log
grep Query mysql_full_process.log
use databases_name;
select count(1) from table_name;
show create table table_name\G
3.1、清理数据只保留一个月的数据,清理后数据只剩下4000多,使用命令如下;
delete from table_name where xxxx_time < '2019-07-01 00:00:00' or xxxx_time is null;
3.2、由于表未加索引,所以给表创建索引,使用命令如下:
alter table table_name add index (device_uuid);
show create table table_name;
四、结果:
五、其他:
在处理问题后,又查询了一下数据库相关问题的优化,有方案说在mysql配置文件中添加innodb_buffer_pool_size参数也可以优化查询查询时间,但该参数的意义把数据放到内存了,也就是说如果数据更新了,还会导致buffer失效,通常的优化方法还是添加索引。该方法添加参数具体如下:
innodb_buffer_pool_size=4G
打卡送书活动
活动介绍:学习使我进步!打卡送书活动启动!
活动奖品:技术书籍 × 10
赞助商:电子工业出版社
《Java程序设计教程》是以实际工作案例为依托,从Java程序设计基本的理论知识出发,重点突出Java程序设计的基本语法规则及相关概念,从初学者的角度,以丰富的案例进行讲解分析,用通俗易懂的语言介绍Java程序设计中涉及的技术。
本公众号全部博文已整理成一个目录,请在公众号菜单栏获取!
-