Oracle Coherence中文教程五:Coherence调试

24 篇文章 1 订阅

Coherence调试

本章介绍了如何配置日志和连贯性应用程序进行故障排除的一般意见。

本章包含以下各节:
    概述调试连贯性
    配置日志
    执行远程调试
    故障排除相干为基础的应用程序

5.1概述调试的连贯性

通常一台计算机上开发的cohernce应用。缓存服务器和应用程序内启动IDE和调试应用程序需要。这种类型的开发环境,易于安装,执行,易于调试。大部分应用程序可以创建和测试这种方式。请参阅启用单服务器模式配置的连贯性,在单个服务器上运行的详细信息。

理想的情况下,大多数错误可以被检测到在开发过程中使用的日志记录,使JVM调试选项,需要捕获线程和堆转储。此外,IDE和分析工具,如OracleJava VisualVM的,JConsole的,JRockit任务控制,提供了用于诊断问题的功能。但是,coherence应用程序最终必须进行测试,在一个分布式环境。调试和故障排除测试环境中是比较困难的,因为数据和流程完全分布在整个集群,因为网络现在可以影响到应用程序。远程调试与Java调试线协议(JDWP)一起连贯性的JMX管理和报告功能,方便调试和在分布式环境中的故障排除。

使用Oracle支持

Oracle支持可以帮助调试问题和可通过https://support.oracle.com。发送支持问题时,总是在压缩文件中包括以下项目:

    应用程序代码
    配置文件
    所有集群成员的日志文件

    在某些情况下,需要主题和堆转储。如果应用程序运行缓慢和/或似乎已被挂起,应该发送线程转储。如果应用程序内存用完或消耗更多的内存比预期应送交堆转储。

5.2配置日志

cohernce有它自己的日志框架,还支持使用log4jJava记录的应用程序提供了一个通用的记录环境中。记录发生在连贯性上的一个专用的低优先级线程登录系统的关键部分减少的影响。日志是预配置和默认设置应根据需要改变。

在本节包括以下主题:
    更改日志级别
    更改日志目的地
    修改日志消息格式
    设置日志记录的字符数限制
    使用JDK测井连贯性日志
    连贯性日志使用log4j日志

5.2.1更改日志级别

该记录器的日志级别决定发出的日志消息。默认的日志级别发出的错误,警告,信息,和一些调试信息。在开发过程中,日志级别应提升到其最大设置,以确保记录所有调试消息。下面的日志级别可供选择:

    0 - 此级别包括不相关联的日志记录级别的消息。
    1 - 此级别包括以前的水平的消息,再加上错误讯息。
    2 - 此级别包括以前的水平的消息,并警告消息。
    3 - 此级别包括以前的水平的消息加上信息性消息。
    4-9 - 这级别包括以前的水平的消息加上内部调试消息。发出更多的日志信息日志级别增加。默认的日志级别为5

    -1 - 日志消息发出。

要更改日志级别,编辑业务覆盖文件和添加<severity-level>的的元素,内<logging-config>元素,包括水平号码。例如:

...

<logging-config>

   ...

   <severity-level system-property="tangosol.coherence.log.level">9

   </severity-level>

   ...

</logging-config>

...

tangosol.coherence.log.level系统属性用于指定日志级别,而不是使用业务覆盖文件。例如:

-Dtangosol.coherence.log.level=9

5.2.2修改日志目的地


记录器可以配置为发射日志消息发送到多个目的地。对于标准输出到控制台,stdoutstderr都(默认值)可以使用。该记录仪也能发射消息发送到指定的文件。

coherence也支持的JDKlog4j日志框架允许使用的应用程序和连贯性,共享一个通用的日志框架。请参阅使用JDK日志连贯性日志使用log4j记录的连贯性日志的详细说明使用这些记录与连贯性框架。

要改变日志目的地,编辑业务覆盖文件,并添加<目的地>的元素,内<logging-config>元素,包括目的地。例如:

...

<logging-config>

   <destination system-property="tangosol.coherence.log">stdout</destination>

   ...

</logging-config>

...



tangosol.coherence.log系统属性用于指定日志目的地,而不是使用的业务覆盖文件。例如:

-Dtangosol.coherence.log=stdout

5.2.2.1日志消息发送到一个文件

记录器可以配置到一个文件中提供了一个路径和文件名,在<目的地>元素发出日志消息。指定的路径必须已经存在。确保可以访问指定的目录有写权限。输出追加到文件有没有大小限制。进程无法共享一个日志文件,日志文件被替换,当一个进程被重新启动。将日志消息发送到一个文件中通常用于在开发和测试是有用的,如果需要的日志消息被发送到Oracle支持。

下面的例子演示了指定的日志文件名为coherence.log,写入到/ tmp目录:

