WebLogic Server Hang产生的一般原因

来源:互联网 发布:java编程规范 pdf 编辑:程序博客网 时间:2024/05/21 08:00

系统内存不足
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放到另外的执行队列里去执行。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 身份证和户口都掉了怎么办 毕业生户口迁回原籍没身份证怎么办 落户上海后怎么办医保卡 小车临时牌过期了怎么办 驾驶证地址错了一个字怎么办 驾驶证名下车辆有违章怎么办 a2如果扣12分怎么办 b2一次超速12分怎么办 b2本扣了12分怎么办 驾照扣了27分怎么办 大车一次扣12分怎么办 a2驾照扣10分怎么办 驾驶证强制降级没给驾驶证怎么办 6P升11.2卡了怎么办 b2驾照记满12分怎么办 c1驾驶证没分了怎么办 驾照扣了15分怎么办 驾驶证暂扣六个月后怎么办 醉驾交警不通知怎么办 参军后地方驾驶证年审怎么办 军人驾驶证到期身份证注销了怎么办 资格证脱审30天怎么办 驾驶证c证扣6分怎么办 驾照被扣了9分怎么办 驾驶证被扣了9分怎么办 a2驾驶本扣3分怎么办 c1e没过扣了满分怎么办 c1一下扣12分怎么办 换证体检过不了怎么办 唐山驾驶本到期换本怎么办 北京居住证变更地址了怎么办 眼睛弱视驾驶证换证不了怎么办? 驾照的分扣完了怎么办 驾照被扣了3分怎么办 交警扣了行驶证怎么办 报考驾照时手机号录错怎么办 摩托车被交警队拖走怎么办 汽车牌照被偷了怎么办 代理品牌个体工商营业证怎么办 2地交社保怎么办退休 驾驶证脱审3月怎么办