JConsole、VisualVM监控JVM(JMX)

JAVA_OPTS后加:-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

JVM远程调试

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=50050

OR:

JAVA_OPTS="-server -Xms2g -Xmx5g -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnload
ingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true -agentlib:jdwp=transport=dt_socket,server=y,
suspend=n,address=50050 -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.managem
ent.jmxremote.ssl=false"

jVisualVm--本地图形监控远程Spark的GC情况--Visual GC插件

--监控主机上的所有JVM实例
1、远程集群:需要简单配置并启动jstatd。方法比较简单,共两步:
i. 在JAVA_HOME的bin目录下新建一个jstatd.all.policy的文件,文件内容为:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
ii. 进入JDK bin目录,执行:./jstatd -J-Djava.security.policy=./jstatd.all.policy &。

[]内的参数可选,将命令中的yourip替换成Spark的master所在的node的地址,该地址也是jvisualvm需要连接的地址。确保不会报RMI和Connect的错误。
2、本地主机:无需配置,启动jvisualvm即可

堆(Heap) :JVM管理的内存叫堆

分代:根据对象的生命周期长短,把堆分为3个代:Young,Old和Permanent,根据不同代的特点采用不同的收集算法,扬长避短也。

Young(年轻代)

年轻代分三个区。一个Eden区,两个Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当这个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当这个Survivor去也满了的时候,从第一个Survivor区复制过来的并且此时还存活的对象,将被复制“年老区(Tenured)”。需要注意,Survivor的两个区是对称的,没先后关系,所以同一个区中可能同时存在从Eden复制过来对象,和从前一个Survivor复制过来的对象,而复制到年老区的只有从第一个Survivor复制过来的对象。而且,Survivor区总有一个是空的。

Tenured(年老代)

年老代存放从年轻代存活的对象。一般来说年老代存放的都是生命期较长的对象。

Perm(持久代)

用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class,例如Hibernate等,在这种时候需要设置一个比较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过-XX:MaxPermSize=进行设置。

GC的基本概念

gc分为full gc 跟 minor gc,当每一块区满的时候都会引发gc。

Scavenge GC

一般情况下,当新对象生成,并且在Eden申请空间失败时,就触发了Scavenge GC,堆Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。

Full GC

对整个堆进行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此应该尽可能减少Full GC。有如下原因可能导致Full GC:

1.上一次GC之后Heap的各域分配策略动态变化

2.System.gc()被显示调用

3.Perm域被写满

4.Tenured被写满

命令行启动Java

export COLLECTOR_LIB_DIR=${COLLECTOR_HOME}/lib

export COLLECTOR_JVM_HEAP_OPTS="-Xms1g -Xmx1536m -Xmn512m"

export COLLECTOR_JVM_OPTS="-server -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true"

export COLLECTOR_LOG_OUT=${COLLECTOR_LOG_DIR}/"collector.out"

export COLLECTOR_JVM_GC_OPTS="-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:${COLLECTOR_LOG_DIR}/collector_gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${COLLECTOR_LOG_DIR}"

nohup "$JAVA" $COLLECTOR_JVM_OPTS $COLLECTOR_JVM_HEAP_OPTS $COLLECTOR_JVM_GC_OPTS $COLLECTOR_JVM_JMX_OPTS -cp "$COLLECTOR_LIB_DIR/*:$COLLECTOR_CONF_DIR/*" $COLLECTOR_CLASS > "$COLLECTOR_LOG_OUT" 2>&1 < /dev/null &

参考:

http://www.ibm.com/developerworks/cn/java/j-lo-visualvm/

