java遠程調試

遠程調試

調試參數說明

-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n
參數 說明
-Xdebug 啓用調試模式
-Xrunjdwp 加載JVM的JPDA參考實現庫
transport=dt_socket Socket鏈接,可選dt_shmem 經過共享內存的方式鏈接到調試服務器
address=5005 調試服務器監聽的端口
server=y 是不是服務器端,n爲客戶端
suspend=n 是否暫停程序,等待調試器鏈接

若調試啓用成功,啓動程序時控制檯會輸出:java

Listening for transport dt_socket at address: 5005

服務端設置方法

Java

java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n -jar xxxx.jar

或者node

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

Hadoop jar

  1. 編輯 ${HADOOP_HOME}/bin/hadoop,找到以下行(在文件末尾)
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"
  1. 改成
exec "$JAVA" -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"

MapReduce Job

  1. 編輯${HADOOP_HOME}/etc/hadoop/mapred-site.xml,增長
<property>  
  <name>mapred.child.java.opts</name>  
  <value>-agentlib:jdwp=transport=dt_socket,address=8883,server=y,suspend=y</value>  
</property>
<property>  
    <name>mapred.tasktracker.map.tasks.maximum</name>  
    <value>1</value>  
</property>  
<property>  
    <name>mapred.reduce.child.java.opts</name>  
    <value>-Xmx1024m -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8884</value>  
</property>  
<property>  
    <name>mapred.tasktracker.reduce.tasks.maximum</name>  
    <value>1</value>  
</property>

Hadoop源碼

  1. 編輯 ${HADOOP_HOME}/bin/hadoop/etc/hadoop/hadoop-env.sh,找到以下行:
export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"
export HADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS"
export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS"
export HADOOP_BALANCER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS"
export HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS"
  1. 根據實際要調試的組件更改相應的行,假設要調試namenode,則修改export HADOOP_NAMENODE_OPTS這行,效果以下:
export HADOOP_NAMENODE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n"

HBase源碼

  1. 編輯 ${HBASE_HOME}/bin/hbase,根據要調試的組件,修改以下位置
elif [ "$COMMAND" = "master" ] ; then
  CLASS='org.apache.hadoop.hbase.master.HMaster'
  if [ "$1" != "stop" ] ; then
    HBASE_OPTS="$HBASE_OPTS $HBASE_MASTER_OPTS"  #若要調試HMaster請修改此行
    #HBASE_OPTS="$HBASE_OPTS $HBASE_MASTER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n"
  fi
elif [ "$COMMAND" = "regionserver" ] ; then
  CLASS='org.apache.hadoop.hbase.regionserver.HRegionServer'
  if [ "$1" != "stop" ] ; then
    HBASE_OPTS="$HBASE_OPTS $HBASE_REGIONSERVER_OPTS" #若要調試RegionServer請修改此行
    #HBASE_OPTS="$HBASE_OPTS $HBASE_REGIONSERVER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n"
  fi

Tomcat WebApp

  1. 編輯 ${TOMCAT_HOME}/bin/catalina.sh,首行添加
CATALINA_OPTS="-Xdebug  -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

客戶端設置方法

Intelij IDEA

  1. 服務端設置調試參數並啓動程序
  2. 菜單選擇: Run -> Edit Configuration
  3. 點擊左側視圖上方的加號,選擇Remote,如圖
  4. 設置調試名稱(這裏設爲remote),配置服務器IP和端口(端口要和遠程端配置的端口保持一致),如圖<br>
  5. 點擊OK
  6. 菜單選擇:Run -> Debug
  7. 選擇設置好的調試名稱:remote,如圖<br>
  8. 接下來跟調試本地程序同樣

Eclipse

  1. 服務端設置調試參數並啓動程序
  2. 菜單選擇: Run -> Debug Configuration
  3. 左側視圖中,雙擊Remote Java Application建立一個遠程調試(如圖)<br>
  4. 選擇要調試的Project
  5. 配置服務器IP和端口(端口要和遠程端配置的端口保持一致)
  6. 點擊Debug開始調試
  7. 接下來跟調試本地程序同樣
相關文章
相關標籤/搜索