复述的两种持久化方式有什么缺点吗?

  

这篇文章主要为大家详细介绍了复述的两种持久化方式的缺点,图文详解容易学习,配合代码阅读理解效果更佳,感兴趣的小伙伴们可以参考一下。

一、RDB持久化模式缺陷

1,问题描述:

并发200路,模拟不断写复述,持续4小的时后,接口调用开始出现大量失败,错误信息如下:

{“data": {“sendResult":零},“base": {“returncode":“99999”,“returndesc":“系统异常:MISCONF复述,配置为拯救RDB快照,但目前无法持续alt="复述的两种持久化方式有什么缺点? ">

于是根据错误信息提示开启复述,日志,继续压测,接口依然报错,但可从复述,日志信息中

不能保存背景:叉:无法分配内存

进程使用内存不当有关,查看复述,主进程占用内存如下:占用近55% * 4 g内存

复述的两种持久化方式有什么缺点?

具体原因:复述,在保存数据到硬盘时为了避免主进程假死,需要叉一份主进程,然后在叉进程内完成数据保存到硬盘的操作,如果主进程使用了2.2 gb的内存,叉子进程的时候需要额外的2.2 gb,此时内存就不够了,叉失败,进而数据保存硬盘也失败了。

3,缓解方案(不能根本解决问题):

3.1修改复述。参看文件中配置项stop-writes-on-bgsave-error没有(默认值为yes),即当bgsave快照操作出错时停止写数据到磁盘,这样后面写错做均会失败,为了不影响后续写操作,故需将该项值改为没有

3.2修改内核参数(如下3种方式),但需要根权限:

(1)编辑/etc/sysctl。相依,改vm。overcommit_memory=1,然后sysctl - p使配置文件生效   (2)sysctl vm.overcommit_memory=1   (3)回声1比;/proc/sys/vm/overcommit_memory

二,AOF持久化模式缺陷

1,问题1描述:

复述,主从节点均开启AOF模式,并发200路,模拟不断写复述,持续15分钟后,接口调用开始出现大量失败,且复述所在Linux的虚拟服务器挂起。

接口报错如下:

{“data":零,“base": {“returndesc":“系统异常“,“returncode":“999999“},“qrybase":零}   商业(达博)接口报错如下:   2015-06-05 11:28:28.760 [DubboServerHandler-X.X.X。X 20882 -线- 173):验证能时错误——错误!   redis.clients.jedis.exceptions。JedisConnectionException: java.net.SocketTimeoutException:读取超时

原因分析:

从达博接口报错信息来看,是由于接口API操作复述,超时导致。从系统日志和IO监控来看,均说明上述问题是由于IO瓶颈(系统IO过于繁忙)所致,如下所示:

复述的两种持久化方式有什么缺点?

复述的两种持久化方式有什么缺点?

从系统日志也能看的出,IO阻塞时间超过了120秒,由于系统安全机制导致机器挂起。

总结

测试结果证明AOF模式存在最明显缺陷,即访问压力大时IO会成为性能瓶颈,进而导致服务不可用。

3,缓解方案(不能根本解决问题)

编辑/etc/sysctl。相依,添加如下配置:

vm。dirty_background_ratio=5   vm。dirty_ratio=10

然后sysctl - p使配置文件生效。

问题2描述:

无论采用AOF模式还是RDB(快照模式),当两文件(.aof或.rdb)大小超过系统内存80%,复述,进程会被系统杀死掉,导致服务不可用。

以上就是的汇总,内容较为全面,小编相信有部分知识点可能是我们日常工作可能会见到或用到的。希望你能通过这篇文章学到更多知识。

复述的两种持久化方式有什么缺点吗?