我现在有一个Java EE项目,部署环境是:
应用服务器:
CPU : Xeon(CPU) E7-4750 X2 32核
内存:32G
硬盘:SSD500G
操作系统:Windows Server 2012 Standand R2
Web中间键:Weblogic 11 (10.3.6)
数据库服务器:
CPU : Xeon(CPU) E7-4750 X2 32核
内存:32G
硬盘:SSD500G
操作系统:Windows Server 2012 Standand R2
数据库:Oralce 11G
现在用JMeter 做压力测试 ,强并发 300人,响应时间 平均21秒,最小值216毫秒,最大值 47秒,奇怪的是 应用、数据库 服务器CPU 使用率均低于 10%(5%-8%之间),我们对系统 做了如下优化:
修改了Windows 的注册表:
MaxUserPort=65534
TcpTimeedWaitDelay=30
关闭了CPU“归位”
Weblogic 调整:
内存增长到4G
线程数 增加大到 1000个
数据库连接池,1000,1000,2000
Oralce 调整:
内存增加到8G
线程数 增加大到 1000个
Session 增加大到 1000个
调整后,再进行压力测试,服务器 CPU 仍然使用率 小于 10%。 将 Weblogic 换成 Tomcat 后,问题差不多,没有明鲜改善。
提示一下:5年前,处理过此类问题,就是把 应用服务器 的操作系统 换成 Windows Sever 2012 企业版,问题就解决。
但当前客户只有标准版本授权,不能更换操作系统。求各位大神帮忙,如何解决此问题,万分感谢。
找到程序的热区(运算耗时最大的地方)
尽量将程序改写成能并行执行的
数据库少用事务,用细粒度锁,多线程代码少同步。
另外,关闭CPU的超线程功能,在CPU占用率低的时候,可以提高性能。