日常开发部署时要避免的两个打爆磁盘的问题

Posted 编程一生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日常开发部署时要避免的两个打爆磁盘的问题相关的知识,希望对你有一定的参考价值。

日常开发部署时要避免的两个问题,处理不当,打爆磁盘,写COE,写 casestudy,怀疑职业选择。

今天来带大家排排雷。

%dyyyy-MM-dd HH:mm:ss.SSS [%thread] %-5level %logger35 - %msg %n <File>$log.base/$log.moduleName.log </File><!-- 设置日志不超过$log.max.size时的保存路径,注意如果 是web项目会保存到Tomcat的bin目录 下 --> <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。--> <rollingPolicy > <FileNamePattern>$log.base/archive/$log.moduleName_all_%dyyyy-MM-dd.%i.log.zip </FileNamePattern> <!-- 当天的日志大小 超过$log.max.size时,压缩日志并保存 --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>$log.max.size</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>$log.max.history</maxHistory> </rollingPolicy> <!-- 日志输出的文件的格式 --> <layout > <pattern>%dateyyyy-MM-dd HH:mm:ss.SSS %-5level [%thread]%logger56.%method\\(\\):%L -%msg%n</pattern> </layout> <maxFileSize>$log.max.size</maxFileSize> archiveRemover = timeBasedFileNamingAndTriggeringPolicy.getArchiveRemover(); archiveRemover.setMaxHistory(maxHistory); if(cleanHistoryOnStart) addInfo("Cleaning on start up"); archiveRemover.clean(new Date(timeBasedFileNamingAndTriggeringPolicy.getCurrentTime())); long periodsElapsed = 0; //如果尚未执行过清理操作,则默认清理除保留天数外64天以内的日志(由INACTIVITY_TOLERANCE_IN_MILLIS决定) if (lastHeartBeat == UNINITIALIZED) addInfo("first clean up after appender initialization"); periodsElapsed = rc.periodsElapsed(nowInMillis, nowInMillis + INACTIVITY_TOLERANCE_IN_MILLIS); if (periodsElapsed > MAX_VALUE_FOR_INACTIVITY_PERIODS) periodsElapsed = MAX_VALUE_FOR_INACTIVITY_PERIODS; else //如果已经执行过清理操作,则清理从上次到当前时间的需要清理的时间周期。 periodsElapsed = rc.periodsElapsed(lastHeartBeat, nowInMillis); if (periodsElapsed < 1) addWarn("Unexpected periodsElapsed value " + periodsElapsed); periodsElapsed = 1; return (int) periodsElapsed;

删除时会根据当天时间,生成一个正则表达式:/*****/rsms_all_2018-04-09.(\\d1,3).log.zip,满足条件的文件就会被清理掉。

由以上可以得出两个结论
  1. 如果首次项目启动时,超出maxHistory定义的时间的64天之前的日志是不会被清理的

  2. 如果当天日志的编号超出3位数后缀,也将不会被清理

总结

上面两个问题其实可能对于很多人来说,理解是很简单的事情。但是有两点需要提醒:

1、要从原理上彻底理解清楚

2、要有良好的规范和方法来避免这样的问题。这一点,目前大多数公司都做不到

参考文章

https://www.jianshu.com/p/d9c08785430a

避免火狐浏览器产生巨大的磁盘写入量

我把电脑硬盘换成了一个SSD,新安装了系统。不久后,在系统监视器里发现,浏览一下午的火狐往磁盘写了1.5G的数据量,打开一个网页时要写2M的数据,这也太大了!我这SSD得少活多少年?我去试了试谷歌,一连打开七八个网页,磁盘写入达到2M/s,赶忙关掉了,吓人。
这怎么行?百度找方案......乱七八糟,只找到磁盘优化的内容,都与很地层的东西有关,不怎么敢弄,但是也改了一些东西。

如果下面这些解决方案并没有生效,可能是因为我做的一些其他改动,评论或私信我改过来。

历史纪录

偶然间,我想到隐私模式会不会没有这么大的写入量?试了试,成了,打开好几个网页只偶尔写几十KB。又在非隐私模式下改了改设置,选择不记录任何历史,再打开好几个网页,依然只写了几十KB!就是历史纪录的问题,关闭历史记录就能避免打开网页时写入一两M的数据量了,代价就是不能看历史纪录。
以前的监视就不截图了,我不想再白写1.5G。这是关闭历史纪录后,火狐开了一下午的监视截图,只有几十M:
技术图片
然而,这会带来一个不便之处:不会保存Cookie了。这意味着每次登陆网络账户都要重新输入账户和用户名。方便点的解决方式是,再禁用历史前去经常逛的网站登陆一下,让浏览器记住密码,禁用历史后,登陆时点点鼠标让浏览器自动填写就行,不用再打字了。
当然,直接用隐私窗口代替禁用历史也好。

地址栏

使用地址栏时也会产生一些读写操作,可以在‘隐私与安全->地址栏’里有选择地关掉。

延长定期写入时间

火狐会根据打开的标签页和窗口的数量定时产生数据量,比如存储线程信息,用于崩溃后的恢复,再比如...我只能比出这一个如。
修改方法:地址栏输入about:config(三思啊)->搜索browser.sessionstore.interval,默认值是15s(15000),根据情况修改吧,十分钟=600000。
火狐应该还有其他设置,我就不改了。

以上是关于日常开发部署时要避免的两个打爆磁盘的问题的主要内容,如果未能解决你的问题,请参考以下文章

ODPS主备集群双向数据复制导致主备中心网络打爆问题

打开access出现磁盘或网络错误

日常Java编程练习题(每天进步一点点系列)

五步搞定Java开发环境部署,电子版已问世

编写Java代码时应该避免的6个坑

在 Java 中分配大量数组时避免内存碎片