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地址
点击【高级设置】输入远程主机开启的监控端口,点击【确定】完成配置。