复述,为什么会出现阻塞

  

复述,为什么会出现阻塞?可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<>强发现阻塞

线上应用服务最先感知到,可在应用方加入异常统计并通过邮件,短信,微信报警。

借助日志系统,统计异常和触发报警逻辑

借助复述,监控系统发现阻塞问题,触发报警。推荐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的情况。

一般出现在网络高流量吞吐的场景

关于复述出现阻塞的原因就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。章!

复述,为什么会出现阻塞