低碳节能 人人有责,看看他们是怎么做的

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了。这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies 、disc_copies都可能会发生。

如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2

mnesia过载分析

1、抛出警告是在mnesia 增加dump worker的时候

mnesia_controller.erl

抛出警告是当Worker的#dump_log.opt_reply_to 未定义,仔细看这里的代码,这一步先检查了dumper_queue里的worker

所以,mnesia抛出过载警告有2个条件:

1)当worker的#dump_log.opt_reply_to 未定义

2)dumper_queue有相同操作(InitBy)的worker

2、那什么样的worker的#dump_log.opt_reply_to 未定义?

代码也在mnesia_controller.erl,这里add的worker的dump_log.opt_reply_to 未定义,而{async_dump_log, InitBy} 就是 mnesia:dirty_write/2的过程中调用mnesia_controller:async_dump_log(write_threshold) 产生的。

就是说,mnesia:dirty_write/2会触发异步dump操作,而只有异步的dump会导致mnesia抛出过载警告

3、看一下,mnesia什么时候会修正worker?

代码也在mnesia_controller.erl,在dump完成时,mnesia会修改worker的dump_log.opt_reply_to,然后移出dumper_queue

从上面可以得到结论,mnesia:dirty_write/2的操作是会触发异步dump操作,每次dump操作mnesia都会加到dumper_queue队列,mnesia通过检查dumper_queue是否存有相同操作的worker来检查是否过载

mnesia dump分析

mnesia数据存储实际上使用的是ets和dets,对于ram_copies类型的表使用ets;disc_copies表也使用ets,通过dump将数据保存到*.DCD(disc copy data)文件来持久化,中间可能会用*.DCL(disc copy log)转储;而disc_only_copies表使用的是dets,保存的文件为*.DAT。

表类型不同,mnesia记录数据的过程也不同,这里先讨论mnesia 记录disc_copies数据的过程。

1、mnesia 记录disc_copies数据有2个过程:

1)操作先记录到日志文件LATEST.LOG,然后再dump到*.DCD文件,同时清除LATEST.LOG

2)把修改同步到ets表中

2、mnesia disc_copies表数据dump过程

1)将日志文件LATEST.LOG重命名为PREVIOUS.LOG,然后再新建一个空的日志文件LATEST.LOG

2)分析PREVIOUS.LOG文件中的内容,将disc_copies的表实际修改写到*.DCL文件

3)比较*.DCL和*.DCD的大小,当filesize(*.DCL) > filesize(*.DCD) / dc_dump_limit,把*.DCL的记录存储到*.DCD文件中。dc_dump_limit默认为4,可以通过-mnesia dc_dump_limit Number设置

3、mnesia什么时候会dump

1)定时触发

mnesia启动后,mnesia_controller进程设置定时器,触发dump

mnesia_controller.erl:

默认值为180000,可以通过 -mnesia dump_log_time_threshold 300000 设置。

2)一定次数的操作后触发

每次数据操作,mnesia都会调用mnesia_log:log/1或者mnesia_log:slog/1进行日志记录,记录一次日志就将trans_log_writes_left的值减1,当这个值为0时,触发dump

mnesia_log.erl:

mnesia_dumper.erl :

默认值为1000,可以通过 -mnesia dump_log_write_threshold 50000 设置。

3)手动dump

手动调用 mnesia:dump_log/0  可以强制mnesia 完成dump,而这个dump是同步的

mnesia.erl:

mnesia_controller.erl:

解决mnesia过载

结合上面的分析再谈谈mnesia过载问题,dict_copies表写数据的时候,mnesia会写记录到ets表和日志文件LATEST.LOG,然后定时或定量dump做持久化。通过dump_log_write_threshold /dump_log_time_threshold 可以控制持久化的频率。mnesia在dump数据的时候,如果上一个worker进程dump没完成,就抛出过载警告。对此,dump_log_write_threshold的值表示mnesia经历过多少数据操作做一次持久化,dump_log_time_threshold的值表示mnesia多长时间做一次持久化。

这里再谈谈,为何同一时间只能有一个dumper?

