iteye_15896
2012-02-04 10:53
浏览 910
已采纳

关于Mysql + Hibernate (JPA)高并发的性能问题

最近在做系统性能调优的问题。大家帮我分析一下可能的瓶颈吧?谢谢各位了。
[b]先说一下我的测试环境:[/b]
App Server: Window 2008 Server + Tomcat 6 , 4 cpu core, 8G mem, 500Mbps, 最大连接4000,Accept 4000, 用了 APR connector。Heap Size 4G
DB Server: Window 2008 Server + Mysql 5.5, 4 cpu core, 8G mem, 500Mbps, 最大并发连接 1000, innodb, buffer pool 4G
JMeter client: Window 2008 Server + JMeter 5.1, 4 cpu core, 8G mem, 500Mbps
也许大家会建议我用Linux系统,我知道那样肯定会好一点。但是没有办法,公司就要求这样的平台。
[b]然后就是我的应用:[/b]
Spring MVC + Resteasy + HIbernate (JPA) + DBCP (连接池500) + 30多张表 
[b]看看我的Test Case:[/b]
用JMeter录制了用户访问我的应用的大多数功能。
并发数为1000, ramp-up时间为1000s,因为我的一个线程执行时间也差不多是1000s。所以用JMeter看下来可以达到1000个实际并发用户。case中80%的insert。插入的是30张不同的表。关联很少。我的调用都是rest服务调用。
[b]测试结果[/b]
访问数据库的service响应时间相当慢,在并发数上升到100的时候相应还挺快,大概500毫秒,一旦并发达到800的时候,相应时间可以达到30s。
[b]我的Monitor情况[/b]
App Server 和 DB Server的cpu都是小于10%,内存都只用了1G多,我配置了4G。
用YourKIT看下来的结果,有大量线程都block在了MySQLIO的read。是在block在prepareStatement的jdbc操作上。

请各位给点建议吧。谢谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • xuehua1987 2012-02-07 12:42
    已采纳

    软件设备上:
    1.给hibernate配置上一级和二级缓存
    2.给数据库中相关表的字段建立索引
    3.优化相关的查询语句

    在硬件上:
    1.提高机器的配置
    2.把数据库和运行环境分离到两个服务器上。
    3.把用户常常访问的数据进行水平切割到多张表中。

    访问速度问题会随着访问量的增加会越来越慢,你要找到导致这样问题的瓶颈。不断的去优化它,只考虑节约硬件成本是不行的。

    点赞 评论
  • ll89308839 2012-02-04 21:45

    hibernate使用缓存了没有呢

    点赞 评论

相关推荐 更多相似问题