浏览 526 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-03-11 关键字: weblogic
我们的项目已经上线了,采用的技术框架是JSF+Spring+Hibernate,上线之前用LoadRunner做压力测试,没有发现有什么性能问题。
系统的规模大概是10000人的在线人数,涉及到的主表共有100多个字段。 硬件环境是一台HP的PC Server,2CPU,4G内存, 软件环境是windows 2003Server,web服务器是Weblogic9.2,堆大小设置是1024M ,jdk用的是bea的jrockit R26.0,没有做cluster。 在上线测试期间,平均的在线人数在100人左右,服务器持续运行了2个星期,没有出现任何问题。 正式进入生产环境之后,在线人数维持在1000人-10000人之间,这时候发现问题了,在生产环境的压力之下,Weblogic几乎每4-5个小时就会报出java.lang.outofmemory error,我们找过了可能会产生此类错误的代码,包括数据库连接、hibernate等,没能定位问题。 现在非常着急,因为是已经上线的系统,客户非常着急每天都在催,我们也非常着急,但始终没能找到问题。我总结的潜在的原因有两个: 1. JSF的Session bean,我们配置的managed bean几乎都是session scope的,而这些bean很多都是存着大量表现层数据的,这些bean如果不能被GC及时回收,最终就会造成outofmemory error 2. Weblogic的问题,具体是什么问题就不知道了,也不认识weblogic方面的高手。....:) 请大家帮忙提一下解决方案了,谢谢:) 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-03-11
建议你少往session里堆东西
session不timeout或者不被invalidate,这些对象是无法被回收的 不要拿http session当cache用 |
|
| 返回顶楼 | |
|
时间:2008-04-02
从现象上看是内存泄露引起的,你需要监测一下系统的内存使用历史情况,看是不是随着时间在增长,还是运行某个节点的时候才忽然增长.
如果是随时间而增长,那么需要考虑程序中没有释放的内存了. 奇怪的是,你选用的架构下,使用weblogic有多大意义呢? 能够给你的系统提供那些帮助呢? 看看内存是不是被session吃掉了,计算一下每个用户要消耗多少内存资源. |
|
| 返回顶楼 | |
|
时间:2008-04-10
在线人数1000 - 10000,那一般并发请求有多少呢?如果平均每个用户30秒一个请求,每个请求平均处理1秒钟,则理论平均并发30 - 300。峰值则至少要到100 - 1000?
对于一般的应用程序来说,单个JVM我觉得很难达支持这个并发量! 建议做一个cluster,即使是同一台机器,启动多个instance处理能力会更高。除非有特殊的大内存的处理,一般256M的堆设置比较合适,大一点也只要512,多了性能并不好。 2CPU的话,一般4-6个JVM比较合适,而且还能启动一个Apache或者lightHttpd做前端,可以保持很好的性能和稳定性。 |
|
| 返回顶楼 | |
|
时间:2008-06-23
检查一下SQL?
|
|
| 返回顶楼 | |





