线上问题排查
一:CPU飙高问题排查过程
遇到这种问题,首先是登录到服务器,看一下具体情况。
- 定位进程:top命令,查看CPU占用情况
- 定位线程:top -Hp 1893命令,查看各个线程的CPU使用情况
- 定位代码:printf ‘%x\n’ 转成16进制,jstack命令,查看栈信息
二:数据库连接池满排查过程
问题:然后去排查了一下SQL耗时,发现有大量的耗时SQL,并且执行耗时和锁耗时差不多是相等的
原因:乐观锁是不需要加锁的,通过CAS的方式进行无锁并发控制进行更新的。但是InnoDB的update语句是要加锁的。当并发冲突比较大,发生热点更新的时候,多个update语句就会排队获取锁。而这个排队的过程就会占用数据库链接,一旦排队的事务比较多的时候,就会导致数据库连接被耗尽。
解决思路有以下几个:
● 1、基于缓存进行热点数据更新,如Redis。
● 2、通过异步更新的方式,将高并发的更新削峰填谷掉。
● 3、将热点数据进行拆分,分散到不同的库、不同的表中,减少并发冲突。
● 4、合并更新请求,通过批量执行的方式来降低冲突。(比如你有10条增加积分的操作要执行,那么你就可以算出这十条一共要加多少积分,一次性加上去)
三:线上服务器如果磁盘满了,你会如何处理?
- df(disk free)用于显示文件系统的磁盘空间占用情况
- du(disk usage)用于显示指定目录或文件占用了多少磁盘空间。
- 清理日志文件:先到你的应用日志目录下,看一下这些文件的大小,对于一些历史日志文件,如果已经完成ELK的采集和同步了,就可以直接rm -rf物理删除了