应用程序运行一段时间就会卡,然后导致服务死掉,困扰许久不能解决,求助。

kingssq 2009-03-05 06:39:10
硬件信息:
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 错误。

...全文
430 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingssq 2009-03-12
  • 打赏
  • 举报
回复
问题已经解决,来结贴了。
通过weblogic控制台看java堆内存,竟然只有256M,不管我怎么改domain里面的配置文件,它怎么都不变,很是郁闷。
后来突然想到,我们的服务器环境是通过注册windows服务用两台机器做双机,会不会是这里有问题?后来打开一看,罪魁祸首果然就是oracle的服务器注册程序:installSvc。打开,里面对java的内存设置读取的是wlserver/common/bin/setEnv(具体文件名可能不准确,不记得了,现在也难得去看了,如果是oracle10,第一个文件就是了)文件,里面设置了java内存,我一看,正是256M,改为1.5G,现在已过了24小时,系统运行良好。
ahhshan 2009-03-09
  • 打赏
  • 举报
回复
友情up
zjcxy3150 2009-03-09
  • 打赏
  • 举报
回复
安装你说的话,200用户不存在什么问题,你修改配置已经够使用了,看看你的代码,和对数据库的操作是否没有关闭,是不是使用了数据库连接池来处理你的问题。java内存泄露一般情况很少哦,你应该检查你对数据库的操作在获得连接后是否已经关闭了。
老紫竹 2009-03-08
  • 打赏
  • 举报
回复
并行用户200人左右?

打开JVM的监控,比如jconsole

1 看看连接数吧。
我怀疑你你的程序建立了连接,却忘记归还了。而且从时间看,很可能是某个不常用的程序引起的

2 看看内存使用情况

200人,不少了哦。真的是并行吗?
dawn023 2009-03-08
  • 打赏
  • 举报
回复
这种问题一般原因如下几种:
1、程序的内存泄漏
2、数据库操作SQL性能不佳
3、数据库查询次数太多,有很多不必要的查询语句,就是事情多做了。
可以用一些性能分析工具检查一下。
kingssq 2009-03-06
  • 打赏
  • 举报
回复
哦,那个1/4好像是默认内存,估计是另外一个域占用的内存导致启动不了的。
多谢,我试试吧。
lzheng2001 2009-03-06
  • 打赏
  • 举报
回复
最大只能配到物理内存的1/4的.
=========================
这个可没听说过,我用tomcat 在linux vm下跑 2g 内存 就用了 -Xms512m -Xmx1024m 这个参数. 是不是你有其它应用要占用固定的内存?
我以前有一个项目jvm 内存参数不够时老是出OutOfMemoryError, 运行也慢, 后来改大参数就没事了,什么都不用干. 所以我估计你的情况可能也一样,你的项目同时在线的人比我的更多啦.
kokobox 2009-03-06
  • 打赏
  • 举报
回复
都是你一个人发的????发两个还不如发一个高分贴。比较有吸引力

java.lang.OutOfMemoryError: nativeGetNewTLA

应该是并发数过大 导致内存溢出,你的内存太小了,才4G,最好加到16G,或者更高。

在加内存之前在服务器上改一下最大连接数设置,在apache里配置也可以。

kingssq 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lzheng2001 的回复:]
既然内存有4g 你可以再调大参数 -Xms512m -Xmx1024m 再改大一倍.

java 对内存要求很高的, 内存不足的情况下性能很低, 而且会有 OutOfMemoryError 错误.
[/Quote]
最大只能配到物理内存的1/4的.

[Quote=引用 3 楼 cky417 的回复:]
我们也遇到过这种情况,很大原因是由于程序设计得不好,比如没有释放内存(垃圾自动收集太慢),没有显式关掉没用的数据库连接等...原因很多
[/Quote]
请教如何释放内存,加快垃圾回收?数据库连接,我们用了一个filter来关闭连接的。
dawn023 2009-03-06
  • 打赏
  • 举报
回复
一般都是代码导致的,再说一般测试环境也没有这么大的负载,建议检查一下代码。
cky417 2009-03-05
  • 打赏
  • 举报
回复
我们也遇到过这种情况,很大原因是由于程序设计得不好,比如没有释放内存(垃圾自动收集太慢),没有显式关掉没用的数据库连接等...原因很多
lzheng2001 2009-03-05
  • 打赏
  • 举报
回复
对于你的情况可能加大使用内存的参数就可以解决,如果加大后,仍然会慢或有OutOfMemoryError 错误,则需要检查一下你的代码有没有长时间占用内存而不释放情况,比如是否把大内存的对象放在session内, 是否长期引用某些对象不释放等
lzheng2001 2009-03-05
  • 打赏
  • 举报
回复
既然内存有4g 你可以再调大参数 -Xms512m -Xmx1024m 再改大一倍.

java 对内存要求很高的, 内存不足的情况下性能很低, 而且会有 OutOfMemoryError 错误.

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