CPU使用率突然飙升,如何排查
1.找出哪个进程占用了cpu
top -c
2. 键大写的P,对CPU使用率排序,
3.查看该进程下占用 CPU 最高的线程
top -Hp PID 显示进程PID下所有的线程
输入大写P,线程按照CPU使用率排序
4.定位问题代码
将线程号转化成16进制,之所以需要转化为16进制,因为jvm的进程快照中线程显示是16进制的。
然后我们使用jstack命令,拉到26045进程快照信息,输出到文件中,方便我们查看。
jstack -l 26045 > ./26045.stack
然后我们cat该文件,并且grep通过16进制找一下该线程
cat 26045.stack | grep '65be' -C 20
至此我们就已经找到了问题代码在哪了。
什么情况下会使用索引,什么时候不用?
什么时候需要创建索引
主键自动建立唯一索引
频繁作为查询条件的字段应该创建索引
查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找)
查询中统计或者分组的字段;
什么时候不需要创建索引
频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录,还会更新索引,保存索引文件
where条件里用不到的字段,不创建索引;
表记录太少,不需要创建索引;
经常增删改的表;
数据重复且分布平均的字段,因此为经常查询的和经常排序的字段建立索引。注意某些数据包含大量重复数据,因此他建立索引就没有太大的效果,例如性别字段,只有男女,不适合建立索引。
索引的优缺点
优点:
通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性。
可以加快数据的检索速度
可以加速表与表之间的连接
在使用分组和排序进行检索的时候,可以减少查询中分组和排序的时间
缺点
创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
索引需要占用物理空间,数据量越大,占用空间越大
会降低表的增删改的效率,因为每次增删改索引,都需要进行动态维护
线程加锁会造成什么问题?
加锁通常会严重地影响性能。线程会因为竞争不到锁而被挂起,等锁被释放的时候,线程又会被恢复,这个过程中存在着很大的开销,并且通常会有较长时间的中断,因为当一个线程正在等待锁时,它不能做任何其他事情。