复述,为什么会出现阻塞?可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<>强发现阻塞强>
线上应用服务最先感知到,可在应用方加入异常统计并通过邮件,短信,微信报警。
借助日志系统,统计异常和触发报警逻辑
借助复述,监控系统发现阻塞问题,触发报警。推荐CacheCloud系统。
API或数据结构使用不合理
对于高并发场景,避免在大对象上执行算法复杂度超过O (n) O (n)的命令。
发现慢查询:slowlog得到{n}
发现大对象:redis-cli - h - p{港口}{ip} bigkeys
<强> CPU饱和强>
CPU饱和指复述,把单CPU核跑到100%。
高级命令查看复述,进程CPU使用率
redis-cli - h - p{港口}{ip}统计获取当前复述,使用情况,判断并发是否达到极限
info commandstats分析命令不合理开销时间,可能过度内存优化
<>强持久化阻塞强>
1,叉阻塞
发生在RDB或AOF重写时,复述,主线程调用叉产生子进程完成持久化文件重写
使用信息统计命令获取lastest_fork_usec指标,表示复述,最近一次叉操作耗时
2, AOF刷盘阻塞
开启AOF,文件刷盘一般每秒一次,硬盘压力过大时,fsync需要等待写入完成
查看复述,日志或信息持久性统计中的aof_delayed_fsync指标
可使用iotop差可能哪个进程消耗过多的硬盘资源
3, HugePage写操作阻塞
对于开启透明HugePages的操作系统,每次写命令引起的复制内存页单位由4 kb变为2 mb
会拖慢写操作的执行时间,导致大量写操作慢查询
<强> CPU竞争强>
1,进程竞争:复述是典型的CPU密集型应用。使用,特别行政区命令定位CPU消耗的时间点和进程
2,绑定CPU:常见优化是把复述,进程绑定到CPU上,较低的CPU上下文切换开销,如果叉子进程做了CPU绑定,则父子进程存在激烈的CPU竞争,极大影响复述,稳定性。
redis-cli信息服务器| grep process_id
2,根据进程号查询内存交换信息
猫/proc/{process_id}/smap | grep交换
如果交换量都是0 kb或者个别4 kb、是正常现象。
预防内存交换:
1,保证机器充足的可用内存
2,确保所有复述,示例设置最大可用内存(maxmemory),防止极端情况下复述,内存不可控的增长
3,降低系统使用交换优先级,如回声10在/proc/sys/vm/swappiness
网络问题强>
1,连接拒绝
网络闪断:一般在网络割接或带宽耗尽的情况
复述,连接拒绝:
连接数大于数时拒绝新的连接进入,信息统计的rejected_connections指标
客户端访问复述,尽量采用NIO长连接或连接池的方式
复述,用于大量分布式节点访问且生命周期较短的场景(如Map/Reduce)时,建议设置tcp-keepalive和超时参数让复述,主动检查和关闭无效连接
连接溢出:
进程限制:进程可打开最大文件数控制,ulimit - n,通常1024大量连接的复述,需要增大该值
积压队列溢出:系统对于特定端口tcp连接使用积压队列保存,复述,默认511年,系统积压默认128年线上可使用cron定时执行netstat - s | grep溢出统计
2,网络延迟
测量机器之间网络延迟
redis-cli - h - p{港口}{ip}延迟 redis-cli - h - p{港口}{ip} -latency-history默认15秒完成一行统计,我控制采样时间 redis-cli - h - p{港口}{ip} -latency-dist统计图展示,每1秒采样一次
3,网卡软中断
单个网卡队列只能使用一个CPU、高并发下网卡数据交互都集中在同一个CPU,导致无法充分利用多核CPU的情况。
一般出现在网络高流量吞吐的场景
关于复述出现阻塞的原因就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。章!