java 运行服务异常,进入服务分析工具 arthas

线程分析工具。arthas。

解决问题:

找到繁忙的线程,找到关键的程序。找到程序的问题。解决掉。

参考文档:

https://arthas.gitee.io/docker.html

https://arthas.aliyun.com/doc/
 

在linux上安装arthas服务。

因为我们服务在编辑器开发完成后,都是需要到linux等环境下运行,所以,如果遇到问题,那么需要到环境上分析问题。

不想每次打开都指定arthas的路径,那么可以将他放在/usr/bin下。

找个目录安装,

mkdir -p /opt/arthas
wget https://alibaba.github.io/arthas/arthas-boot.jar

新建 arthas.sh

1、如果监控本机java服务。

# vi /usr/bin/arthas.sh 
增加如下内容
#!/bin/bash
java -jar /opt/arthas/arthas-boot.jar

 

 

2、如果监控容器docker内的服务。

# vi /usr/bin/arthas.sh 
增加如下内容

#!/bin/bash
LINK_PATH=$(readlink $0)
[ "x" = "x$LINK_PATH" ] && CURRENT_PATH=$(dirname $0)
[ "x" != "x$LINK_PATH" ] && CURRENT_PATH=$(dirname $LINK_PATH)
cd $CURRENT_PATH || exit 1
CURRENT_PATH=$(pwd)

count=$(docker ps | wc -l)
[ $count -le 0 ] && echo "no ccjr-system." && exit 0
declare -A idMap
i=1
for line in $(docker ps | awk '{print $1"#"$2"#"$NF}'); do
  idMap[$i]=$line
  i=$(expr $i + 1)
done

for key in ${!idMap[*]}; do
  value=${idMap[$key]}
  t1=$(echo $value | awk -F '#' '{print$1}')
  t2=$(echo $value | awk -F '#' '{print$2}' | awk -F "/" '{print$NF}')
  t3=$(echo $value | awk -F '#' '{print$3}')
  echo "[ $key ] $t1 $t2 $t3"
done

read -p "id:" n
value=${idMap[$n]}
[ -z $value ] && exit 0
t1=$(echo $value | awk -F '#' '{print$1}')
t2=$(echo $value | awk -F '#' '{print$2}')

[ -z $t1 ] && exit 0
echo "------------------------"
echo "[ $n ] $t1 $t2"
echo "------------------------"
docker exec -it $t1 /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"

 

也可以。。

1、先现在到本地,再复制。
wget https://alibaba.github.io/arthas/arthas-boot.jardocker exec -it ${containerId} /bin/bash
docker cp /opt/arthas/arthas-boot.jar mygod:/opt/arthas/arthas 

2、直接下载到容器中 docker exec -it ${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"

 

 

3、在服务器上,任意位置,直接运行arthas.sh就可以开启您的愉快监控寻找问题之旅了。

 

4、退出

# stop

 

posted on 2021-03-18 23:53  陈惟鲜的博客  阅读(178)  评论(0编辑  收藏  举报

导航