RSS
热门关键字:  cms  下载  模版  开源  dedecms
当前位置 :| 主页>站长学院>JSP教程>

调试处理系统核心文件

来源:Java频道 作者:未知 时间:2006-08-10 点击:

摘要:这篇文章将提供当一个系统核心(System Core)文件出现时,一些关于调试 BEA WebLogic 服务器的应用程序的有用技巧。本文描述了在这个过程中可以帮助您的调试技巧、问题的解决和工具。

作者 Steve Pozarycki

 这文章将提供当一个系统核心(System Core)文件出现时,一些关于调试BEA WebLogic 服务器的应用程序的有用技巧。本文描述了在这个过程中可以帮助您的调试技巧、问题的解决和工具。

    在某些本机码中,系统核心文件通常是错误的指示。这可能来源于用户的应用代码(在您应用程序中如果使用本地代码 [JNI ] 的话)、也可能来自您使用的 JAVA 虚拟机版本中或 BEA WebLogic 服务器本身中的错误。本地代码可能引起系统核心文件在操作系统上出现的地方有两处。下面的想法和建议将帮助您缩小问题范围并且稳定应用程序,直到确定系统核心的准确问题原因为止。

 JAVA虚拟机

   第一个要看的地方是 JVM 本身。JVM 是一个本机程序并且能够引起此类错误。 当有疑问时,您可以尝试另一种被鉴定的JVM或较新的版本来确定是否是 JVM bug 导致的错误。许多 JIT bug 都与编译器的使用有关,禁用这种特性将解决此类问题。通过给 JAVA 命令行提供 " -Djava.compiler=none " 选项,这种问题将得到解决。在大多数时间 JVM 将产生一个小型日志文件,该文件可能包含诸如系统核心来自哪个信息库之类的有用信息;然而,该文件在所有时间内并不是都包含有用的信息。该文件在 BEA WebLogic 服务器启动的目录中产生,并采用 "hs_err_pid<PID #>.log" 形式,其中,"<PID #>" BEA WebLogic 服务器进程的进程 ID。在 AIX 上,这个文件将是 "javacore<PID>.<ID Number>.txt",其中,"<PID #>" BEA WebLogic 服务器进程的进程 ID"<ID Number>" 是操作系统产生的号码。 您可以去 http://java.sun.com/ 网站,并且用 HotSpot " 错误 ID " 号或报告发生错误时的方法搜索 Bug Database

本地代码

要看的下一个地方是用您应用程序中 JNI (本地代码) 调用访问的任何本机库(如果适用)。这也能引起系统核心文件的产生。如果您的应用程序使用这样的库,则应仔细检查这些库。排除这些库可能很困难,由于它们的功能性可能不太容易从应用程序中除去。 如果某个使用模式与系统核心转储/ Dr. Watson 错误有相互关系,则可能要确定大量的日志记录。

另一地方是利用可能产生此类错误的本机 DBMS 库的任何 Type 2 JDBC 驱动程序。一种选择是转向纯 JAVA(类型4)JDBC 驱动程序,确定该驱动程序是否是产生错误的原因。 您还可以与 Type 2 JDBC 驱动程序的提供商核对,看看是否有任何已知的问题,或者有可用的本机库的更新版本。

   引起这种问题的最后一个可能的地方是在 BEA WebLogic服务器性能包上。这也是本地代码,而且在启用本地代码时,能够潜在地产生这样的一个错误。一种选择是禁用这个特征来确定该特定是否是产生错误的原因。通过将 "-Dweblogic.NativeIOEnabled=false" 添加到命令行来启动服务器,就可以禁用该特性。如果您正在使用更旧的 service-pack 版本,您还可以检查更正更改请求的列表,在 http://edocs.bea. com/ 网站上获得特定的 BEA WebLogic 服务器版本。

系统核心文件

如果在看完上述几项之后您不能确定错误的原因,那么我们可以研究这个产生的系统核心文件。如果产生一个系统核心文件,则这个文件就在启动 BEA WebLogic 服务器的目录里。您需要在产生的系统核心文件上运行特定于操作系统的调试程序来获得指向错误代码的堆栈跟踪

如果在开发过程中系统核心文件还不断出现,则您可以设置下列标志,使得服务器在核心文件刚好出现之前执行Thread-Dump。该操作会在这个时刻得到线程的状态,有助于缩小应用程序的问题范围或者指向一个 bug。这个选项是 SUN JVM上(未在 SUN网站上正式记录)的 "- XX+ShowMessageBoxOnError" JVM 崩溃时,这个程序将提示:“Do you want to debug the problem?(您想要调试这个问题吗?)”。您可以执行 JVM Thread-Dump。这个选项在 BEA JRockit JVM 8.1 SP2 版本(如果可获得该版本的话)上可用。然而,在那个版本里相应选项将是 "Djrockit.waitonerror"