...

<logging-config>

   <destination system-property="tangosol.coherence.log">/tmp/coherence.log

   </destination>

   ...

</logging-config>

...

5.2.3修改日志消息格式

可以更改默认格式的日志消息,这取决于所需要的细节量。日志消息可以包括静态文本,以及任何在运行时被替换以下参数。

注意事项:
更改日志消息的格式必须谨慎,因为这使得问题更难调试,可能会丢失关键信息(如成员或线程)。

参数

说明

date

此参数显示记录消息时的日期/时间(毫秒)。

uptime

此参数显示的集群成员一直运作的时间量。

product

该参数显示的产品名称和许可证类型。

version

此参数显示coherence版本,并建立详细资料。

level

此参数显示记录的严重性级别的消息。

thread

此参数显示记录该消息的线程名称。

member

此参数显示群集成员的ID(如果当前正在运行的集群)。

location

此参数显示全群集成员识别:群集名称,站点名称,机架名,机器名,进程名称和成员名称(如果当前正在运行的集群)。

role

此参数显示指定集群成员的作用。

text

此参数显示的消息文本。

要改变日志消息格式,编辑业务覆盖文件,并添加<message-format>的元素,内<logging-config>元素,包括格式。例如:

...

<logging-config>

   ...

   <message-format>[{date}] <{level}> (thread={thread})  -->{text}

   </message-format>

   ...

</logging-config>

...

5.2.4设置记录字符数限制

记录字符的限制指定的最大字符数,丢弃队列中的所有剩余消息从消息队列中的日志守护进程。被丢弃的消息由一个日志条目的日志记录系统概述的信息被丢弃的消息的数量和它们的总大小。例如:

异步日志超出字符限制;丢弃5日志消息(行= 14,字符=968

截断只是暂时的处理队列时(清空),以便后续的消息会被记录,记录器复位。

注意事项:
永远不会被截断的消息造成的总字符数超过最大。

字符限制是为了避免情况记录,防止恢复从失败的条件。例如,日志可以增加已紧张的计时,这会导致额外的故障,产生更多的日志。这个周期可能会继续下去,直到恢复是不可能的。限价日志防止循环的发生。

要设置日志字符的限制,编辑业务覆盖文件,并添加一个<character-limit>元素,内<logging-config>元素。输入的最大字符数为0Integer.MAX_VALUE的)或正整数。例如:

...

<logging-config>

   ...

   <character-limit system-property="tangosol.coherence.log.limit">12288

   </character-limit>

</logging-config>

...

tangosol.coherence.log.limit系统属性用于指定日志字符的限制,而不是使用的业务覆盖文件。例如:

-Dtangosol.coherence.log.limit12288

5.2.5使用JDK日志连贯性日志


使用JDK日志框架的应用程序可以配置的连贯性,以及使用JDK日志记录。 JDK日志的详细信息不在本文档的范围。 JDK日志的详细信息,请参阅http://download.oracle.com/javase/6/docs/technotes/guides/logging/overview.html

要使用JDK日志连贯性日志:

    创建一个logging.properties文件。下面的例子配置JDK记录器发出信息到控制台和文件。输出到控制台被配置为使用全局日志级别(INFO)和输出到文件被配置为使用最好的日志级别。对于文件处理模式,指定的路径必须已经存在。此外,请确保可以访问指定的目录有写权限。

    handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler

    .level=INFO

    java.util.logging.FileHandler.pattern=/tmp/coherence%u.log

    java.util.logging.FileHandler.limit=50000

    java.util.logging.FileHandler.level=FINEST

    java.util.logging.FileHandler.count=1

    java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter

java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter

   

配置的coherence,使用JDK日志通过指定JDK作为业务覆盖文件<destination>元素的价值。例如:

    ...

    <logging-config>

       <destination system-property="tangosol.coherence.log">jdk</destination>

       ...

    </logging-config>

    ...

确保logging.properties文件在运行时或在classpath中找到指定使用java.util.logging.config.file系统属性。例如:

-Djava.util.logging.config.file=myfile

5.2.6使用log4j记录coherence日志

使用log4j日志框架的应用程序可以配置的连贯性,以及使用log4j日志。 log4j日志的详细信息不在本文档的范围。 log4j日志的详细信息,请参阅http://logging.apache.org/log4j/1.2/manual.html

要使用log4j日志的一致性日志:

    创建一个log4j.properties文件。下面的例子配置log4j的记录器发出消息到控制台和文件。输出到控制台被配置为使用全局日志级别(INFO)和输出到文件被配置为使用DEBUG日志级别。文件附加,确保可以访问指定的目录有写权限。

    log4j.logger.Coherence=INFO, stdout, file

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender

    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    log4j.appender.stdout.layout.ConversionPattern=%m%n

    log4j.appender.file=org.apache.log4j.RollingFileAppender

    log4j.appender.file.File=/tmp/coherence.log

    log4j.appender.file.threshold=DEBUG

    log4j.appender.file.MaxFileSize=10MB

    log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%m%n

