zoukankan      html  css  js  c++  java
  • TroubleshootingGuide for JavaTM SE 6withHotSpot TM VM (翻译附录1) 规格严格

    最近看这篇技术白皮书,决定把它翻译出来,所以翻译不好的话,请大家指正:

    环境变量与系统属性

    本节描述环境变量和系统属性,这些环境变量和系统属性能在JVM出现问题时提供帮助。

    1、JAVA_HOME环境变量
    2、JAVA_TOOL_OPTIONS环境变量
    3、java.security.debug系统属性

    A.1 JAVA_HOME

    JAVA_HOME环境变量用来指明JDK软件安装目录(这个一般就是我们安装JDK之后,需要设置环境变量的时候,一般会设置这个变量指定JDK安装目录)

    A.2 JAVA_TOOL_OPTIONS

    在许多环境下,用命令行启动程序并不是容易做的事情。这种情景一般发生程序使用嵌入式JVM(这意味它们使用JNI来启动JVM),或者启动过程在启动脚本深处(译者注,这种情况可能脚本嵌套比较深的情况下,武断的添加参数可能带来潜在的问题,不如集中一点来声明较好),在这些情景下,JAVA_TOOL_OPTIONS环境变量对于使用命令行启动时是十分有帮助的。

    当这个环境变量被设置的时候,JNI_CreateJavaVM(这个方法在JNI调用API中)把该环境变量的值设置在它的JavaVMInitArgs参数中的某个选项中。在某种情形下,这个选项因为安全原因而被禁用,例如Solaris操作系统禁用该项当有效用户ID或者组ID与实际用户ID不一致时。

    这个环境变量准许你声明初始化工具集,特别是本地语言或Java语言编写的代理,这些代理使用-agenglib或者-javaagent选项启动,在下面的例子中,该环境变量被设置以便HPROF分析器随着程序启动而启动。
        export JAVA_TOOL_OPTIONS="-agentlib:hprof"
    这个环境变量也可以用来增强命令行选项以达到诊断目的。例如,你可以提供-XX:OnError选项来声明一个脚本或者命令来被执行当一个致命错误发生时。
    因为这个变量在JNI_CreateJavaVM被调用的时候被检查,所以它不能用来增强能够被虚拟机启动时正常处理的命令行选项,例如,VM类型的选择(-client或者-server)
    JAVA_TOOL_OPTIOS环境变量在JAVA_TOOL_OPTIONS section of the JVMTool Interface documentation章节中被详细描述 (http://java.sun.com/javase/6/docs/guide/jvmti/jvmti.html#tooloptions).

    注: 这个选项按照文档一般在JNI中使用,我没有尝试用过,所以谁用过,请仔细说明一下

    A.3 java.security.debug

    java.security.debug系统属性控制着JRE的安全子系统执行时的调试信息是否输出。该选项在当一个SecurityException被抛出的时候,用来诊断与安全管理器相关信息时十分有用。

    这个属性可以有如下值:
    a、access - 打出所有的checkPermission操作
    b、jar - 打出jar验证信息
    c、policy - 打出policy信息
    d、scl - 打出SecureClassLoader被赋予的权限

    下面的子选项可以结合access选项一同使用:
    a、stack - 包含堆栈信息
    b、domain - 打印出所有上下文的domain
    c、failure - 在抛出异常前,打印出堆栈信息以及没有权限访问的domain

    例如,为了打印所有checkPermission方法的结果并且跟踪所有上下文中的domain,设置java.security.debug选项为"access,stack",为了跟踪所有访问失败信息,设置该选项为"access,failure"

    下面的例子展示了当checkPermission失败时候的信息:

    $ java -Djava.security.debug="access,failure" Application
    access denied (java.net.SocketPermission server.foobar.com resolve
    )
    java.lang.Exception: Stack trace
    at java.lang.Thread.dumpStack(Thread.java:1158)
    at java.security.AccessControlContext.checkPermission
    (AccessControlContext.java:253)
    at java.security.AccessController.checkPermission(AccessController.java:427)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.SecurityManager.checkConnect(SecurityManager.java:1031)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1117)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1098)
    at java.net.InetAddress.getAllByName(InetAddress.java:1061)
    at java.net.InetAddress.getByName(InetAddress.java:958)
    at java.net.InetSocketAddress.<init>(InetSocketAddress.java:124)
    at java.net.Socket.<init>(Socket.java:178)
    at Test.main(Test.java:7)


    如果想要了解更信息的话,请参考Security Tutorial (http://java.sun.com/
    developer/onlineTraining/Security/Fundamentals/Security.html).
    注:这个还是很重要,能打印出来的话对于调试还是很有用的,当然抛出Security异常本身已经给了我们相当大的信息量了

  • 相关阅读:
    Pair Project: Elevator Scheduler
    Project: Individual Project
    【homework week5】初步了解敏捷开发——自由与约束的哲学统一
    【homework #1】第一次作业被虐感受
    To be transfered
    谈敏捷,谈开发 --《Agile Software Development》读后感
    结对编程---附加题作业(作业请参考相应博客)
    结对编程-电梯调度算法的实现 (附加题部分请参考对应博客)
    必应缤纷桌面的必应助手-软件分析和用户市场需求之-----二.体验部分 Ryan Mao (毛宇11061171) (完整版本请参考团队博客)
    对学长所谓“改变世界的游戏”《shield star》的运行感想-毛宇部分(完整版本请参考团队博客)
  • 原文地址:https://www.cnblogs.com/diyunpeng/p/2380196.html
Copyright © 2011-2022 走看看