由于客户要求,在一页上显示了大概260多张图片,每张大概30K,网页打开速度很慢。而且经常出现内存溢出,每天都要重启一次服务器,源代码里面的数据库不是很合理,效率不高。
我想问问大家,这个跟页面显示那么多图片有关系吗?

解决方案 »

  1.   

    没关系,图片又不加载到你的内存里面!找个工具看看,哪一步内存增加量大,试试:Jprofiler
      

  2.   

    没关系,图片又不加载到你的内存里面!找个工具看看,哪一步内存增加量大,试试:Jprofiler
      

  3.   

    不太会用测试工具,不过是部署在linux上的。我用命令查了一下。那个260张图片的页面,每访问一次,大概就掉4M左右的内存。我在想这跟数据库事务没啥关系吧。我用的是spring管理事务。没有错误信息。。就是每隔一天 tomcat就挂掉了。日志里面是就是内存溢出异常。
      

  4.   


    补充:图片显示方式就是从数据库拿到list 然后前台用jstl的《c:foreach  然后把对象中的链接属性拿出来放到《img scr 里面。这问仁兄可否说清楚点,小弟对这块不是很了解。给个例子呢可否?
      

  5.   

    我也是这样做的啊 数据库只存个图片url 取就取这个扔到list迭代  
    楼主这种情况没遇到过 把TOMCAT内存加大些试试
      

  6.   

    Tomcat的配置问题,260张图片只要配置好了不会出问题的!
      

  7.   

    两个建议:
    1.查看具体内存溢出的情况,是哪个段溢出,tomcat有很多段默认设置不是很好,用在稍大的项目上就容易产生溢出,修改相应的内存段大小就好了。具体设置方法上网上搜一下“tomcat 内存设置”就有了。2.你用了260个连接字符串,默认的java内存本就不大,如果每个字符串内容在多一些,加上稍大的并发考虑,你的内存消耗也会比较大,建议先修改数据库中的内容,不存全部的url字符串,只存一个类似id的内容,让程序去拼url,可以的话,可以直接用静态类缓冲了这些图片地址,使得多个并发之间不产生新的对象,就不会加大程序的内存使用了。
      

  8.   

    HTTP:超文本传输协议(Hypertext Transfer Protocol),说白了就是文件下载,只是协议规范不同于FTP协议;
    服务器发HTTP报文,显然需要先拼HTTP包,这样图片文件不就在内存中了,不同的实现只是在策略上有差异,比如何时加载图片。
    内存益处的问题,建议用Jprofiler检测,否则猜也没用。
    “就是每隔一天 tomcat就挂掉了。日志里面是就是内存溢出异常。”,从这句话感觉,内存是时间的递增函数,就个人认为,内存益处的原因不在于图片,否则即使是小并发量,你那系统也撑不住。但像你这样的策略,显然也是差劲至极的,系统崩溃也是迟早的事情。
      

  9.   

    哇,今天上来一看居然被选为推荐帖了。给帖子加分。谢谢大家的帮助,我这就去试试。我没吧图片放缓存里。。2.你用了260个连接字符串,默认的java内存本就不大,如果每个字符串内容在多一些,加上稍大的并发考虑,你的内存消耗也会比较大,建议先修改数据库中的内容,不存全部的url字符串,只存一个类似id的内容,让程序去拼url,可以的话,可以直接用静态类缓冲了这些图片地址,使得多个并发之间不产生新的对象,就不会加大程序的内存使用了。这个有些高深,能否详细指点一下,如何用静态类缓冲“就是每隔一天 tomcat就挂掉了。日志里面是就是内存溢出异常。”,从这句话感觉,内存是时间的递增函数,就个人认为,内存益处的原因不在于图片,否则即使是小并发量,你那系统也撑不住。但像你这样的策略,显然也是差劲至极的,系统崩溃也是迟早的事情。这个。您指的策略是。?
      

  10.   

    1张图片的请求就是一次HTTP请求,一次页面浏览就有:260次/用户 次请求,那如果乘上并发用户数是什么概念?我过去也设计过类型项目,当然和你那个项目有差别,至少没那么变态:需要将图片一次全都展现。1.客户不让图片分页显示,那就选个变向的分页显示方案:客户端延时加载图片文件,当滚动条滚动时,下载对应需要显示的图片(当然下载完就别重复下载了);当然可以设计不同的客户端策略,来减少无用的图片下载.
    2.建议合理运用HTTP协议,从HTTP协议出发,优化自己的方案:例如:配置cache-control,降低用户重复请求数量,从而降低不必要的系统开销.对了API
    3.建议使用缓存,由于1年多没开发web项目了,类似的解决方案也有点淡忘,但记得类似项目的压力测试阶段,得到的测试报告显示:带缓存的效果明显优于不带缓存。JSP页面会编译成Servlet,然后运行;但图片、html文件,同样也是通过Servlet,向外输出的,只是用了JDK默认的Servlet,同时这个Servlet没有任何优化策略。就说到这了,对了,上次回帖有点过激,实在抱歉
      

  11.   

    用ajax 分步取不知道怎么样