当前位置: 首页 > web >正文

WebLogic Server Hang产生的一般原因

系统内存不足
l 系统CPU忙,系统文件描述符数目不足,线程死锁,JVM 有 GC方面的bug,对于一些特定的情况可以使用truss命令跟踪系统调用来进行分析。可以打开JVM的gc log,在java命令行上加上-verbose:gc,GC的log输出在java进程的标准输出里,在hp的JVM上,可以通过在java命令行上加 -Xverbosegc:file=gcfilename来将gc log写到指定的文件其输出类似:[GC 15639K->13700K(65280K), 0.0068439 secs]。解决办法是调整JVM的内存设置和gc算法,升级jvm或是os patch。

l 出现OutOfMemoryError 或是观察到内存吃紧,操作系统本身的剩余内存,通过top或是vmstat观察,操作系统的swap区,Swap区太小可能导致编译 jsp时报“Not enough space”的错,操作系统kernel参数中maxsize的大小,如果观测到数据库 连接池里的连接泄漏,极可能是内存泄漏的先兆

l JVM的heap区大小,通过java命令行中的-Xms,-Xmx指定,建议最小值和最大值设成一样,可以通过WebLogic consoleserver /monitor /performance来观察其使用情况,建议生产系统最256M,一般情况下可以设置为系统剩余物理内存的80%,Heap size太大在一些JVM上会有问题,对于sun和hp的JVM,permanent size太小也会出OutOfMemoryError,在java命令行上加-XX:MaxPermSize=128m

l 尽量减少内存消耗,Session中不要放大的数据,并尽量在不再需要的时候remove掉,如果可以调整session timeout到较小的值,避免在J2EE server端应用 里边调用AWT/swing作图,调整ejb的cache/pool设置

l 内存泄漏,可以通过WebLogic console来观察JVM的heap memory使用情况来获知是否有内存泄漏情况,采用第三方辅助工具来获取更详细信息,如Jprobe/OptimizeIt;有可能是weblogic 的bug,但绝大部分情况是由用户的应用引起的,最常见的代码问题是数据库连接没正常关闭。



系统CPU忙
l 如果用户访问量很大,CPU占用很高(user态)并不是异常

l 如果是kernel态很多,需要OS厂商调整操作系统

l 采用top找到占用CPU很多的进程,如果是非weblogic进程,应该考虑将其移到另外的server上运行,如果是运行weblogic的java 进程,通过做thread dump(详细信息后边会介绍到)来确认是那段代码导致了这么高的CPU使用(也有可能是os/jvm本身不正常)

系统文件描述符数目不足
Log中有“too many open files”的错误,表示达到了系统对一个进程能同时打开的文件数的限制:

l ulimit –a –H 可以查看当前限制

l ulimit –n number可以来更改当前环境的设置,建议至少设到4096

l Solaris上可以通过/usr/proc/bin/pfiles pid来查看指定进程的限制和当前使用的file descriptor数目

l Solaris上root用户可以通过/usr/proc/bin/plimit -n soft,hard pid 来动态更改进程的文件描述符的限制

线程死锁
对于原因不明的hang或是响应慢,最根本的方法就是获取thread dump信息,对于windows系统,在运行java的窗口按Ctrl+Break,对于UNIX系统,首先用ps找到运行weblogic的java 进程的pid,然后执行kill –3 pid,JVM将负责将所有java进程的状态、执行堆栈dump到其标准输出,为了方便获取thread dump信息,在weblogic启动 的时候,最好将其标准输出重定向到一个文件,为了反映线程状态的动态变化,需要接连多次做thread dump,每次间隔10-20s。



对于thread dump信息,主要关注的是线程的状态和其执行堆栈,线程的状态一般为三类

l Runnable(R):当前可以运行的线程

l Waiting on monitor(CW):线程主动wait

l Waiting for monitor entry(MW):线程等锁

一般关注的都是第一和第三种状态的线程
CPU很忙则关注runnable的线程
CPU闲则关注waiting for monitor entry的线程
一种典型的死锁是由于在server端应用(比如servlet)中请求由同一weblogic实例serve的资源,解决办法就是将该servlet放到另外的执行队列里去执行。

http://www.xdnf.cn/news/11019.html

相关文章:

  • 安卓逆向 -- 自吐算法(MD5和SHA)
  • 白帽,黑帽,灰帽,绿帽!一文让你搞懂所有黑客!
  • 在Linux上安装QQ_qqlinux版本
  • Egret那些事儿(学习教程)
  • 大篆汉字对照表_甲骨文汉字对照表大全_甲骨文数字象形字对照图
  • Java中StringBuilder的用法
  • 电脑安装原版Windows7详细教程
  • django基于Web的网上书城系统(程序+开题报告)
  • 移动叔叔MT6573一键ROOT工具!适应所有android2.2/2.3以上系统
  • Command命令详解
  • 国内制氧机十大排名分析-鱼跃、亚适、新松、欧格斯....
  • 在.NET Core中使用MachineKey
  • 5个高质量的自学网站,每天坚持一小时,让你受益一生!
  • [STM32]WIN7 64位系统 CDC类 虚拟串口驱动无法安装的解决办法
  • 用户登录.html_河南省中小学教师继续教育管理系统登录入口http://47.92.44.63:89/
  • 出海竞争加剧,全球头部秀场直播平台LiveMe如何应对新挑战?
  • 局域网断网攻击
  • 【unity实战】unity3D中的PRG库存系统和换装系统(附项目源码)
  • Vue.js的详细入门教程①
  • Anti Arp Sniffer ARP病毒专杀工具
  • 测试网络连接速度 http://www.phoenixtv.com.cn/home/fhkp/testspeed.htm
  • 笔记本电脑怎么连接无线网wifi?3个秘籍,一键上网无烦恼
  • python代码查看工具_Python 常用静态代码检查工具简介
  • 使用 Edit + MASM 5.0 编译器 + Linker 连接器
  • Informix 常用函数一
  • 体验MyIE2强大功能 网际畅游应用技巧集锦
  • 二狗叫你制作千M网线的线序及方法
  • 程序设计导引及在线实践之麦森数
  • 小孩学计算机技术有什么好处,儿童学习电脑的好处
  • php怎么做一个音乐播放器,实现一个HTML5音乐播放器的实例