weblogic日常维护总结与故障诊断.docx

上传人:小飞机 文档编号:4926098 上传时间:2023-05-23 格式:DOCX 页数:21 大小:836.66KB
返回 下载 相关 举报
weblogic日常维护总结与故障诊断.docx_第1页
第1页 / 共21页
weblogic日常维护总结与故障诊断.docx_第2页
第2页 / 共21页
weblogic日常维护总结与故障诊断.docx_第3页
第3页 / 共21页
weblogic日常维护总结与故障诊断.docx_第4页
第4页 / 共21页
weblogic日常维护总结与故障诊断.docx_第5页
第5页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《weblogic日常维护总结与故障诊断.docx》由会员分享,可在线阅读,更多相关《weblogic日常维护总结与故障诊断.docx(21页珍藏版)》请在三一办公上搜索。

1、中 间 件 故 障 诊 断 总 结一、 步骤:1、准确描述现象:客户说的和自己查看到的:平台、版本、操作、信息等。特 别是,故障前是否有做过什么操作:网络调整、设备调整、主机参数调整、配置 文件修改 反正将这一切都列入排查的对象。2、使用工具收集数据,收集配置文件、日志、dump文件等等。3、使用分析数据,根据问题或收集的数据,使用适当的工具分析数据,当然包 括了在网上和在官方支持站点搜索类似的问题的解决办法。4、尝试解决问题,根据找到的问题点,尝试解决。如修改错的,复原正确的; 运行有问题的,适当调整运行的环境和运行的参数等等。5、给出最佳解决方案,一般就是继续观察了。6、总结经验并加以重用

2、,知识积累。二、通过前台收集基本的信息:1、重点是故障前做过的操作:2、比对运行平台是否在官方的兼容性列表中,一般就是关注各个版本,特别是 一些比较怪异的问题3、检查环境和参数,如能打开控制台,就在控制台中初步观察,一般进入控制 台的格式是 http:/ip 地址:端,口 /console 如: http:/192.168.0.89:7001/console/。常用的留意点如下:A、域运行状态(域-监视-健康状况);一般为running状态,如果不是 running,那这些界面就没有了。B、服务器运行状态(域-环境-服务器),正常的为running。W MwtiLcK flariBT* .ar

3、rlrJuiJMii Cofusid*a-poUN 即赴 HltfiRU理瞄醐如L心H :王牌BW Q骊Wi=JM己上正湾左TfiVfliUllM-G踮舌HJ况Fi T E l-HpcjiL4.lxiAib:ilJ!nradi4viaii_iTphk-iatkjia9iLjii=riCorflan.,vrinrriHaP:i*ftFi 1M 曰 !*Qk总 bm.一土- XEEI昨即 MMiHI -*W1#5 Ssmaritu 地n.bUJsce E#MFkim ii iMig | 股* amC、各个server性能(JVM)状态(域-环境-服务器,点击具体的serve后 进入,监视-健康状况