注意事项:
    在上面的例子中,使用coherence Logger对象的名称和连贯性使用的是默认的名称。业务覆盖文件内<logger-name>的元素或指定名称的值的tangosol.coherence.log.logger系统属性指定的名称,可以使用不同的名称。

    使用log4j日志配置的coherence ,通过指定log4j的业务覆盖文件中的<目的地>元素的价值。例如:

    ...

    <logging-config>

       <destination system-property="tangosol.coherence.log">log4j</destination>

       ...

    </logging-config>

    ...

确保log4j.jar文件log4j.properties文件在运行时在classpath中找到。

5.3执行远程调试

Java调试线协议(JDWP)提供的能力,远程调试JVM。大多数IDE工具支持JDWP是用来连接到远程JVM启用远程调试功能。请参阅IDE的文件说明如何连接到远程JVM

要启用远程调试的缓存服务器上,启动缓存服务器与下列JVM选项。一旦缓存服务器已经启动,使用IDE的调试器连接到JVM使用指定的端口(例如5005)。

-Xdebug

-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

远程调试相干应用可能会很困难,当应用程序不再是单节点群集,因为数据分布在集群的成员。例如,当执行并行网格操作时,操作其中的数据是位于在集群成员上执行。由于有成员不保证数据的位置,它是最好的约束测试使用单个高速缓存服务器。

此外,监护人和数据包超时可以使集群调试困难。如果调试器暂停包发布,集群和服务线程,它会导致整个集群的中断。在这种情况下,禁用的监护人和提高报文的超时在调试会话期间。配置这些设置的详细信息,请参阅服务监护人

5.4故障基于coherence应用

本节中的主题提供一般故障排除建议。排除coherence为基础的应用是,在大多数情况下,排除其他Java应用程序没有什么不同。大多数IDE提供的功能,促进这一进程。此外,许多工具,如:Java VisualVMJConsole的,JRockit任务控制,和第三方工具提供了简单的方法来监视和故障排除Java应用程序。见故障排除Java SE节的OTN上的详细信息,故障排除爪哇:

http://www.oracle.com/technetwork/java/javase/index-138283.html

一个的coherence 应用程序在单一服务器上集群故障排除通常是直线前进。最受欢迎的coherence 的发展工作是在这样的环境下,因为它便于调试。分布式集群上部署的应用程序的故障排除变得更具挑战性。

在本节包括以下主题:
    使用相干日志
    使用JMX管理和coherence 报告
    使用JVM选项来帮助调试
    捕获线程转储
    捕获堆转储
    监视操作系统

5.4.1使用coherence日志

日志消息提供的信息,用于监控和故障排除连贯性。大多数日志消息日志词汇解释在Oracle Coherence的管理员指南。词汇表提供了额外的细节,以及可以采取的具体行动,当遇到一封。

超过默认配置日志记录盒配置是非常重要的,当应用程序的开发和调试。具体来说,使用的日志级别最高(9级或全部使用JDKlog4j日志时),以确保所有的日志消息发出。另外,考虑使用JDKlog4j日志。这些框架都支持同时滚动文件和控制台输出使用。最后,考虑把所有的日志文件,在一个共同的目录。一个常见的目录,使得它更容易查看日志文件,并把它们打包的连贯性的支持团队。请参阅配置日志记录的详细信息,配置各方面的记录。

5.4.2使用JMX管理和coherence报告

连贯性管理使用Java管理扩展(JMX)来实现。许多MBean的前提是详细的健康和稳定的连贯性。 MBean提供了宝贵的见解和移动应用程序从开发环境到一个完全分布式环境时,应始终使用。 MBean是使用JConsoleVisualVM的或任何支持JMX的管理工具,访问。此外,连贯性包括收集信息的报告,随着时间的推移,并提供了一​​个历史背景下,这是不可能仅仅通过监视的MBeanMBean。该报告是最经常被用来确定趋势是有价值的故障排除。管理和报告是不是默认启用的,必须启用。与连贯性的管理功能,包括使用的详细说明,请参阅Oracle Coherence的管理指南。

5.4.3使用JVM选项来帮助调试

大多数JVM中包括选项,方便调试和故障排除。应使用这些选项,尽可能得到尽可能多的信息。请咨询您的JVM厂商的文档,其可用的选项。 JVM选项在本节所讨论的Java HotSpot具体的。所有JVM选项的详细信息和使用说明,请参阅Java HotSpot虚拟机选项网页:

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

