有一个文本文件比如叫log.txt,会被程序A的一个进程P1写一些错误日志数据,当然P1进程也向存储系统写大量的正常数据。而且开机后程序A会自动运行。
由于大量的日志数据导致log.txt会越来越大。Windows的“右键删除”不能够删除该log.txt文件,会提示“该文件正在被另一个程序使用”。因为P1进程的存在所以不能删除。但每次重新启动服务器后该文件自动清空为0。现在不能由于要清除该日志文件不能每次都重新启动服务器。
也不能因为要清除该log.txt日志文件来终止P1进程。我曾尝试写了一个程序向log.txt文件写入一个空字符,的确该文件比如从800多M变成了0字节,但过了几秒钟后该文件自动变回成800多M。我的神啊,是不是该log.txt文件跟虚拟缓存还有什么关联么?应该不是放在物理内存里的。各位给我个建议啊,如何将该文件里的内容清空?

解决方案 »

  1.   

    你那是撒系统啊
    一会就800++M了我们的系统搞了一年也才200++M
    日志会有那么大吗?!当你对log.txt进行写操作的时候 P1也在不停的对它进行读写操作
    很可能是你操作完后 P1还在对它操作 没有释放内存
    过一会操作完了就自然变回原来的800++M了
      

  2.   

    你首先要明白A程序会怎样用这个log.txt。 如果只是写日志的话不可能会800多M的. 如果他把这个文件作为磁盘缓存,A程序有可能一开始就为log.txt申请800M的空间,如果真的是这样做,那你就没办法了.
      

  3.   

    另外如果你能通过自己写的程序来修改log.txt的内容,你也一定能够用自己的程序把这个文件删除,所以你可以用timer定时删除这个文件. 当然如果如我上面所说A程序一定要为log.txt申请800M空间的话,你做什么都没用了
      

  4.   

    楼上的说的timer来做我感觉方法可行。
      

  5.   

    同意2楼,7楼的看法~
    不过,感觉如果能修改进程P1的实现的话,问题会容易点吧。如果log.txt不是很重要,它没必要一直打开吧,毕竟错误是少数;如果很重要,应该有防止文件过大的策略,毕竟操作这么大的文件,开销也不少
      

  6.   

    1.P1进程现在不容易修改了啊^_^ 不然我也想改啊。
    2.P1进程不能停的啊^_^,如果停了正常数据也不能存储了啊^_^。
    比如是
    try
    {
         //正常存储
    }
    catch(Exception ex)
    {
         //异常日志记录
    }
    3.我当时也想过定时删除,比如发现它是5秒变回原来的数据大小,那么我就定时3秒就删除一次。表面上改日志文件是0字节。但我觉得其实虚拟内存还是在继续增大的啊。比如增大到一定的程序就会导致服务器死机的啊。这个方法我觉得不可行。呵呵 我们是一个监控系统有好多的传感器,基本上每秒钟发送三次数据。数据量比较大
    不是一会日志就800+M了,而是发现日志文件已经800M了我才写这个程序想办法清空啊。但清空后几秒中后重新回到了原来数据的大小。所以我觉得是虚拟内存没有释放啊。现在还没有好的想法如何用Java清除虚拟内存的数据啊。大家给我点建议啊。