Java代码调试总结(待续)

远程java debug,VisualVM远程监控JVM

Posted by carm on April 2, 2019

Java代码调试总结

远程Debug

java启动命令后面添加参数:

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

suspend可选值为: y/n

打印GC信息

-Xms20M -Xmx20M -Xmn10M -verbose:gc -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/tmp/gc.log -XX:+PrintGCTimeStamps

Spark executor远程Debug

spark-submit --conf spark.executor.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=4009

Java堆溢出Dump

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump

查看线程内存消耗

-XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=summary -XX:+PrintNMTStatistics

如使用java -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=summary -XX:+PrintNMTStatistics -version,查看-version命令线程内存消耗

打印Log Debug日志

修改log4j.properties文件,设置类的日志级别为debug

log4j.logger.org.apache.spark.scheduler.DAGScheduler=DEBUG

输出相关日志到一个单独的文件中

log4j.logger.org.apache.spark.scheduler.DAGScheduler=DEBUG,TTOUT log4j.appender.TTOUT=org.apache.log4j.RollingFileAppender log4j.appender.TTOUT.File=${log.dir}/DAGScheduler.log log4j.appender.TTOUT.layout=org.apache.log4j.PatternLayout log4j.appender.TTOUT.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2}: %m%n

VisualVM远程监控

1、启动jstatd服务

创建安全策略文件
# mkdir /home/carm/security
# vim jstatd-all.policy

在jstatd-all.policy文件中写入下面内容:

grant codebase "file:${java.home}/../lib/tools.jar" {   
    permission java.security.AllPermission;
};

启动jstatd
jstatd -p 1099 -J-Djava.security.policy=/home/carm/security/jstatd-all.policy -J-Djava.rmi.server.hostname=10.3.71.103

2、 本地VisualVM配置

本地打开VisualVM的应用程序窗口,右键单击【远程】》【添加远程主机】》【主机名】中输入远程主机的IP地址
点击【高级设置】输入远程主机开启的监控端口,点击【确定】完成配置。