青海西宁市机场遭别国轰炸

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-11-02 23:30:46

青海西宁市机场遭别国轰炸的相关文章

北地富平人物

一.宁夏开发第一人——蒙恬 秦朝著名大将蒙恬,被誉为“中华第一勇士”,曾经是祖国西北最早的开发者,也是古代开发宁夏的第一人. 蒙恬(?-前210),山东人,出身于一个世代名将之家.蒙恬的祖父蒙骜,是战国时期秦国昭王的著名将领,官职是上卿,曾经带兵进攻韩国.赵国,夺取魏国的城池,为秦国立下了战功.父亲蒙武是秦国的副将军,与大将军王翦一起,消灭了楚国,屡次立下战功. 蒙恬是古代著名的猛将,他在秦国统一六国战争中多次打胜仗,为秦国立功.秦国在攻取六国统一中国的战争时,北方游牧民族乘机以黄河河套地区(今

我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", from: "腾讯新闻客户端", qqnews_download_url: "http://inews.qq.com/m?refer=openapi_for_xiaotiancai", articletype: "1&

70个晨会激励哲理小故事

  1.面对生命的态度  有位太太请了个油漆匠到家里粉刷墙壁.  油漆匠一走进门,看到她的丈夫双目失明,顿时流露出怜悯的眼光.可是男主人一向开朗乐观,所以油漆匠在那里工作了几天,他们谈得很投机:油漆匠也从未提起男主人的缺憾.  工作完毕,油漆匠取出帐单,那位太太发现比谈妥的价钱打了一个很大的折扣.  她问油漆匠:“怎么少算这么多呢?”  油漆匠回答说:“我跟你先生在一起觉得很快乐,他对人生的态度,使我觉得自己的境况还不算最坏.所以减去的那一部分,算是我对他表示一点谢意,因为他使我不会把工作看的太

偷车贼遭车主3小时轰炸归车 车钥匙丢失更加简单易寻

据外媒报道,美国一名窃贼日前盗走一辆小货车,不料车主的手机也在小货车上,窃贼遭到了失主的3小时“短信”轰炸.失主在短信中指责窃贼偷去了5个孩子的母亲赖以维生的货车,毁了她的生活:失主也不忘正面引导窃贼,她也向窃贼表示,归还汽车会是天大的恩典.最终车主终于回复认错,还说明自己偷车也是为了养家糊口,并且偷车贼还指示失主如何取得丢失的车辆. 丢失车钥匙这看起来很少发生的事情,但在我们身边却还是有很粗心的车主经常丢失车钥匙.当您开车在外不小心丢失了钥匙,一定不要慌不要急,因为车钥匙丢失是有很多方法去解决

传统媒体在微信遭的那些罪

智能手机的洪流似乎使世界上每个人都从中受益,除了诺基亚和传统媒体,前者开始艰难的挣扎追赶,后者则开始尝试融入移动互联网,转型求发展.传统媒体融入.转型的第一步无疑是看似风险更小参与成本更低的已有大型移动互联网平台,在中国,这个已有大型移动互联网平台叫微信. 不过看似成本最低,风险更小的选择,带给传统媒体的烦恼却一点不少,盘点他们在微信中遭到的各种限制.挤压.明抢.暗坑,不难体会到其中的眼泪和艰难,也可以得出一个历史早已证明过的结论:命运要掌握在自己手中. 公众号被折叠 2013年8月5日,微信5

“地头蛇”微软:强买强卖遭举报

[原文链接] “微软昨天刚从我们公司榨取了6万元.”7月31日,一位互联网创业者向21世纪经济报道爆料. 不 久前,微软联合当地工商突袭该公司打击盗版,公司被查封,然后一台台电脑核查,公司员工被指定在旁边配合调查,很多员工都吓蒙了,以为公司摊上大事了.但 该创业者觉得微软盗版认定很有问题:公司所有电脑都运行正版软件,部分笔记本电脑属于公私两用型,装的是家庭版,而不是企业版,接照微软认定,这属于盗 版.同时,在购买企业版时,必须在微软指定的代理商处购买. 该创业者说,负责他们签约的代理商说:紧跟微

老百胜点击13208831115两千吨×××酿10万人死亡,美军东京大轰炸73周年

老百胜点击13208831115网址www.lbs818.com现代战争中,随着战机与×××愈来愈先进,也让交战双方的平民饱受空袭轰炸之苦.日本在发动珍珠港事变后,当时仍处于被动的美军,曾由吉米·杜立德中校派出16架B-25米切尔型轰炸机空袭日本东京.横滨.名古屋和神户等地的油库.工厂和军事设施,但受到轰炸机续航力与计划限制,此次轰炸只具备象征性意义,并未对日本本土造成太大的伤害. 但随着跳岛战术奏效.以及新型B-29"超级堡垒"轰炸机问世后,美军的轰炸计划就欲发有把握.在收复马里亚纳

青海破获特大盗掘古墓倒卖文物案 追回文物400余件

新华社西宁3月20日电(记者王大千)记者从青海省公安厅了解到,经过半年多缜密侦查,青海警方破获一起特大盗掘古墓.倒卖文物案,抓获犯罪嫌疑人13名,追回被盗掘文物400余件. 2017年10月,青海省公安厅刑警总队在工作中发现了一条涉嫌倒卖文物的犯罪线索,循线索侦查摸排后,初步查明一个涉嫌盗掘古墓.倒卖文物的团伙. 2018年3月17日凌晨,刑警总队集结西宁市.海西蒙古族藏族自治州.都兰县公安机关精干刑警,分头开展多轮收网行动,共抓获13名犯罪嫌疑人,追回被盗掘文物400余件.互通信息后,办案民警

8月第1周业务风控关注 |苹果App商店、iMessage被×××、×××信息“轰炸”

易盾业务风控周报每周呈报值得关注的安全技术和事件,包括但不限于内容安全.移动安全.业务安全和网络安全,帮助企业提高警惕,规避这些似小实大.影响业务健康发展的安全风险. 1.苹果App商店.iMessage被×××.×××信息"轰炸" 近来,不少网友反映,iMessage垃圾信息越来越多,有时候一天能收到两三条,举报也不管用,后续依然会收到.记者联系了苹果相关负责人得到回应,正在探索更多的办法以进一步减少垃圾信息,包括采用更先进的机器学习模型识别垃圾信息,以及推出更多的工具来阻止恶意发件