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

关于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.把用户常常访问的数据进行水平切割到多张表中。

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形