diff --git a/arthas-boot.jar b/arthas-boot.jar index cea4d74a4..614a31633 100644 Binary files a/arthas-boot.jar and b/arthas-boot.jar differ diff --git a/as.sh b/as.sh index 58c4f8fa3..cf6504acc 100755 --- a/as.sh +++ b/as.sh @@ -8,10 +8,10 @@ # program : Arthas # author : Core Engine @ Taobao.com -# date : 2018-12-13 +# date : 2018-12-20 # current arthas script version -ARTHAS_SCRIPT_VERSION=3.0.5.1 +ARTHAS_SCRIPT_VERSION=3.0.5.2 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" @@ -246,6 +246,23 @@ reset_for_env() exit_on_err 1 "Can not find JAVA_HOME, please set \$JAVA_HOME bash env first." fi + # when java version less than 9, we can use tools.jar to confirm java home. + # when java version greater than 9, there is no tools.jar. + if [[ "$JAVA_VERSION" -lt 9 ]];then + # possible java homes + javaHomes=("${JAVA_HOME%%/}" "${JAVA_HOME%%/}/.." "${JAVA_HOME%%/}/../..") + for javaHome in ${javaHomes[@]} + do + toolsJar="$javaHome/lib/tools.jar" + if [ -f $toolsJar ]; then + JAVA_HOME=$( rreadlink $javaHome ) + BOOT_CLASSPATH=-Xbootclasspath/a:$( rreadlink $toolsJar ) + break + fi + done + [ -z "${BOOT_CLASSPATH}" ] && exit_on_err 1 "tools.jar was not found, so arthas could not be launched!" + fi + echo "[INFO] JAVA_HOME: ${JAVA_HOME}" # maybe 1.8.0_162 , 11-ea @@ -268,16 +285,6 @@ reset_for_env() fi done - # when java version greater than 9, there is no tools.jar - if [[ "$JAVA_VERSION" -lt 9 ]];then - # check tools.jar exists - if [ ! -f "${JAVA_HOME}/lib/tools.jar" ]; then - exit_on_err 1 "${JAVA_HOME}/lib/tools.jar does not exist, arthas could not be launched!" - else - BOOT_CLASSPATH=-Xbootclasspath/a:${JAVA_HOME}/lib/tools.jar - fi - fi - # reset CHARSET for alibaba opts, we use GBK [[ -x /opt/taobao/java ]] && JVM_OPTS="-Dinput.encoding=GBK ${JVM_OPTS} " @@ -422,7 +429,7 @@ WIKI: Here is the list of possible java process(es) to attatch: " -$(call_jps) | grep -v sun.tools.jps.Jps +call_jps | grep -v sun.tools.jps.Jps }