4、);留意JVM堆中当前可用的内存量。!i土十 r:. !AitiLok bmw t_ 岩/*j OiKh abucc S_ 司fcockMurtiTwWH- 导 Clrsd土vtiLogkdraclak. M ftraAig fd Fl.co-. rJ HQWS - Wb-C WtoU !tajsEPAianBHW!Lffiri!_#m mg i amp 。植X -不同的JVM,所显示的内容可能不一样,以下为sun的:金上竺竺1擘* amD、各个server线程状态(域-环境-服务器,点击具体的serve后进入,监 J 三 %Lcm 二视-线程);一般来说,空闲线程要多;健康状况为ok如下图h

5、ealth状态为:Warning,这个是有线程阻塞的Custamiae this tablBi elfTiJriritig Thread Pacil(Flhereid - More iCDfumjiiis; Exist)Showing 1 -1 oF 1 Previous | Kfe:TtirouglhpiJiltCuriikplBtedlRqiuieist CuuntHMMjgiiigThread CourrtEMficute liliread Idle 匚颂成CpLUGIOElLength8 Hand by Thread CrnrrtPending User ReqpL阳CuurrtHeM

6、i3.9A0366995073692 lAJamin-ShchVlrq 1-1*1 Preuici但 | Me:有cliss lEKeEutBThreads 株1333074Custamts this tableetf-Tuning Thread Pool TtireactetFlttered - More Columns E*ls;t JIB毋CiJitEThread mt商CountNsimie 由CuinnEinit R畔 或ITEdReqijestsA2754iUCTI1eojiBThrexi: tiibrD|UEIJB:与 vet I cq 巳 keme I. Cefau Itw&b

7、lcig 匕 wark.selfrLnrigijiiDdcMEjnagenrtplEWarkAiiBplBnnrpkKDbefl-carcnyrrajE falss trueu钮MIS:StwkHoggperEtiOVfjng 1 - 1J of +9 Pr取i姑 |Nbi主neral Health Charrels Ferltirmance Threads Timers Workload Hk Sezurily Defeu It Store JIVE 5AF JDBC JTAThis- page providss hfior marten on the thread acti/ity for

8、 the current ssrxer.The first table prDiyides gunerml nfcr maten abcut the status of Ihe IhrEad pad. The saznrd table provides Hformatcn on Ind ividua I IhrEads.NotB; The Lser ID displaiBd fijr irdk1 idL4al Breads is the user ID esecuting the thread during the cur日nt stage of ihe request This table

9、m即 display durene user IDs during 巾e Ifezcfeof 把 thread,命 customize this tabteSetf-Tunrrig Thread Peal (After ed - Motb Coliumn 缶 Exist)DurripTttMdStackfiActiveEnecuteThreads 曲ExeciuiteThrsadlTotalCoLintEKBDUte Tfreail Ddte countQllElffiLengthPenrifimgUserRequestCo tj ntCtiinnpleitedR叫或CountHoggm Ui

10、readCOLEStandby Thread countTFirmjghpLitHsahhw401口0vrr5r121O.34-=I0275062O5B97Worn rgEtowing 1 - 1 of 1 FrevlouE-1 Me:t阻塞线程的内容为:# Servers右侧菜单:AdminServer(admin)-logging甲的立件丈衣:m曹畤:n ini问;升.痂IkTdlHESSlZi -nrp dx.谚机EfliilL瓶5t的# 瑚; UiFm-r 0U-日蛆呻闵朴 W.a * 5111*+.:呻涸心:国,:细曳I8H虹百置号曲 g HEifil . |HJ.T.i-rnP汽

11、mIf RJSfUHSfjE昭D:t电 GR4flTSH-TTP|irnPWfEKaB3TR:SI5IHE5Ii劣碧 LDOft ,只找到 examplesServer.log、access.logglWL aiifSBff- “珥日M卜抽Hl主曜UHm日Ifcs ili由 烦litsnrtrfrHHHiHvs:| Wriffl旦哄件g叩fs.电嘟噩寒疆腰参慕眼Lf+K-5K* 堵曲岫型:扭M|_.矽E毋员闵e*用曰志nita InewI WRAHH4、其他如果日志太少,里面没有记载相关信息,可参照日志文件的回滚设置。在“滚 动类型:”属性页中可以设置这些日志文件的回滚方式,当日志文件到一定得

12、大 小或过了设定的时间后,把日志信息保存到一个新的文件中。WebLogic提供按 文件大小和时间两种方式。如下面的设置种,选择Rotation Type为BY SIZE。 也就是当日志文件的大小达到500K时,重新写一个新的文件。假如Rotation Type为BY TIME,那么是每隔一段时间重新写一个新的文件。并且对这些文件 编号设置日志文件名如:_%yyyy%_%MM%_%dd%_%hh%_%mm%5、日志的处理:查看日志中输出的具体内容,再进行处理。如:BEA- 下面是一个线程阻塞的一个信息# STUCK ExecuteThread: 1 for queue: weblogic.ker

13、nel.Default (self-tuning) has been busy for 2,503 seconds working on the requestweblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpldeab5f, which is more than the configured time (StuckThreadMaxTime) of 2,400 seconds. Stack trace:四、产生hread Dump来分析问题hread Dump是非常有用的诊断Java应用问题的工具,每一个Java虚拟机都有 及时生成显

14、示所有线程在某一点状态的thread-dump的能力。虽然各个Java虚 拟机thread dump打印输出格式上略微有一些不同,但是Thread dumps出来的 信息包含线程;线程的运行状态、标识和调用的堆栈;调用的堆栈包含完整的类 名,所执行的方法,如果可能的话还有源代码的行数。Thread Dump 特点:能在各种操作系统下使用能在各种Java应用服务器下使用可以在生产环境下使用而不影响系统的性能 可以将问题直接定位到应用程序的代码行上Thread Dump能诊断的问题包括:查找内存泄露,常见的是程序里load大量的数据到缓存发现死锁线程 收集 Thread Dump进行Thread

15、Dump的方法取决于安装挂起服务器实例的操作系统。有关 在不同的操作系统上进行Thread Dump的信息,Solaris OS- (Control-Backslash)kill -QUIT LinuxLinux操作系统查看线程的方式不同于其它操作系统。该操作系统将每个线程视 为一个进程。若要在Linux上进行Thread Dump,查找通过其启动所有其它进 程的进程ID。使用命令:若要获得根PID,使用:ps -efHl | grep java *. *使用一个作为字符串的grep参数(可在与服务器启动命令匹配的进程堆栈中找 到该字符串)。如果ps命令还没有管道传送到另一个例程,则报告的第一

16、个PID 将是根进程。IBM AIX在AIX上用IBM的JVM,内存溢出时默认地会产生javacore文件(关于cpu的) 和heapdump文件(关于内存的)。执行kill -3 命令可以生成javacore文 件和heapdump文件(pid为was java进程的id号,可以用ps -ef|grep java查 到),可以多执行几次。有些Java应用服务器是在控制台上运行,如Weblogic,为了方便获取threaddump 信息,在weblogic启动的时候,最好将其标准输出重定向到一个文件,用nohup sh startWebLogic.sh start.log &命令,执行kill

17、 -3 ,Stack trace 就会输出到start.log里。为了反映线程状态的动态变化,需要接连多次做 thread dump,每次间隔 10-20s。Windows、XP、NT设置 DOS 窗口的属性:Layout - Screen Buffer Size- Height 9999。同时按下CTRL-BREAK 找到 Thread Dump 的最开始的位置:Full thread dump.每个服务器需要-来创建诊断问题所需的Thread Dumpo确保在 每个服务器上执行几次,每次间隔大约5到10秒,以帮助诊断死锁问题。在NT 上,在命令shell中输入CTRL-Break。获取失败

18、时刻的获取失败时刻的Thread Dump-启动JVM时,加入参数: Sun JVM: -XX:+ShowMessageBoxOnE JRockit JVM: -Djrockit.waitone五、常见的问题1、 Out of Memory-当JVM没有足够的内存执行任务时,会触发java.lang.OutOfMemoryError-当没有更多内存可以分配时-或空闲的内存有太多碎片,无法利用时-可能不足的内存类型有可能不足的内存类型有: Native(物理内存) Heap (堆内存) 特定Java内存代(例如,permanet)对 Out of Memory 的响应的响应 JVM会发送erro

19、r到标准输出流和错误输出流 WLS会将应用程序没有处理的Java异常和错误都输出到服务器日志 Out-of-Memory和类似的系统错误不应该由应用程序直接处理接处理如果应用程序发生错误,会给客户端返回错误信息(例如 HTTP 500)如果WLS子系统发生错误,则服务器处于不稳定状态,需要重启内存泄漏内存泄漏内存泄漏:最常见的引发Out-of-Memory错误的原因在Java中,内存泄漏并不常发生(相对传统语言)/内存泄漏的原因是当对象不再被需要时,没有显式声明,进而 没有被垃圾回收处理常见的场景有:太大的缓存造成内存泄漏太多使用HTTP会话,导致内存泄漏对数据库操作结束时,没有正常关闭数据集

20、及数据连接动态类加载问题错误日志错误日志该日志文件通常包括如下类型的信息:操作系统错误消息 JVM版本硬件和操作系统参数系统环境变量-堆和垃圾回收汇总线程汇总Runtime data area主要包括五个部分:Heap (堆),Method Area(方法区 域),Java Stack(java 的栈),Program Counter(程序计数器),Native method stack(本地方法栈)。Heap和Method Area是被所有线程的共享使用的;而 Java stack, Program counter 和 Native method stack 是以线程为粒度的, 每个线程独自

21、拥有。HeapJava程序在运行时创建的所有类实或数组都放在同一个堆中。而一个Java 虚拟实例中只存在一个堆空间,因此所有线程都将共享这个堆。每一个java程 序独占一个JVM实例,因而每个java程序都有它自己的堆空间,它们不会彼此 干扰。但是同一 java程序的多个线程都共享着同一个堆空间,就得考虑多线程 访问对象(堆数据)的同步问题。(这里可能出现的异常 java.lang.OutOfMemoryError: Java heap space)Method area在Java虚拟机中,被装载的class的信息存储在Method area的内存中。当 虚拟机装载某个类型时,它使用类装载器定

22、位相应的class文件,然后读入这个 class文件内容并把它传输到虚拟机中。紧接着虚拟机提取其中的类型信息,并 将这些信息存储到方法区。该类型中的类(静态)变量同样也存储在方法区中。 与Heap 一样,method area是多线程共享的,因此要考虑多线程访问的同步问 题。比如,假设同时两个线程都企图访问一个名为Lava的类,而这个类还没有 内装载入虚拟机,那么,这时应该只有一个线程去装载它,而另一个线程则只能 等待。(这里可能出现的异常 java.lang.OutOfMemoryError: PermGen full)Java stackJava stack以帧为单位保存线程的运行状态。虚

23、拟机只会直 接对Java stack执行两种操作:以帧为单位的压栈或出栈。每当线程调用一个 方法的时候,就对当前状态作为一个帧保存到java stack中(压栈);当一个方 法调用返回时,从java stack弹出一个帧(出栈)。栈的大小是有一定的限制, 这个可能出现StackOverFlow问题。下面的程序可以说明这个问题。public class TestStackOverFlow (public static void main(String口 args) (Recursive r = new Recursive(); r.doit(10000);/ Exception in threa

24、d mainjava.lang.StackOverflowErrorclass Recursive (public int doit(int t) ( if (t = 1) ( return 1;return t + doit(t - 1);Program counter每个运行中的Java程序,每一个线程都有它自己的PC寄存器,也是该线程启动 时创建的。PC寄存器的内容总是指向下一条将被执行指令的饿“地址 ”,这里的“地址”可以是一个本地指针,也可以是在方法区 中相对应于该方法起始指令的偏移量。Native method stack对于一个运行

25、中的Java程序而言,它还能会用到一些跟本地方法相关的数据区。 当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制 的世界。本地方法可以通过本地方法接口来访问虚拟机的运行时数据区,不止与 此,它还可以做任何它想做的事情。比如,可以调用寄存器,或在操作系统中分 配内存等。总之,本地方法具有和JVM相同的能力和权限。(这里出现JVM无法 控制的内存溢出问题native heap OutOfMemory )旧系统2、服务器挂起问题描述在出现以下情况时怀疑服务器挂起:-服务器不响应新的请求。请求超时。-请求处理的时间越来越长(其最终结果可能是挂起)。通常,服务器挂起不会表现为服务器

26、崩溃,但服务器挂起之后可能会崩溃。资源濒临枯竭:内存、工作线程、数据库连接池故障排除请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解 决。快速链接:为什么发生此问题?服务器挂起的可能原因基本步骤已知的 WebLogic Server 问题收集 Thread Dump.Thread Dump 分析为什么发生此问题?服务器挂起有多种原因。一般而言,服务器挂起是因为缺少某种资源。缺少资源 会阻止服务器响应服务请求。例如,由于故障(死锁)或者大量请求的缘故,可 能没有任何可用的执行线程来完成工作,所有执行线程都被占用或忙于处理以前 的请求。引起引起Server Hang的原因的原

27、因工作线程太少垃圾回收占用时间太多 JVM代码优化问题应用程序死锁 JDBC死锁 Remote JNDI lookups JSP编译 JSP 不正确的设置:PageCheckSeconds JVM bug服务器挂起的可能原因主题模式名称链接RMI、RJVM响应一所有绑定线程等待RJVM、RMI响应。EJB_RMI服务器挂 起EJB_RMI服务器挂起应用程序死锁一线程锁定资源1,然后等待锁定资源2。另一个线程锁定资源 2,然后等待锁定资源1。应用程序死锁导致服务器挂起待定线程全部被占用,没有线程可用于新工作。线程占用导致服务器挂起 待定 垃圾回收花费太多时间。垃圾回收导致服务器挂起 待定serv

28、let时间的JSP错误设置,比如PageCheckSeconds。JSP导致服务器挂 起待定死锁造成JDBC挂起。JDBC中的服务器挂起待定(代码优化)过程中的JVM挂起类似于服务器挂起。代码优化中服务器挂起待定在大量负载情况下JSP编译造成服务器挂起。JSP编译导致服务器挂起待定SUN JVM错误,比如轻量型线程库。Sun JVM错误导致服务器挂起 待定返回页首 基本步骤当服务器挂起时,首先使用 java weblogic.Admin t3:/server:port PING 来 ping该服务器。如果服务器能够响应此ping,则可能是应用程序正在挂起而不 是服务器自身。确保服务器确实正 在

29、挂起,而不是在做垃圾回收。若要验证挂起,启用 -verbosegc重新启动服务器,然后将stdout和stderr重定向到一个文件中。 当服务器停止响应时,可以判断它是正在收集无用信息还是确实挂起。WebLogic Server使用Default ”线程队列响应客户端服务请求。这些是在发 生服务器挂起时应当检查的线程。下面是其中一个线程在Thread Dump中的形 式示例。Execute Thread 14正在等待任务。该线程调用的最后方法是 Object.wait()。ExecuteThread: 14 for queue: default daemon prio=5 tid=0x8b0a

30、b30 nid=0x1f4 waiting on monitor 0x96af000.0x96afdc4 at.java.lang.Object.wait(Native Method) at.java.lang.Object.wait(Object.java:420) at weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:94) atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:118)确定“Default” ExecuteThread队列是否超载。利用控

31、制台确定“Default”队 列中的所有ExecuteThreads是否空闲。如果没有一个空闲,则应用程序可能需 要一个更大的ExecuteThread数来配置。可以通过控制台更改该值,并将其保 存在config.xml文件中。如果执行队列有空闲线程,则可能没有分配足够的Socket Reader线程。缺省 情况下,WebLogic Server实例在启动时创建三个Socket Reader线程。如果 群集系统在高峰期使用的Socket Reader线程超过三个,则增加Socket Reader 线程的数量。通常,Socket Reader线程的数量应当较小。但是,如果Weblogic Ser

32、ve充当 正在挂起的服务器实例的客户端,则应当为每个Weblogic Serve配置一个线 程。如果使用JDBC连接池,确保池中已经配置的JDBC连接数量与同时请求(即执 行线程)的数量相等。已知的WebLogic问题JDBC产生死锁问题的可能性存在。检查在weblogic.log开头找到的服务器的 版本和Service Pack级别。然后对已经应用于服务器类路径的所有临时修补程 序检查以上版本和Service Pack行。修补程序将指明已经解决了什么问题。Thread Dump 分析分析服务器挂起的最有用的工具是一系列Thread Dumpo Thread Dump提供关于 每个线程在特定时

33、刻正在执行什么操作的信息。一系列Thread Dump (一般每隔 5到10秒进行三个或更多 Thread Dump)可以帮助分析每个线程从一个 Thread Dump到另一个Thread Dump过程中的状态变化或所缺少的变化。挂起 服务器Thread Dump 一般显示线程状态从第一个 Thread Dump到最后一个 Thread Dump中变化很小。在Thread Dump中查看的内容所有请求都通过 ListenThread 进入 WebLogic Server。如果 ListenThread 丢 失,就无法接收任何工作,因此也无法完成任何工作。确认在Thread Dump中 存在 L

34、istenThread。ListenThread 应当在 socketAccept 方法中。下面示例说 明监听线程(Listen Thread)的形式。ListenThread.Default prio=10 tid=0x00037888 nid=93 lwp_id=6888343 runnable0x1a81b000.0x1a81b530at.PlainSocketImpl.socketAccept(Native Method) at.PlainSocketImpl.accept(PlainSocketImpl.java:353)-locked (a .PlainSocketImpl)at.

35、ServerSocket.implAccept(ServerSocket.java:439)at.ServerSocket.accept(ServerSocket.java:410)atweblogic.socket.WeblogicServerSocket.accept(WeblogicServerSocket.java :24)atweblogic.t3.srvr.ListenThread.accept(ListenThread.java:713)atweblogic.t3.srvr.ListenThread.run(ListenThread.java:290)Socket Reader线

36、程接受来自监听线程队列的传入请求,并将该请求放入执行线 程队列。如果Thread Dump中没有Socket Reader线程,则在某个地方存在导 致Socket Reader线程消失的错误。应当始终保持至少有三个Socket Reader 线程。一个Socket Reader线程一般用于轮询功能,另外两个用于处理请求。 下面是一个Thread Dump示例中的Socket Reader线程。ExecuteThread: 2 for queue: weblogic.socket.Muxer daemon prio=10 tid=0x00036128 nid=75 lwp_id=6888070

37、waiting for monitor entry 0x1b12f000.0x1b12f530 atweblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java :92)-waiting to lock (a java.lang.String)atweblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178) atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:151) ExecuteThread: 1 for queue: weblogic.socket.Muxer daemon prio=10 tid=0x00035fc8nid=74lwp_id=6888067runnable0x1b1b0000.0x1b1b0530at weblogic.so

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号