有一个文本文件比如叫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文件跟虚拟缓存还有什么关联么?应该不是放在物理内存里的。各位给我个建议啊,如何将该文件里的内容清空?
由于大量的日志数据导致log.txt会越来越大。Windows的“右键删除”不能够删除该log.txt文件,会提示“该文件正在被另一个程序使用”。因为P1进程的存在所以不能删除。但每次重新启动服务器后该文件自动清空为0。现在不能由于要清除该日志文件不能每次都重新启动服务器。
也不能因为要清除该log.txt日志文件来终止P1进程。我曾尝试写了一个程序向log.txt文件写入一个空字符,的确该文件比如从800多M变成了0字节,但过了几秒钟后该文件自动变回成800多M。我的神啊,是不是该log.txt文件跟虚拟缓存还有什么关联么?应该不是放在物理内存里的。各位给我个建议啊,如何将该文件里的内容清空?
一会就800++M了我们的系统搞了一年也才200++M
日志会有那么大吗?!当你对log.txt进行写操作的时候 P1也在不停的对它进行读写操作
很可能是你操作完后 P1还在对它操作 没有释放内存
过一会操作完了就自然变回原来的800++M了
不过,感觉如果能修改进程P1的实现的话,问题会容易点吧。如果log.txt不是很重要,它没必要一直打开吧,毕竟错误是少数;如果很重要,应该有防止文件过大的策略,毕竟操作这么大的文件,开销也不少
2.P1进程不能停的啊^_^,如果停了正常数据也不能存储了啊^_^。
比如是
try
{
//正常存储
}
catch(Exception ex)
{
//异常日志记录
}
3.我当时也想过定时删除,比如发现它是5秒变回原来的数据大小,那么我就定时3秒就删除一次。表面上改日志文件是0字节。但我觉得其实虚拟内存还是在继续增大的啊。比如增大到一定的程序就会导致服务器死机的啊。这个方法我觉得不可行。呵呵 我们是一个监控系统有好多的传感器,基本上每秒钟发送三次数据。数据量比较大
不是一会日志就800+M了,而是发现日志文件已经800M了我才写这个程序想办法清空啊。但清空后几秒中后重新回到了原来数据的大小。所以我觉得是虚拟内存没有释放啊。现在还没有好的想法如何用Java清除虚拟内存的数据啊。大家给我点建议啊。