精华内容
下载资源
问答
  • 在使用slf4j的logback实现时,使用TimeBasedRollingPolicy根据时间滚动日志策略并使用RollingFileAppender进行日志滚动,多进程共用同一个日志文件时,会出现较多xxxxxx.tmp文件未删除的情况。 出现tmp文件的条件:...

    在使用slf4j的logback实现时,使用TimeBasedRollingPolicy根据时间滚动日志策略并使用RollingFileAppender进行日志滚动,多进程共用同一个日志文件时,会出现较多xxxxxx.tmp文件未删除的情况。

    出现tmp文件的条件: 使用TimeBasedRollingPolicy/RollingFileAppender配置,并启用压缩,并配置的<file></file>标签名称与滚动名称模板不同(如打印日志时文件名为demo.log,归档时文件名demo.2019-12-12.log.gz),并且单应用启动多实例共用一个日志文件作为输出,例如:

    	<appender name="File"
    		class="ch.qos.logback.core.rolling.RollingFileAppender">
    		<file>${LOG_HOME}/demo.log</file>
    		<rollingPolicy
    			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    			<FileNamePattern>${LOG_HOME}/demo.log.%d{yyyy-MM-dd}.log.gz
    			</FileNamePattern>
    			<MaxHistory>30</MaxHistory>
    		</rollingPolicy>
    		<encoder
    			class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    			<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
    		</encoder>
    	</appender>

    多进程将日志输出到同一个日志文件logback是允许的,仅输出也不会出现问题,但是当归档时,多个进程同时归档,原文件与目标文件(归档文件)名称不同时,会首先关闭输出流,然后将原日志文件rename为xxx.timestamp.tmp,然后读取tmp文件输出到目标归档文件,此时如果是多进程,其他进程那一时刻很有可能没有关闭输出流,所以tmp文件内容一致再增加,并且当其他进程开始归档时也会同样的流程创建tmp文件,然是创建tmp文件后,后续判断归档文件已存在,直接返回了,导致tmp文件未被删除。

    解决方法:

    1. 不压缩(但是多进程也存在问题,日志输出混乱,某个时间点的日志可能出现在上一个时间点日志文件内)

    2. 删除<file>xxx</file>标签,此时产生的日志文件名与归档文件名相同(归档文件后缀.gz/zip),不需要创建临时文件,直接压缩原文件,压缩完毕会删除原文件(可能会丢日志,因为其他进程还在往里面写)

    3. 多进程配置不同的logback配置文件,日志分开存储

    4. appender标签启用<prudent>true</prudent>, logback允许多jvm使用同一个log日志,启用该标志会加锁,在日志输出每秒<100条时性能影响不大,但是不使用该功能要比使用该功能日志性能高3倍左右。局限性就是不能日志使用压缩功能,不能使用<file>标签指定日志文件名,详细参考:prudent   prudentWithRolling

    源码解析如下:

        //RollingFileAppender
        public void rollover() {
            //加锁,统一进程同一时刻只会有一个归档操作
            lock.lock();
            try {
                //关闭日志输出流
                this.closeOutputStream();
                //归档,删除过期文件(如保留30天内,则超过30天的文件被删除)
                attemptRollover();
                //重新创建或打开日志文件,并设置输出流
                attemptOpenFile();
            } finally {
                lock.unlock();
            }
        }
        
        private void attemptRollover() {
            try {
                //调用滚动策略滚动归档日志
                rollingPolicy.rollover();
            } catch (RolloverFailure rf) {
                addWarn("RolloverFailure occurred. Deferring roll-over.");
                // we failed to roll-over, let us not truncate and risk data loss
                this.append = true;
            }
        }
       //TimeBasedRollingPolicy 1.1.7
       public void rollover() throws RolloverFailure {
    
            //该方法被执行时,会认为日志文件为已关闭
            String elapsedPeriodsFileName = timeBasedFileNamingAndTriggeringPolicy.getElapsedPeriodsFileName();
    
            String elapsedPeriodStem = FileFilterUtil.afterLastSlash(elapsedPeriodsFileName);
            //压缩模式,FileNamePattern标签对应的文件后缀,.gz .zip,否则不压缩
            if (compressionMode == CompressionMode.NONE) {
                //获取file标签是否配置,如果配置了,则将原文件重命名为归档文件
                if (getParentsRawFileProperty() != null) {
                    renameUtil.rename(getParentsRawFileProperty(), elapsedPeriodsFileName);
                } // else { nothing to do if CompressionMode == NONE and parentsRawFileProperty == null }
            } else {
                //file标签没有配置,直接将原文件压缩为目标归档文件
                if (getParentsRawFileProperty() == null) {
                    compressionFuture = compressor.asyncCompress(elapsedPeriodsFileName, elapsedPeriodsFileName, elapsedPeriodStem);
                } else {
                //配置了file标签则需要先重命名为tmp,然后读取tmp输出到归档压缩文件
                    compressionFuture = renamedRawAndAsyncCompress(elapsedPeriodsFileName, elapsedPeriodStem);
                }
            }
            //删除过期文件
            if (archiveRemover != null) {
                Date now = new Date(timeBasedFileNamingAndTriggeringPolicy.getCurrentTime());
                cleanUpFuture = archiveRemover.cleanAsynchronously(now);
            }
        }
        //重命名并压缩归档
        Future<?> renamedRawAndAsyncCompress(String nameOfCompressedFile, String innerEntryName) throws RolloverFailure {
            String parentsRawFile = getParentsRawFileProperty();
            //tmp文件名
            String tmpTarget = parentsRawFile + System.nanoTime() + ".tmp";
            //重命名
            renameUtil.rename(parentsRawFile, tmpTarget);
            //异步压缩
            return compressor.asyncCompress(tmpTarget, nameOfCompressedFile, innerEntryName);
        }
        //Compressor 异步压缩
        public Future<?> asyncCompress(String nameOfFile2Compress, String nameOfCompressedFile, String innerEntryName) throws RolloverFailure {
            //参数:原文件,归档文件
            CompressionRunnable runnable = new CompressionRunnable(nameOfFile2Compress, nameOfCompressedFile, innerEntryName);
            ExecutorService executorService = context.getExecutorService();
            //提交线程池
            Future<?> future = executorService.submit(runnable);
            return future;
        }
        // 压缩
        public void compress(String nameOfFile2Compress, String nameOfCompressedFile, String innerEntryName) {
            //gz zip压缩
            switch (compressionMode) {
            case GZ:
                gzCompress(nameOfFile2Compress, nameOfCompressedFile);
                break;
            case ZIP:
                zipCompress(nameOfFile2Compress, nameOfCompressedFile, innerEntryName);
                break;
            case NONE:
                throw new UnsupportedOperationException("compress method called in NONE compression mode");
            }
        }
    
        private void gzCompress(String nameOfFile2gz, String nameOfgzedFile) {
            File file2gz = new File(nameOfFile2gz);
            //原文件不存在直接返回,注意此时tmp文件没有被删除
            if (!file2gz.exists()) {
                addStatus(new WarnStatus("The file to compress named [" + nameOfFile2gz + "] does not exist.", this));
    
                return;
            }
            //如果没有gz后缀,则加个后缀
            if (!nameOfgzedFile.endsWith(".gz")) {
                nameOfgzedFile = nameOfgzedFile + ".gz";
            }
            //归档文件
            File gzedFile = new File(nameOfgzedFile);
            //归档文件是否存在,已存在直接返回,注意此时tmp文件没有被删除
            if (gzedFile.exists()) {
                addWarn("The target compressed file named [" + nameOfgzedFile + "] exist already. Aborting file compression.");
                return;
            }
    
            addInfo("GZ compressing [" + file2gz + "] as [" + gzedFile + "]");
            createMissingTargetDirsIfNecessary(gzedFile);
    
            BufferedInputStream bis = null;
            GZIPOutputStream gzos = null;
            //读取tmp文件输出到归档文件
            try {
                bis = new BufferedInputStream(new FileInputStream(nameOfFile2gz));
                gzos = new GZIPOutputStream(new FileOutputStream(nameOfgzedFile));
                byte[] inbuf = new byte[BUFFER_SIZE];
                int n;
    
                while ((n = bis.read(inbuf)) != -1) {
                    gzos.write(inbuf, 0, n);
                }
    
                bis.close();
                bis = null;
                gzos.close();
                gzos = null;
                //删除临时文件,这个地方有个问题如果上面抛异常了,tmp文件依旧删不掉
                //1.3.0版本该部分移到了try-catch后面
                if (!file2gz.delete()) {
                    addStatus(new WarnStatus("Could not delete [" + nameOfFile2gz + "].", this));
                }
            } catch (Exception e) {
                addStatus(new ErrorStatus("Error occurred while compressing [" + nameOfFile2gz + "] into [" + nameOfgzedFile + "].", this, e));
            } finally {
                if (bis != null) {
                    try {
                        bis.close();
                    } catch (IOException e) {
                        // ignore
                    }
                }
                if (gzos != null) {
                    try {
                        gzos.close();
                    } catch (IOException e) {
                        // ignore
                    }
                }
            }
        }

     

    展开全文
  • 有时候我们在编辑word文档的时候,...如果你通过上述方法,发现文件变成了temp文件,然后还是打不开,那么点这 通过上面的操作,应该没啥问题了。不要担忧,也不要将temp文件给删除,相信会有合适的解决方案的。 ...

    有时候我们在编辑word文档的时候,发现word文档突然不响应了

    然后就是word文件“不见了”(其实是隐藏了),解除隐藏点这

    如果你通过上述方法,发现文件变成了temp文件,然后还是打不开,那么点这

    通过上面的操作,应该没啥问题了。不要担忧,也不要将temp文件给删除,相信会有合适的解决方案的。

    展开全文
  • TMP是什么文件?TMP文件用什么打开?.docx
  • 解决WPS每点击一下保存,就会出现tmp文件,而且该文件属于非隐藏文件,可以删除。 是系统临时文件的环境变量被修改造成的,改回正确路径后重启即可,步骤如下: 1、按win+r,输入sysdm.cpl,点击确定; (sysdm....

    解决WPS每点击一下保存,就会出现tmp文件,而且该文件属于非隐藏文件,可以删除。

    是系统临时文件的环境变量被修改造成的,改回正确路径后重启即可,步骤如下:

    1、按win+r,输入sysdm.cpl,点击确定;  (sysdm.cpl缩写:system data manager。cpl:控制面板项Control Panel Item)

    2、点击高级选项卡,点击环境变量;

    3、分别点击temp和tmp,点击编辑按钮,输入指定的临时文件夹位置,点击确定;

    4、重启计算机使设置生效。

     

    展开全文
  • hive 的tmp文件

    千次阅读 2019-06-13 19:01:14
    在hive中使用insert overwrite操作时 , 数据会先被写入到数据文件夹的临时文件内 ,路径 /tmp/hive/.hive-starting_hive... .tmp 当任务正常结束时,这些临时文件会自动被清理 , 如果出现hive中断 , 或者异常退出 , ...

    在hive中使用insert overwrite操作时 , 数据会先被写入到数据文件夹的临时文件内 ,路径 /tmp/hive/.hive-starting_hive... .tmp

    当任务正常结束时,这些临时文件会自动被清理 , 如果出现hive中断 , 或者异常退出 , 这些临时文件会一直保存在hdfs上 , 久而久之 , 越来越多 , 造成大量无用挤压的文件 , 必须手动清理 .

    展开全文
  • hadoop无法自动生成tmp文件

    千次阅读 2019-11-12 11:29:11
    conf.set(“hadoop.tmp.dir”, “E:\tmp\hadoop-abc”); // conf.set(“mapreduce.framework.name”, “local”); Job job = Job.getInstance(conf); // 指定本次job运行的主类 job.setJarByClass...
  • 重命名文件、移动文件、删除等操作时出现.svntmp文件,并弹出 An internal error occurred during: "更新 SVN 状态". java.lang.NullPointerExc; 解决方案: 关闭并重启eclipse,把文件的.svntmp去掉...
  • 在使用LogBack打印日志,并根据每天和自定义大小拆分压缩文件时,**出现上百G的tmp文件,不会自动删除,另外,出现tmp没有删除的情况时,压缩文件里面的文件是空的。** 请问是什么情况,是否可以优化logback的配置...
  • TMP文件恢复Word文件

    千次阅读 2015-01-16 09:52:55
    Word 将临时文件(~WRL000x.tmp)用作“安全网络”,以防止其文件保存方案中出现系统错误。通过首先保存到临时文件,然后使用适当的名称重命名此文件,Word 可确保原始文件的数据完整性,以预防写入文件时发生的问题...
  • Linux下两种增加/tmp文件的方法

    万次阅读 2017-03-24 10:40:29
    最近在弄13C cloud grid 的时候发现默认的/tmp文件大小不够了,装CC对/tmp文件的空间要求较高至少10G,否则会报“The directory "/tmp" does not have enough space”错误 [oracle@12cr2 stage]$ ./em13200p1_linux...
  • Hive外部分区表加载flume打到hdfs上文件,读不到.tmp文件
  • hive会产生大量的tmp文件

    千次阅读 2017-03-31 15:54:14
    在实际的hive数据开发中,目录/tmp目录下产生大量文件数据,占用大量的磁盘空间。 下面是cloudera官网给出解释: ...
  • svn cleanup时候产生tmp文件并提示Locked

    千次阅读 2014-09-18 11:36:30
    在更新svn时候提示提示目录下多出了一个xx.tmp文件,查看只有确实存在这个mu'lu
  • 更新svn时,报错.svn/tmp文件找不到,从而导致更新失败。 方法:在母目录执行clear up,成功后再次update,ok 了/
  • 但有些时候通过tmp文件的名称结构可以发现一些痕迹,比如2011_annual_report.tmp这个tmp文件应该就是一份word、Excel或者PPT文档的年度报告了。 为什么要创建tmp文件? 程序会创建这个文件主要是用于备份的...
  • jsp页面有一个file的文本框。 只要点击浏览,然后选中一个excel文件,不管有没有操作,在...会产生tmp临时备份文件,而且还删不掉。。。关闭浏览器才能自动消失。。 请问各位大佬怎么解决哇?有人知道嘛?求救求救!!~
  • 打开本地的php 下的 php.ini 文件 ,找到 sys_temp_dir='./tmp' 的配置项,将前面的分号 ; 注释去掉 , 我本地是 E:\phpStudy\tmp; 使用命令行工具 进入到phpStudy 根目录 将 tmp 文件夹权限 修改为 777 权限 ...
  • 简单tmp清理工具

    2013-10-25 10:31:57
    简单tmp 清理工具 傻瓜工具 批处理文件 可以一键清理系统tmp文件残留
  • 关于linux tmp文件自动删除的问题

    千次阅读 2021-02-21 17:31:34
    事件起源:昨天值班过程中,应用组同事反馈一台linux机器的/tmp目录下自己放的脚本没有了,而且脚本相对挺重要,瞬时冷汗冒出。 作为一名运维工程师最怕删东西,找值班同事及系统组同事确认后,没有人为清理,不过...
  • 解析sql查询时生成的tmp文件

    千次阅读 2009-05-05 09:37:00
    当查询的时候,该文件存放查询的结果,当关闭该查询的时候,该临时文件会自动删除,所以在我们进行查询的时候,是感觉不到该文件的存在。 一、 tmp 文件存在于什么地方 对于 windows 系统,都有一个系统环境...
  • 文件上传时找不到指定缓存文件tmp

    千次阅读 2018-12-18 20:25:01
    org.springframework.web.multipart.commons.CommonsMultipartFile@362fde...D:\JAVA\graduation\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\MyCampus2\upload_0bfd2724_5169_43...
  • CentOS清理tmp下临时文件

    千次阅读 2019-04-10 09:26:29
    因为跑爬虫,在某一天发现磁盘沾满了,后来发现是tmp下临时文件太多了 两种清理: #清理十天前的 find /tmp -ctime +10 -exec rm -rf {} + #写脚本定时清理 使用tmpwatch命令最短可清理一小时未用的 首先下载...
  • word保存时出现tmp文件、保存出错的恢复方法 作者XP系统上安装卡巴斯基反病毒 2009 后,在使用office 2003时,经常会在同文件夹下出现随机命名,护展名为tmp的文件。作者多次重装系统,重装office都没解决这个问题,...
  • [Linux] Linux中/tmp目录下文件莫名丢失

    千次阅读 2019-01-11 10:17:00
    &amp;amp;amp;gt; 删除一段时间没有被访问的文件
  • 如何保留/tmp文件夹下的指定文件 有详细的步骤和操作流程,简单易学,是本人在工作过程中的经验积累。
  • 为什么2008会出现很多TMP文件

    千次阅读 2009-11-28 10:35:00
    有一个方法是:把项目文件夹放在NTFS格式下的盘符中就不会自动产生这些.tmp文件。(我简单试了下,好像有用) 不过这个方法并没有说明具体情况。 经过我仔细回想,突然想起,昨天还好好的(并不会自动生成这些文件:...
  • 去除打开WORD时出现的.tmp文件

    千次阅读 2009-03-19 21:10:00
    tmp是临时文件,Word工作的时候会产生一个这种文件用作磁盘缓存,有时候用户可以看到Word非正常退出的时候左侧出现恢复文档的提示,它们都是从这些临时文件恢复的。这些文件在你不打开隐藏文件选项的时候是不显示的...
  • JAVA清空tomcat下temp中的.tmp临时文件

    千次阅读 2019-11-20 12:43:41
    JAVA清空tomcat下temp中的.tmp临时文件 由于引入的某些第三方jar包在tomcat下产生了大量临时文件,使用JAVA程序对其进行清除。 代码 try { File file = new File("../temp"); //找到temp文件夹,生成一个File...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 656,845
精华内容 262,738
关键字:

tmp文件