资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,2004 BEA Systems,Inc.,Strictly Confidential!,Troubleshooting,BEA Systems(China),内容,WLS,系统架构,WLS Hang,WLS Crash(Core dump),常见的程序异常,WLS,系统架构,WLS,WebLogic Server,是一个纯,java,应用,上层应用的稳定性和其下层的支撑系统紧密相关,WLS,的请求处理,Request,与,WLS Execute Queue,处理,WLS,问题的技巧,Troubleshooting,基本技巧,了解相关的应用环境,操作系统的版本和,patch,TCP/IP,参数的设定,JDK,版本及其设置,WLS,版本及其设置,(config.xml),数据库连接的设置,服务与应用组件的部署,建立可重现问题的环境,不要在,porduction,系统上测试,查看操作系统,JVM,WLS Admin console,资料和,Logs,借助工具找出真正问题,通常应用程序所造成的问题较多,但调整产品比较容易,Debug flag,-Dweblogic.kernel.debug=true,-Dweblogic.StdoutDebugEnabled=true,-Dssl.debug=true,显示目前可用的,Debug flags,weblogic.Admin GET-pretty-type(ServerDebug|kernelDebug|JDBCConnectionPool),设定,Debug Flags,java weblogic.Admin-url t3:/cxu01:7001-username weblogic-password weblogic SET-mbean mydomain:Name=myserver,Server=myserver,Type=ServerDebug-property DebugSSL true,Debugging WebLogic Platform Internals,分析,log,Log,类型:,domain log:.log,或,weblogic.log,Server Log:.log,Http Log:access.log,standard output,相关的信息:,操作系统,,JDK,版本,,WLS,版本与,patch,环境变量,如,classpath,启动参数,(java options,system properties,wls properties.),debug,信息,注意,error,与,warning,wls,监控的信息,open Sockets,open Connections,http Sessioins,的数目,Primary-Secondary Distribution,Idle Threads,数目,Execute Queue,中,Pending Requests,Transactions,Jms Destinations,中,pending Messages,以下资源的等待者,JDBC,JOLT,与其他资源的,connection pools,EJBs,Java,与,WLS,的工具,JVM,GC:java verbosegc,jvmstat,JRocikt Management console,与,API,WLS,weblogic.Admin,Tools and Utilities,WLShell,WLS Console Extension,第三方工具,Jprobe,OptimizeIT,Load Runner,Introscope,分析问题思路,检查系统状态,确保运行于已认证平台,确保正确的,JDK,版本及相关补丁,检查列表中已有平台的,bug,及解决方案,确保操作系统相关参数,尤其是,TCP,参数建议设置,Config.xml,应用部署描述文件,Server,domain,http,JDBC,等,log,信息,WLS Console,上的监控信息,操作系统的监控信息,ps/top/vmstat/iostat/dbx/gdb,分析问题思路,打开跟踪调试信息,设置日志级别到,debug,在,config.xml,中设置,ServerDebug,相关选项,DebugHttp,DebugEjb,DebugCluster,DebugJMSStore,等待,thread dump,多次,间隔,1020,秒,分析线程状态,排除死锁,WLS Hang,Hang,Hang,即通常所说的挂起,运行,WebLogic,的,java,进程还存在,WebLogic,不响应请求,WebLogic,处理请求很慢(,sluggish,原则上并不属于,hang,,但其解决办法同挂起基本类似),确认,JVM,不是忙着,GC,Hang,的原因,Hang,产生的原因一般为:,系统内存不足,系统,cpu,忙,系统文件描述符数目不足,WLS Execute Thread,或,Socket Reader Thread,不足,线程死锁,JVM,有,GC,方面的问题或是,bug,对于一些特定的情况可以使用,truss,命令跟踪系统调用来进行分析,(,一般通过,thread dump,就够了,),Hang-,系统内存不足,系统内存不足,出现,OutOfMemoryError,或是观察到内存吃紧,操作系统本身的剩余内存,通过,top,或是,vmstat,观察,操作系统的,swap,区,Swap,区太小可能导致编译,jsp,时报“,Not enough space”,的错,操作系统,kernel,参数中,maxdsiz,的大小,如果观测到数据库连接池里的,Connection Leak,,极可能是内存泄漏的先兆,Hang-,系统内存不足,JVM,的,heap,区大小,通过,java,命令行中的,-Xms,-Xmx,指定,建议最小值和最大值设成一样,可以通过,weblogicconsole,上,server/monitor/performance,来观察其使用情况,建议生产系统最少,256M,,一般情况下可以设置为系统剩余物理内存的,80,Heap size,太大在一些,jvm,上会有问题,对于,sun,和,hp,的,jvm,,,permanent size,太小也会出,OutOfMemoryError,在,java,命令行上加,-XX:MaxPermSize=128m,Hang-,系统内存不足,内存泄漏,可以通过,weblogic console,来观察,jvm,的,heap memory,使用情况来获知是否有内存泄漏情况,采用第三方辅助工具,(Jprobe/,Optimizeit,),来获取更详细信息,有可能是,weblogic,的,bug,,但绝大部分情况是由用户的应用引起的,最常见的代码问题是数据库连接没正常关闭,JDBC Connection Leak,连接泄漏产生的原因,没有正确释放,JDBC,资源,在,jsp,中发生页面跳转,(,如,errorPage),,没有关闭连接,连接泄漏的检测,检测数据库超长时间的,session,设置,Connection Leak Profiling,选项,使用,P6Spy,工具,解决办法,设置,InactiveConnectionTimeoutSeconds,时间,(,只是临时的办法,),修改程序问题,JDBC,程序范例,Hang-,系统内存不足,尽量减少内存消耗,Session,中不要放大的数据,并尽量在不再需要的时候,remove,掉;如果可以调整,session timeout,到较小的值,避免在,J2EE server,端应用里边调用,awt/swing,作图,调整,ejb,的,cache/pool,设置,Hang-,系统,cpu,忙,系统,cpu,忙,如果用户访问量很大,,cpu,占用很高(,user,态)并不是异常,如果是,kernel,态很多,需要,OS,厂商调整操作系统,采用,top,找到占用,cpu,很多的进程,如果是非,weblogic,进程,应该考虑将其移到另外的,server,上运行。如果是运行,weblogic,的,java,进程,通过做,thread dump,来确认是那段代码导致了这么高的,cpu,使用(也有可能是,os/jvm,本身不正常,此时可用,truss,命令跟踪),Hang-,系统文件描述符数目不足,系统文件描述符数目不足,文件描述符表示达到了系统对一个进程能同时打开的文件数的限制,Log,中有“,too many open files”,的错误,ulimita H,可以查看当前限制,ulimitn number,可以来更改当前环境的设置,建议至少设到,4096,Solaris,上可以通过,/usr/proc/bin/pfilespid,来查看指定进程的限制和当前使用的,file descriptor,数目,Solaris,上,root,用户可以通过,/usr/proc/bin/plimit-n soft,hardpid,来动态更改进程的文件描述符的限制,Hang-Execute Thread,或,Socket Reader Thread,不足,Execute Thread,不足,Queue Length,不断增长,未被处理,通过,thread dump,确认,wls,是不是很忙,确认有没有死锁,调整,ExecuteQueue,大小,Socket Reader Thread,不足,还有空闲的,Execute thread,,但,WLS,没响应,确认有没有死锁,调整,Socket reader,的数目,Hang-,线程死锁,thread dump,对于原因不明的,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,Hang-,线程死锁,线程死锁,对于,thread dump,信息,主要关注的是线程的状态和其执行堆栈,线程的状态一般为三类,Runnable,Waiting on monitor,(,CW,),Waiting for monitor entry,(,MW,),一般关注的都是第一和第三种状态的线程,Cpu,很忙则关注,runnable,的线程,Cpu,闲则关注,waiting for monitor entry,的线程,一种典型的死锁是由于在,server,端应用(比如,servlet,)中请求由同一,weblogic,实例,serve,的资源,解决办法就是将该,servlet,放到另外的执行队列里去执行,Hang-JVM GC,怀疑,JVM,一直在,GC,打开,jvm,的,gclog,在,java,命令行上加上,-verbose:gc,GC,的,log,输出在,java,进程的标准输出里,在,hp,的,jvm,上,可以通过在,java,命令行上加,-Xverbosegc:file=gcfilename,来将,gclog,写到指定的文件,解决方法:,调整,jvm,的,heap,设置和,gc,算法,升级,jvm,或是,ospatch,Hang-JVM GC,怀疑,JVM,一直在,Full GC(System.gc(),打开,JVM,的,GC log,-verbosegc,-XX:+PrintGCDetails,-XX:+PrintGCTimeStamps,-XX:+PrintTenuringDistribution,-XX:+PrintHeapAtGC,解决方法:,调整,jvm,的,heap,设置和,gc,算法,升级,jvm,或是,ospatch,-XX:DisableExplicitGc,WLS,消失或终止,检查是否有人为结束,WLS,检查,WLS,启动目录是否产生,Core,文件,检查程序中是否有,System.exit(),WLS Crash,Crash,Crash,即通常所说的当机,运行,WebLogic,的,java,进程已经异常退出,WLS Crash,的原因,WLS core,的原因,OutOfMemory,JNI,代码,Jvm,的,bug,Os,的,bug,Crash-OutOfMemory,OutOfMemory,Jvm,一旦发生,OutOfMemory,的,error,,其行为将不再稳定,“,too many open files”,也可能导致,jvm,不稳定,Crash-OutOfMemory,操作系统生成的,core,文件,一般在当前目录下,采用,gdb,、,dbx,等,debug,工具来打开,core,文件,gdb/usr/java/bin/sparc/native_threads/java core,使用,where,和,bt,命令来获取退出时的堆栈信息,在,windows,平台上,可以通过,Dr.Watson,(,WINNTsystem32DRWTSN32.EXE,)来查看其日志,Crash-OutOfMemory,JVM,生成的,java core,文件,一般在,$WEBLOGIC_HOME,下,Sun,和,hp,的,jvm,生成的是一个以,hs_err_pid,开头的,log,文件,Ibm,的,jvm,生成的是一个以,javacore,开头的,txt,文件,其中会显示导致退出的函数名,库文件名和当前的执行堆栈,如果其中函数名,/,库文件名为未知,则多半是从,jit,编译后的,java,代码中退出的,Crash-JNI,代码,JNI,代码,关闭,weblogic,的,nativeIO,nativeIO,是指,weblogic,为了提高性能而采用的一部分,jni,代码,通过,weblogicconsole,上的,server/configuration/tuning,来设置,默认为,enabled,更换,type2,的,jdbcdriver,(比如将,oracleocidriver/weblogic jdriverfor oracle,替换为,oracle thin driver,),检查使用的第三方,api,里边有没有,jni,代码,检查自己的应用里边有没有,jni,代码,Crash-JVM,的,bug,JVM,的,bug,换用不同小版本的,jvm,更改,jvm,的,jit,引擎(,client/server,),关闭,jit,,改用纯解释执行模式,对于,Sun,和,hp,的,jvm,,在,java,命令行上加上,-XintXfuture,对于,ibm,的,jvm,,在,java,命令行上加上,-Dpiler=NONE,指定,jvm,忽略系统信号,在,java,命令行上加上,-Xrs,设置恰当的,stack size,在,java,命令行上加上,-Xss,指定。,Stack size,过小可能会有,stack overflow,Stack size,过大可能会出“,unable to create native thread”,的错误,Crash-OS,的,bug,OS,的,bug,JVM,厂商明确指出要求的,ospatch,必须打上,按照,bea edocs,文档调整,os,的,kernel,参数,尽量升级,os,到较高的,patch level,常见的程序异常,java.lang.NoClassDefFoundError,程序调用到的,Java,类文件没有找到,Classpath,设置,对于包含,.class,文件的,.zip,或,.jar,文件,路径以,.zip,或,.jar,文件名结尾,对于未命名包中的,.class,文件,路径以包含,.class,文件的目录结尾,对于已命名包中的,.class,文件,路径以包含“,root”,包(完整包名中的第一个包)的目录结尾。,java.lang.NullPointerException,空指针异常主要跟与对象的操作相关,为了确保进行操作或引用的对象非空,对某对象进行操作或引用,首先需要检查该对象是否已经实例化且不为空;并且在系统中加入针对对象为空时情况的处理,对象为空时,设置对象值为空字符串或一个默认值,对象为空时,根本不执行某操作,直接跳转到其他处理中,对象为空时,提示用户操作错误,java.lang.NumberFormatException,在任何用到字符串转化为数字时,捕捉异常,对异常情况进行处理,检查到异常发生,即赋给某变量一个默认值,检查到异常发生,提示用户使用正确的数字格式输入,java.lang.StringIndexOutOfBoundsException,对字符串进行截取,(substring,charAt),、转换为字节数组,(getBytes),,字符数组转换为字符串(,valueOf,)操作时,先对操作字符串对象的存在性(是否为空)及长度进行检查后,再进行操作。,java.lang.Error,造成,java.lang.Error,的原因,对系统所访问外部资源,未执行关闭操作,导致外部资源大量浪费,最终可能导致系统无法正常运行;,对系统所访问的外部资源关闭次数太多,外部系统无法正常处理;,系统访问的外部资源出现异常情况,解决方案,访问外部资源前,首先检查该资源,(,如数据库,),是否可正常连接或操作。,访问外部资源时,如果进行了连接,一定进行关闭操作,并仅进行一次关闭操作。,尽量在同一操作中共享外部资源,以减少该操作对资源的消费,提高程序的执行效率。,Troubleshooting Jsp&Servlet,Error 404Not Found,Check that you have typed the URL of the JSP file correctly,and that it is relative to the root directory of your Web Application,Error 500Internal Server Error,Check the WebLogic Server log file for error messages.This error usually indicates a ClasssNotFound exception has occured during JSP compilation.,Error 503Service Unavailable,Indicates that WebLogic Server cannot find the compiler it requires to compile your JSPs,Errors Using the tag,If you use the tag in your JSP and the applet fails to load,carefully check the syntax of the tag.You can check for possible syntax errors by examining the generated HTML page.If you see jsp:plugin.anywhere in the page,the syntax of the tag is not correct,Troubleshooting JDBC,监控,JDBC,连接池,Waiters Hight,字段指明了最多有多少客户等待数据库连接,Waiters,字段告诉你当前有多少客户正在等待连接,Connections Hight,字段给出最大的并发连接数。,Wait Seconds Hight,字段显示了客户等待数据库连接的最长时间,Validating a DBMS Connection,Validating a DBMS Connection from the Command Line,java utils.dbping DBMS user password DB,Troubleshooting Cluster,Troubleshooting Cluster,Check for a Cluster License,Check the Server Version Numbers,Check the Multicast Address,Check the CLASSPATH Value,Check the Thread Count,Check Garbage Collection,Run utils.MulticastTest,检查启动脚本,Troubleshooting Applets,Troubleshooting Applets,Your tag must contain the CODE attribute,which specifies the full package name of the main applet class file.The extension.class at the end of the CODE is optional.For example,if you are working with the GraphApplet,your tag looks like this:,
展开阅读全文