下面的JVM选项(标准和非标准)可以帮助调试和故障排除应用程序:

    详细:GC-Xloggc:文件 这些选项用于启用额外的每个垃圾收集事件日志。在分布式系统中,单个JVM GC暂停会影响许多JVM的性能,所以它是必不可少的非常密切监控垃圾收集。 Xloggc选项详细GC相似,但包括时间戳。

-Xprof and -Xrunhprof 

这些选项用来查看JVM配置文件数据,而不是为了用于生产系统。

-XX:-PrintGC, -XX:-PrintGCDetails, and -XX:-PrintGCTimeStamps

这些选项也可用于打印消息在垃圾收集。

-XX:-HeapDumpOnOutOfMemoryError and -XX:HeapDumpPath=./java_pid<pid>.hprof

这些选项是用来启动一个堆转储时显示java.lang.OutOfMemoryError抛出。

-XX:ErrorFile=./hs_err_pid<pid>.log 

此选项保存到一个文件中的错误数据。

5.4.4捕获线程转储

coherence 详细的线程信息,如线程状态,每个线程在JVM线程转储。线程转储信息还包括每个死锁的线程(如适用)。线程转储是有用的,因为coherence 的多线程和分布式架构。线程转储经常被用来解决应用程序运行缓慢或僵持。确保总是收集一些转储过了一段时间,因为一个线程转储只在时间的快照。提交支持问题时,总是包括一组线程转储。

要执行一个线程转储UNIXLinux操作系统,在应用程序控制台按Ctrl + \。在Windows中,按CTRL + BREAK(或暂停)要执行的线程转储。这两种方法的线程转储中包括堆摘要。

大多数IDE提供的线程转储功能,可以用来捕捉线程转储,而在IDE中工作。此外,UnixLinux操作系统可以使用kill -3 PIDIDE中导致远程线程转储。在Windows上,使用第三方工具(如SendSignal)发送CTRL + BREAK信号远程Java进程,并导致内存转储在IDE中。

jvisualvm甲骨文VirtualVM()的JConsoleJConsole的),JRockit任务控制(JRMC)分析工具,如能执行线程转储。这些工具是非常有用的,因为它们提供了一个单一的工具进行故障排除和调试,并显示许多不同类型的信息,除了刚刚线程细节。

最后,jstack工具可以用来捕捉任何进程的线程转储。例如,使用太平绅士找到一个Java进程ID,然后执行以下命令行:

Jstack能够<PID>

jstack工具不受支持,并可能会或可能无法在未来版本的JDK

5.4.5捕获堆转储

堆转储coherence 在JVM堆中的所有对象的详细信息。包含多少对象的实例被加载,多少内存分配给对象的信息。堆信息通常用于查找部件的一个应用程序可能浪费资源,造成性能不佳。在一个完全分布式的coherence 环境,堆转储可能会非常棘手,因为应用程序处理整个群集发生问题的对象不一定是本地的JVM。确保始终收集几堆转储转储过了一段时间,因为仅仅是一个时间快照。提交支持问题时,总是包括堆转储。

捕获堆转储最简单的方法是使用分析工具。 jvisualvm甲骨文VirtualVM()的JConsoleJConsole的),JRockit任务控制(JRMC)提供堆转储特点。此外,大多数IDE提供了一个堆转储功能,可以在IDE中工作时,用来捕获堆转储。

作为替代,JMAP工具可以被用来捕获堆转储,和与jHat工具可以用来查看堆转储。例如,使用太平绅士找到一个Java进程ID,然后执行以下命令行:

jmap -dump:format=b,file=/coherence.bin pid

要在浏览器中查看堆转储,执行以下命令行,然后浏览到返回的地址。此文件还可以被加载到了VisualVM观看。

jHat / coherence.bin

jmap的和与jHat的工具不受支持,可能会或可能无法在未来版本的JDK

5.4.6监控作业系统

一个集群成员的操作系统时,始终监控相干为基础的应用程序的故障排除和调试。调整不良的操作系统可以影响整体性能的集群上的应用可能会产生不利影响。性能调整的详细信息,请参阅Oracle Coherence的管理员指南。

特别是在以下几个方面是重要的监测:

    CPU - 处理器长时间运行在100%吗?

    Memory/Swapping - 可用的RAM内存被耗尽,造成用于交换空间?

    Network  - 缓冲区的大小,数据报的大小,和最大传输单元(MTU)的大小影响性能 和成功率?

要监控操作系统的整体健康状况,使用的工具,如vmstat和顶级的Unix / Linux,适用于Windows,使用性能监视器和工具可从Windows Sysinternals的(例如procexp procmon中)。如何测试网络性能的详细说明,请参阅Oracle Coherence的管理员指南。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值