dump的过程是先将日志文件重命名为PREVIOUS.LOG,然后分析PREVIOUS.LOG的数据做持久化,如果同时有第二个dump,将会替换掉第一个dump的PREVIOUS.LOG,影响第一个dump的持久化。那么,聪明的你就会这么想,为何不重命名为XXX.LOG,每次重命名都不同?事实上,如果同时有两个dumper,mnesia仅保证第二个dump能正常进行,放弃掉第一个dump的数据。所以,mnesia出现过载警告的时候,数据有可能会丢失。

这里,我做过了一项测试,修改mnesia的代码,将所有异步dump去掉,改用定时手动dump。还是原来的例子,发现第一个dump还没完成日志文件的分析和持久化,而新的日志文件已经增长到快2G。

dump的过程在文件io层面上其实是,一边在没有控制的追加数据,一边又在分析文件和有序写入,这个过程是在挑战磁盘io的读写极限啊。所以,就算现在有多个dumper,结果只会让cpu和硬盘更加抓狂。

另外,别太过依赖dump_log_write_threshold/dump_log_time_threshold这两个参数,改大了就有用吗?

这两个参数改大了,就是说,dump的频率就会降低,那么等待dump的数据就会更多,dump花的时间将会越长,到头来还是不能解决到问题。这两个参数的意义在于平缓写入速度,避免一时间大量数据写入造成数据丢失。但是,如果每时每刻都是高密度写入,硬盘也承受不了,一般到了这个局面,问题应该从数据缓冲和持久化的设计上去解决,而不是想着换一个数据库去解决。

这里有一点经验可以分享一下:

1、在mnesia没报过载错误的时候,不建议去改动,调节这些参数会影响持久化

2、可以多个进程读mnesia的数据,但写数据的过程只交给少数几个进程去完成

参考:

http://blog.csdn.net/mycwq/article/details/28660813

http://my.oschina.net/hncscwc/blog/161763

低碳节能 人人有责,看看他们是怎么做的,布布扣,bubuko.com

时间: 2024-08-27 04:26:33

低碳节能 人人有责,看看他们是怎么做的的相关文章

社会活动——《保护环境人人有责》(社会文化)

一.活动内容:社会活动——<保护环境人人有责>(社会文化) 二.活动目标: 1.了解周围环境中的垃圾是哪里来的,认识其危害. 2.思考解决环境卫生的办法,并用不同的方式表达出来. 三.活动准备: 1.经验准备:活动前让幼儿两人一组,调查并用自己的方法记录,收集周围环境的垃圾分布情况. 2.物质准备:投影片数张,投影仪,橡皮泥.积木.绘画纸.笔. 四.活动过程: (一)组织交流调查周围环境情况. 引导语:这几天,我们对周围的环境进行了调查,并做了记录,现在谁来向大家介绍一下调查的情况? 1.投放

教你怎么在神武玩21点 普及数学人人有责

在游戏中开天赐宝箱的时候,会经常遇到一个怪物跳出来要跟你玩游戏,然后就是21点小游戏了,但有很多时候明明我的点数要大结果却是它赢了,很多玩家都没有搞懂这是为什么. 就像是这位玩家的21点游戏,我们可以看到对面是7.2.A,然后玩家这边是J.9,乍一算就知道是这位玩家的比较大,可是却输了,而对面写的点数居然是20点.感觉自己的数学被质疑了,可能大部分人都知道J.Q.K是算作10的,但是A能算作11,这个想必有些人就不造了吧. 这里,小编要告诉那些没有了解过21点玩家一些小知识了,点数计算:每张牌都

网络安全人人有责

感谢5CTO提供这些信息,网络安全是每一位企业延伸至个人职工重要的一个环节,因为所有的企业人员个人都配备的电子通信及PC等产品,无一是这些攻击者的面向对象之一,并且中国在这个处于发展中国家,难免会遭受到网络攻击的案例,网络安全现已经关系到中国的科技,文化,生活等等领域,中国有句俗话"没有不透风的墙",--因此大家更要懂得怎么去维护好自己的电子产品.谢谢!

为什么家电这样控制会变的节能与便捷呢?

