硬件信息:
CUP: Intel X5450 3GHZ 8cpus
内存:4G
服务器:WINDOWS2003软件
应用服务器 WEBLOGIC10 
WEBLOGIC 堆配置 -Xms512m -Xmx1024m
SUN JDK1.5.06应用程序并行用户200人左右,系统在使用一段时间(几个小时到1天不等)后会导致应用服务器不稳定,有时候会很卡,偶尔能恢复,但最终过不了多久会停止响应。观察服务器的内存 和CUP占用并不太高,服务的后台日志没有什么特别致命的错误,最多的是socket write error connection reset by peer,这个错误很频繁,但上网搜索,此错误并不会影响业务。我们还有一个服务器,硬件和软件环境都相同,但用户较少,基本稳定,所以怀疑是用户量大导致。另外,偶尔服务停止有java.lang.OutOfMemoryError: nativeGetNewTLA 错误。

解决方案 »

  1.   

    既然内存有4g 你可以再调大参数  -Xms512m -Xmx1024m  再改大一倍.java 对内存要求很高的, 内存不足的情况下性能很低, 而且会有 OutOfMemoryError 错误.
      

  2.   

    对于你的情况可能加大使用内存的参数就可以解决,如果加大后,仍然会慢或有OutOfMemoryError 错误,则需要检查一下你的代码有没有长时间占用内存而不释放情况,比如是否把大内存的对象放在session内, 是否长期引用某些对象不释放等
      

  3.   

    最大只能配到物理内存的1/4的.请教如何释放内存,加快垃圾回收?数据库连接,我们用了一个filter来关闭连接的。
      

  4.   

    都是你一个人发的????发两个还不如发一个高分贴。比较有吸引力java.lang.OutOfMemoryError: nativeGetNewTLA应该是并发数过大 导致内存溢出,你的内存太小了,才4G,最好加到16G,或者更高。在加内存之前在服务器上改一下最大连接数设置,在apache里配置也可以。  
      

  5.   

    最大只能配到物理内存的1/4的.
    =========================
    这个可没听说过,我用tomcat 在linux vm下跑 2g 内存 就用了 -Xms512m -Xmx1024m  这个参数. 是不是你有其它应用要占用固定的内存?
    我以前有一个项目jvm 内存参数不够时老是出OutOfMemoryError, 运行也慢, 后来改大参数就没事了,什么都不用干. 所以我估计你的情况可能也一样,你的项目同时在线的人比我的更多啦. 
      

  6.   

    这种问题一般原因如下几种:
    1、程序的内存泄漏
    2、数据库操作SQL性能不佳
    3、数据库查询次数太多,有很多不必要的查询语句,就是事情多做了。
    可以用一些性能分析工具检查一下。
      

  7.   

    并行用户200人左右?打开JVM的监控,比如jconsole1 看看连接数吧。
    我怀疑你你的程序建立了连接,却忘记归还了。而且从时间看,很可能是某个不常用的程序引起的2 看看内存使用情况200人,不少了哦。真的是并行吗?
      

  8.   

    安装你说的话,200用户不存在什么问题,你修改配置已经够使用了,看看你的代码,和对数据库的操作是否没有关闭,是不是使用了数据库连接池来处理你的问题。java内存泄露一般情况很少哦,你应该检查你对数据库的操作在获得连接后是否已经关闭了。
      

  9.   

    问题已经解决,来结贴了。
    通过weblogic控制台看java堆内存,竟然只有256M,不管我怎么改domain里面的配置文件,它怎么都不变,很是郁闷。
    后来突然想到,我们的服务器环境是通过注册windows服务用两台机器做双机,会不会是这里有问题?后来打开一看,罪魁祸首果然就是oracle的服务器注册程序:installSvc。打开,里面对java的内存设置读取的是wlserver/common/bin/setEnv(具体文件名可能不准确,不记得了,现在也难得去看了,如果是oracle10,第一个文件就是了)文件,里面设置了java内存,我一看,正是256M,改为1.5G,现在已过了24小时,系统运行良好。