最近用SSH2 框架做了一文件管理系统放在tomcat6.0 上,实现的是用户文件查询下载功能。每次每个用户将查询出来的几百条记录文件在tomcat里面打包成压缩文件。再下载,估计 几十MB 大小,用户人数是4-5 人而已。结果发现内存使用是不断的上升,到设置的最大点后,tomcat就没有响应了。个人怀疑:tomcat 内存没有回收。希望各位高手帮助解决

解决方案 »

  1.   

    几百条记录文件在tomcat里面打包成压缩文件
    每次都生成不一样的压缩包吗?
    让它只生成一个就好了撒(名字固定)
      

  2.   

    java会自动gc的,咱们都控制不了。内存溢出通过http://hi.baidu.com/tiger560/blog/item/498e72893ab69cb70e24444b.html试试吧。我觉得问题会在zip压缩那块,用工具检测一下内存吧。比如jdk自带的jvisualvm.exe
      

  3.   


    支持,换一个Tomcat试一试!
      

  4.   

    最大的可能是您自己的程序没有释放没有用的对象,导致memory leak。
    所以最好是查程序,否则换个版本的Tomcat也没有用。
      

  5.   

    不是内存么有收回,是内存溢出了,因为你的需要的内存太大,而tomcate的不够,所以还没有到该收的时候已经溢出了。
      

  6.   

    jprofile看看到底是何对象或何输入输出流占用内存了
      

  7.   

    是你程序 运行时 开销太大 tomcat的内存就那么多 而你的对象有在增长 内存当然不够了
      

  8.   

    还是你程序的问题跟tomcat没关系,内存是否回收是jvm的事情。检查一下程序吧
      

  9.   

    没法去控制JVM的内存回收。
    查查你的文件是否关闭,其他资源是否在用完后被释放。
      

  10.   

    以解决:win 版的TOMCAT 如果去设置Java 内存使用mix max 是就会有问题重新安装
      

  11.   

    不断上升应该是vm需要使用的内存越来越多,从而在不断划分系统内存供自己使用所导致的。压缩/解压缩这样的程序,对于java来说...
    我没有具体项目经验,但是感觉对于java来说只是可以用。
    如果IO访问内容过大,还是很容易出错的,比如OutOfMemoryException。所以,
    如果需求固定,可以用jni写一个专门压缩文件的程序,在java程序中调用。
    或者直接调用系统命令,比如gzip什么的,把需要压缩的文件当作参数组合成一个命令行good luck