最佳选择是对产生的系统核心文件运行调制程序来获得本机命令的堆栈跟踪。下列信息也在我在最后文章里给出(WLDJ,第 3 卷,第 2 ),但为了保持一致性,在这里要重复一下此信息。该信息可以帮助您指出错误代码;如果您不能肯定, 那么请就该信息与 BEA 客户技术支持联系,以便他们能更全面调查该堆栈跟踪。如果您在 Windows 平台上,那么可能产生一个 " Dr. Watson " 文件。在出现此情况时,请将该文件发送给 BEA 客户技术支持。要不然,检查下列 ”UNIX” 操作系统值,确保正确地设置了这些值来生成核心文件:

 1 在系统和用户级别检查 "ulimit c"(核心文件的配置大小),确保设置了该值且该值没被设置太低以至于不能产生有意义的核心文件。

2 为用户检查可用的磁盘空间(例如,是否存在磁盘定额吗?)。

3 还检查下列参数,在 Solaris 上通常是 /etc/system 文件,可以用于禁用核心文件 set sys:coredumpsize=0

 4.在 Linux 上,默认情况下,核心转储在全部系统上都被关闭。在 RedHat 2. 1 高级服务器上,它应位于 "/etc/security" 下。该文件应为一个名为 limits.conf 的自解释文件;在那个文件内搜索单词 "core"。如果它被设为 "0",则核心转储文件就被禁用。

 5.在 HPUX 上,检查名为 "kernel parm maxdsiz "max_per_proc_data_size,增加“用户进程数据段的大小”,将该值从旧值(如64M)增加到更高的值(如134M))的设置。

请从调试程序中获得堆栈跟踪(或向后跟踪)。下面是在大多数平台使用的 "dbx" "gdb" 所需的命令:

a.       dbx

l         -version:需要使用正确的 JDK 版本

l         /opt/bin/dbx:需要了解 dbx 的位置或“哪个 dbx

l         :DEBUG_PROG=/opt/bin/dbx(或无论 "dbx" 位于何处

l         lt;path to java command>/java corefile

现在您将在调制程序里,执行下列命令:

l         (dbx) where:显示这个堆栈的摘要

l         (dbx) thread:显示现有的线的状态

l         (dbx) quit

b.       gdb

l         java -version:需要使用正确的 JDK 版本

l         ls / usr /local / gdb:需要知道 gdb  的位置或者“哪个 gdb

l         export DEBUG_PROG=/usr/local/bin/gdb: (或无论 "gdb" 放在何处)

l         <path to java command>/java corefile

现在您在调试程序里, 执行下列命令:

l         (gdb) where 显示这个堆的摘要

l         (gdb) thr 在线程中切换或显示当前的线程

l         (gdb) info thr:询问现有的线程

l         (gdb) thread apply 1 bt将命令应用到一个线程的列表,特别线程 #1 的向后跟踪)

l         (gdb) quit

如果您无权访问调试程序,则您可以进行检查,看看在操作系统上是否有 "pstack" "pmap" 实用程序。如果您确实有那些实用程序(在某些操作系统上,您必须分别下载这些实用程序);您可以在系统核心文件上运行这些实用程序来收集支持信息。命令的句法类似于下面的命令:

/usr/proc/bin/pstack 核心

/usr/proc/bin/pmap  核心

详细信息.

您也可以转至 http://support.bea.com/ 网站,查找有关核心文件的一些公布解决方案。在 "Question"域中,键入 "S-16147" 会显示一些关于在 Solaris 上使用 pstack pmap 的附加信息。

启用/禁用 Dr. Watson

drwtsn32.log 文件类似于 Unix 上的系统核心文件。在 Windows 2000 上,这些文件位于下列目录中:C:Documents and SettingsAll UsersDocumentsDrWatson DOS 命令窗口下输入 "drwtsn32" 之后,按回车,出现 "Dr. Watson for Windows 2000"DrWatson 日志文件概述选项将显示一个屏幕,解释 drwtsn32.log 文件的格式。

   默认情况下,Dr. Watson 在安装 Windows NT 时启用。要禁用 Dr. Watson,下列注册表值必须从 1 更改为 0(0)

"HKEY_LOCAL_MACHINESOFTWARE MicrosoftWindows NTCurrentVersionAeDebug"。一个名为 "AUTO" 的注册表项”指出如何启动 Dr. Watson。要启用 Dr. Watson,请将 ”AUTO" 值从 0()改为 1。然后,该操作将启动 Debugger 注册表值下的调试程序或应用程序。对 Dr. Watson 而言,调试程序的值应该包含:

drwtsn32 -p %ld -e %ld -g

 在线调试程序手册的链接

1.   gdbhttp://www.gnu.org/manual/gdb-5.1.1/gdb.html

2.    dbx

 a.Sun: http://docs.sun.com/db/doc/805-4948?q=DBX

b. IBM http://publib16.boulder.ibm.com/pseries/en_US/cmds/aixcmds2/dbx.htm

3. adbHP http://docs.hp.com/hpux/onlinedocs/B2355-90680/00/00/8-con.html.

  如果上述线索没有一个可以帮助您直接获得解决方案或应用程序中标识符,那么您应该与 BEA 客户基础支持联系来进行进一步的诊断。您可以登录 http://support.bea.com/login.jsp 网站,打开具有有效技术支持合同的案例。

    关于作者

Steven Pozarycki BEA Systems客户技术支持组的一位行政方面的开发人员关系工程师。他致力于用 BEA 产品的任务关键型应用程序对复杂的客户问题进行疑难解答并进行解决, Steve 获得了计算机科学专业的学士学位。BEA Systems使他再获成功。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
栏目列表