spin lock(自旋锁讲解)
一 定义和内容:
1 spinlock叫做自旋锁,主要作用是给临界数据加锁,从而保护临界数据不被同时访问,实现多任务的同步。如果临界数据当前不可访问,那么就自旋直到可以访问为止。
2 spinlock的工作方式本身就体现了它的优缺点,优点是执行速度快,不涉及上下文切换;缺点是耗费CPU资源,具体表现为sys占用率很高
3 获取临界区的锁称为进入临界区,而把锁的释放称为离开临界区。Spinlock就是为了保护这临界区。
4 cpu核心在很多对资源的申请和释放的时候都会通过spin lock对临界资源进行保护。需要进一步分析__spin_lock的来源。
二 mysql排查手段
1 通过perf pid of mysqld 定位到 _spin_lock占用率太高
2 利用pstack跟踪mysqld进程
ptsack `pid of mysqld`
3 分析ptsack日志
4 查看mysql innodb status状态线程争用热点
三 具体表现
sys cpu负载高主要以下:
(1)cpu内核态spin,大量线程cpu在内核态自旋等待
(2)系统上下文切换,又分为:
spin仍然失败的,最终进入os wait,调用pthread_cond_wait等待条件满足时被唤醒 关键函数 pthread_cond_wait
malloc()频繁加减os mutex,且系统内存紧张 关键函数 malloc
(3)常见案例
1 linux与mysql时区不一致导致的系统时区转化函数
2 numa频繁分配内存导致的问题
3 待补充
四 mysql内部全局锁说明
kernel_mutex是个全局锁,保护事务,buffer pool,锁,等InnoDB存储引擎实现的大部分对象.当MySQL突然有大量访问,并发一旦非常高的时候,mutex冲突非常剧烈,此时临界区变得非常大,同时也会浪费cpu很多时间空转。所以这也解释了sys cpu大量消耗在自选空转中.在mysql8.0后 会对这个锁进行拆分
五 补充案例
https://mp.weixin.qq.com/s/hXtCzSnlVfo9Cq92538ipw?
mysql 案例 ~ sys占用率太高的问题分析
猜你喜欢
转载自www.cnblogs.com/danhuangpai/p/11790527.html
今日推荐
周排行