JVM监控和Java应用程序调试的更多相关文章

  1. JVM 监控,调优,调试

    JVM监控工具 Java的安装包自带了很多优秀的工具,善用这些工具对于监控和调试Java程序非常有帮助.常用工具如下: jps 用途:jps用来查看JVM里面所有进程的具体状态, 包括进程ID,进程启 ...

  2. Java系列笔记(4) - JVM监控与调优

    目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM ...

  3. [java] JVM监控与调优

    原文出处:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html   光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分 ...

  4. 深入理解java:1.3.2 JVM监控与调优

    学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之. 本篇,来看看[ 如何监控和优化GC机制.] 通过学习,我觉得JVM监控与调优,主要在3个着眼点上: 1,如何配置 ...

  5. Java系列笔记(4) - JVM监控与调优【转】

    Java系列笔记(4) - JVM监控与调优[转]   目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例     光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在 ...

  6. VisualVM监控远程主机上的JAVA应用程序

    使用VisualVM监控远程主机上JAVA应用程序时,需要开启远程主机上的远程监控访问,或者在远程JAVA应用程序启动时,开启远程监控选项,两种方法,选择其中一种就可以开启远程监控功能,配置完成后就可 ...

  7. 利用 Eclipse IDE 的强大功能远程调试 Java 应用程序

    II. Eclipse 连接套接字模式下的 VM 调用示例(具体引用实践) 说明:不管采用哪种方式,调试的源代码都在eclipse的环境下 一.调试方式一(将目标应用程序作为调试的服务器,eclips ...

  8. 在Docker中监控Java应用程序的5个方法

    译者注:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.通常情况下,监控的主要目的在于:减少宕机 ...

  9. JAVA 容器配置 JVM 监控

    目前世面上较流行的JAVA容器工具有:tomcat,jboss,weblogic 在日常工作中,经常会遇到开发需要查看JVM相关信息,这时就需要开启JVM. 一.tomcat 1 修改jdk认证配置文 ...

随机推荐

  1. rhel6用centos163 yum源

    cd /etc/yum.repos.d/ wget wget http://mirrors.163.com/.help/CentOS6-Base-163.repo .repo

  2. Moscow Pre-Finals Workshop 2016. National Taiwan U Selection

    A. As Easy As Possible 每个点往右贪心找最近的点,可以得到一棵树,然后倍增查询即可. 时间复杂度$O((n+m)\log n)$. #include <bits/stdc+ ...

  3. Javascript小括号“()”的多义性

    摘要:本文主要介绍JavaScript中小括号有五种语义. Javascript中小括号有五种语义 语义1,函数声明时参数表 function func(arg1,arg2){ // ... } 语义 ...

  4. POJ3177 & 求边双联通分量

    题意: 给一张无向图,求加多少边使原图任意两点边双联通. SOL: 一个不会写边双点双强联通的傻逼. 一个结论:把一棵树变成满足条件的图需要加的边使入度为1的点数+1除以2.------>就是树 ...

  5. bzoj2962 序列操作 题解

    题目大意: 有一个长度为n的序列,有三个操作1.I a b c表示将[a,b]这一段区间的元素集体增加c,2.R a b表示将[a,b]区间内所有元素变成相反数,3.Q a b c表示询问[a,b]这 ...

  6. A Simple C++ Template Class that Matches a String to a Wildcard Pattern

    A recently implemented enhanced wildcard string matcher, features of which including, Supporting wil ...

  7. Codeforces Round #244 (Div. 2) B. Prison Transfer

    题目是选出c个连续的囚犯,而且囚犯的级别不能大于t #include <iostream> using namespace std; int main(){ int n,t,c; cin ...

  8. static的本质

    通过反编译发现,static的本质是abstract sealed.因此,无法继承System.Math类,因为它是static的.

  9. iOS 自动布局小结

    1> sizeclasses 可以限制某个 storyboard 显示在什么样的屏幕上,如 当前 storyboard 在iPhone 的左斜右斜或 iPad上是否显示.. 2> Hug值 ...

  10. Crystal Reports 2008(水晶报表) 启动时检查更新

    在安装好了Crystal Reports后,每次打开的是都会出现以下提示: 服务器正在运行中 由于另一个程序正在运行中,此操作无法完成.请选择“切换到”来激活正在运行中的程序,并更正问题. 碰到这样的 ...