现在手头上的项目,需要对log文件进行解析,然后将结果显示给用户。
由于log文件最大可以到25000行,即10M左右,故一次性读入内存并解析的可用性很差(我自己做过试验,发现Tomcat在默认内存配置下读不完就出OutOfMemory错;在修改xms和xmx后,可以正常运行,可是速度奇慢,而且也不可能将25000行log显示在一页中)。
所以决定采取分块读入,逐块解析的办法(即先读入一部分,当用户需要后面的部分时,再进行读入和解析)。
我之前没有碰到过类似的处理情况(只做过页面分页),对具体的实现方式不是特别清楚,还望有过类似经验的牛人们多多指点
小弟在这里先谢过了
由于log文件最大可以到25000行,即10M左右,故一次性读入内存并解析的可用性很差(我自己做过试验,发现Tomcat在默认内存配置下读不完就出OutOfMemory错;在修改xms和xmx后,可以正常运行,可是速度奇慢,而且也不可能将25000行log显示在一页中)。
所以决定采取分块读入,逐块解析的办法(即先读入一部分,当用户需要后面的部分时,再进行读入和解析)。
我之前没有碰到过类似的处理情况(只做过页面分页),对具体的实现方式不是特别清楚,还望有过类似经验的牛人们多多指点
小弟在这里先谢过了
解决方案 »
- 本人新手,想问个swing的问题
- java里的数组,静态变量是在内存是怎么分配的?
- 如何在一个网站里既有asp页面,也有jsp页面
- 请教有关java写文件时 回车换行符不能正常显示的问题
- 这个程序为什么会抛出异常
- 在调试中出现 "row index out of change"?怎么解决?求助!
- 有关tree的简单问题....小弟在线等
- 重贴一下,应该不会太难吧?
- 起一个话题---从与外界的联系来说,方法应不应该保持独立??---大家进来谈一谈,up有分,两天内结贴!
- 关于用APPLET做地图的,大家一定看看帮忙!
- 怎样拦截Mail服务器上发出的Mail
- 关于getSourceActions()
static long readLog(String strPath , int lineNum){
RandomAccessFile myFile = null;
try{
myFile = new RandomAccessFile(strPath, "r");
myFile.seek(filePointer);
for (int i = 0 ;i< lineNum ; ++i){
String str = myFile.readLine();
System.out.println(str);
}
filePointer = myFile.getFilePointer();
} catch(Exception e){
}
return filePointer;
} public static void main(String[] args) throws Exception{
filePointer = readLog("c:\\cc.txt",2);//第一次读2行
System.out.println("_________________________");
filePointer = readLog("c:\\cc.txt",4);//接着上次,读4行
}
无论如何,十分感谢两位的帮助,一人20分,以表谢意。:)
如果可以缩小log大小的话,谁也不会愿意用内存分页这种费时费力的方法啊
catalina.bat中加入
JAVA_OPTS='-Xms256m -Xmx512m'或者是把日志读出来放到数据库里存储。在或者是你读这个大文件,然后自己生成几个临时小文件,然后再读小文件就是了。