在家中,一部手机(平板电脑)可控制家中所有家电设备,替代所有遥控器,操作简单,轻松掌控全宅电器.也可通过手机和电脑远程控制,比如提前开启家中空调和地暖系统,回家即享受. 1=N:一部手机(平板电脑)替代所有遥控器; 图片 复杂控制简单化:省掉学习使用众多遥控器的烦恼,集中控制.随时随地控制.轻松掌控全宅电器; 集成控制中央空调,节省投资:各房间无需安装中央空调控制面板,节约布线和施工投资; 图片智能控制厨卫家电:定时烹调.烧水,定时供断电; 离家模式:离家时,可自动切断全部电源,也可通过手机远程

《人人都是产品经理》书籍目录

第一章 写给-1到3岁的产品经理 1.1 为什么要做产品经理 1.2 我们到底是不是产品经理 1.3 我真的想做,怎么入行 1.4 一个产品经理的-1到3岁 第二章 一个需求的奋斗史 2.1 从用户中来到用户中去 2.1.1 用户是需求之源 2.1.2 你真的了解用户吗 2.2 需求采集的大生产运动 2.2.1 定性地说:用户访谈 2.2.2 定量地说:调查问卷 2.2.3 定性地做:可用性测试 2.2.4 定量的做:数据分析 2.2.5 需求采集人人有责 2.3 听用户的但不要照着做 2.3.

2019全国节能宣传展开幕,弘和AI助力“降能增效”

6月17日,由国家×××管理局和四川省人民政府主办,2019年国家公共机构节能宣传周系列活动启动仪式在成都东郊记忆隆重举行.国家×××管理局副局长王永红.四川省人民政府副省长李云泽.住房和城乡建设部城市建设司副司长张乐群出席启动仪式并致辞.弘和集团也受邀参加了本次活动,声情并茂的介绍了弘和AI人证合一一体机和考勤访客迎宾一体机等"降能增效"相关产品. ? ?2019年全国节能宣传周活动的主题是"绿色发展,节能先行".国家×××管理局副局长王永红表示,"做好

绿色数据中心节能,值得探究的八大秘密

随着企业信息化建设的迅速发展,数据中心建设越来越重要,将直接影响企业信息系统的建设和应用效果.根据IDC的估算,从运行成本控制的角度看,在IT行业中,能源消耗成本已经达到企业硬件采购成本的25%.而数据却正以52%的复合年均增长率不断攀升.当企业面对不断变化的业务压力,以及呈指数级快速增长的数据时,需要对数据中心环保.节能方面的特性予以足够的考虑和重视. 如何在确保数据高度安全和高度可靠的前提下,最大限度地保证企业在数据中心建设中能够减少浪费和降低无效投入,打造一个真正"绿色节能"的数

十八大报告(全文)

坚定不移沿着中国特色社会主义道路前进 为全面建成小康社会而奋斗 --在中国GCD第十八次全国代表大会上的报告 (2012年11月8日) HJT 11月8日,中国GCD第十八次全国代表大会在北京人民大会堂开幕.HJT代表十七届中央委员会向大会作报告. 新华社记者 黄敬文 摄 同志们: 现在,我代表第十七届中央委员会向大会作报告. 中国GCD第十八次全国代表大会,是在我国进入全面建成小康社会决定性阶段召开的一次十分重要的大会.大会的主题是:高举中国特色社会主义伟大旗帜,以邓小平理论."三个代表&qu

架构师之路--视频业务介绍,离线服务架构和各种集群原理

先聊聊业务.我们媒资这边目前的核心数据是乐视视频的乐视meta和专门存储电视剧,综艺节目,体育赛事这种长视频的作品库.乐视视频的数据都是多方审核的,需要很多运营.但是作品库部分却是弱运营的,运营都不超过10个人.结果做了两个app,日活都有四五百万的样子.我们其实都有各样的技术储备,很容易可以抓取人家数据,自己套上一个壳子在线解码.但是我们逼格很高,都不这么做的.乐视是个非常注重版权的公司.我名下都有近百个专利了. 撇开这个项目,先看这边一般web项目的常用JVM配置. <jvm-arg>-X