1. 程式人生 > >HBase之遠端除錯

HBase之遠端除錯

既然要做分析,光肉眼執行肯定是不夠的,能單步斷點除錯就完美了,這裡就需要遠端除錯了。遠端除錯是JDWP提供的,通過Agent library的形式載入到JVM中,與編譯無關,所以無需重新編譯,只要執行Java程式時加入除錯引數即可。

我們通過IDE來建立除錯配置,以Intellij IDEA為例,選擇Edit Configurations,新增Remote,就可以看到IDE提供的除錯引數,把它加到Java的執行引數裡就可以了。

HBase的啟動指令碼start-hbase.sh,實際執行在bin/hbase檔案中。通過修改bin/hbase檔案,把除錯引數加進去,就可以遠端除錯了。只要在最終執行java之前加入就行,為了方便查詢,我加在了最後一段之前。除錯時如果配置了兩個程序都開啟除錯,會導致搶佔同一個埠,可以一次只調試一個程序或者修改埠號來避免衝突。

...

####################################################################
# masa's remote debugger
####################################################################
REMOTE_DEBUGGER="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=localhost:5005"
# 除錯Master
# if [ "$COMMAND" = "master" ] ; then
# if [ "$1" != "stop" ] && [ "$1" != "clear" ] ; then # HBASE_OPTS="$HBASE_OPTS $REMOTE_DEBUGGER" # fi # fi # 除錯RegionServer if [ "$COMMAND" = "regionserver" ] ; then if [ "$1" != "stop" ] ; then HBASE_OPTS="$HBASE_OPTS $REMOTE_DEBUGGER" fi fi ################################# END ##############################
HEAP_SETTINGS="$JAVA_HEAP_MAX $JAVA_OFFHEAP_MAX" # Exec unless HBASE_NOEXEC is set. export CLASSPATH if [ "${HBASE_NOEXEC}" != "" ]; then "$JAVA" -Dproc_$COMMAND -XX:OnOutOfMemoryError="kill -9 %p" $HEAP_SETTINGS $HBASE_OPTS $CLASS "[email protected]" else exec "$JAVA" -Dproc_$COMMAND -XX:OnOutOfMemoryError="kill -9 %p" $HEAP_SETTINGS $HBASE_OPTS $CLASS "[email protected]" fi

**除錯HBase時,還需要將hbase.zookeeper.property.tickTime、hbase.client.scanner.timeout.period等引數時間設的長一些,設成1800000(半小時)就差不多了,以免因為除錯時間過長導致連線超時斷開、Server關閉等問題。**修改conf/hbase-site.xml,增加這4個引數。

<configuration>
    <property>
        <name>hbase.zookeeper.property.tickTime</name>
        <value>1800000</value>
    </property>
    <property>
        <name>zookeeper.session.timeout</name>
        <value>1800000</value>
    </property>
    <property>
        <name>hbase.client.scanner.timeout.period</name>
        <value>1800000</value>
    </property>
    <property>
        <name>hbase.rpc.timeout</name>
        <value>1800000</value>
    </property>
    <property>
        <name>hbase.rpc.shortoperation.timeout</name>
        <value>1800000</value>
    </property>
</configuration>

-END-