开发者学堂课程【线上问题排查利器 Alibaba Arthas(上):快速入门:attach 一个进程】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/746/detail/13186
快速入门:attach 的一个进程
内容介绍:
一、简述 attach 的快速入门
二、具体操作步骤
三、课程小结
一、简述 attach 的快速入门
Attach 中文意为粘附,首先,执行一个jar 包,此jar 包就是一会要粘附或者诊断的jar包,而且在 jar 包的执行过程中,程序不能进行退出,否则将无法诊断arthas,该服务器一般都为24小时可登录状态,那么此时该执行的加码进程是没有退出的,所以我们要先执行这个 jar 包。Jar 包在当前例子实际上为一个死循环,由此并不会退出。然后,通过arthas 来attack 此程序。第三步骤为进行几种常用的命令操作。
二、具体操作步骤
1.准备代码。
此代码不需要用户进行手动输入或复制。注意此代码的内容并不是重点,因为该代码仅为要进行诊断的一个代码,至于代码内容为何不必理会。一个简单的Java 程序,每隔一秒钟随机生成一个整数,对该整数进行质因数的分解,并打印出分解结果。在Java 程序中,一个类为demo,另一个为mathgame。
其中还包含一个统计变量 illegalArgumentCount,该变量是用来统计程序生成不合法的数的个数,因为程序生成的数可能有正负数,负数即为不合法数。在 Java 程序中的 while (true)为一个防止程序退出的死循环。game.(run) 调用run() 进行分解质因数。注意此处 game.(run) 非开启一个线程,仍只是一个线程。run() 用处为随机产生一个整数,有可能为正,有可能为负,然后进行调用方法进行质因数的分解,分解后进行结果的打印。如果得数小于0,则程序会产生异常抛出,表面此操作为不合法并统计不合法数的个数。如果可分解,则直接打印结果。
再次说明,代码不需要用户自主编辑。在安装好 arthas 后,例如进入 arthas 目录,在 level 中进入下一节,在程序下面带了一个 demo.jar 文件,其实刚刚如上提及的 mathgame 就是此 jar 类,所以用户不需要自己再去编译与打包,程序已自动已经为用户打包完成,只需用户直接运行即可。
2.启动 demo
首先,下载已经打包好的arthas-demo.jar 或者用户也可以自己再去单独下载,但是只要装好了arthas,程序就已经带了jar 包,那么接下来就进行执行操作。首先输入java-jar arthas-demo.jar,程序开始执行。程序运行过程中合法的输出,非法的进行个数统计。每一秒进行一次计算,程序为一个死循环。建议同时打开三个窗口,分别为demo、arthas 与看运行结果的程序。
3.启动 arthas
因为arthas-demo.jar. 进程新开了一个窗口,所以另开一个命令窗口执行arthas-boot.jar,启动arthas-boot.jar,用Java-jar arthas-boot.jar 此时,程序就会检测Java 虚拟机当中所有在运行的进程,程序找到arthas-demo.jar,此时输入1,然后按回车键,此时即可粘附成功。
如果粘附成功,在arthas-demo.jar 那个窗口会出现日志记录的信息并记录在目录中。如果端口号被占用,也可以通过java-jar arthas-boot.jar﹉telnet-port 9998﹉http-port-1命令换成另一个端口号执行。
4.通过浏览器执行 arthas
Arthas 目前支持Web Console,用户在attach 成功后,可以直接访问http//127.0.0.1:3658。用户其实也可以在Windows 下面通过端口号来访问程序。用户可以连接地址arthas-client connect 127.0.0.1:3658账号。首先,打开一个浏览器。然后,在浏览器上方搜索框输入127.0.0.1:3658,点击回车,即可看到浏览器里的界面。在此界面,可以敲击arthas 中的命令,例如help -回车,即可看到所有arthas 的命令。
三、课程小结
如若想要黏附一个进程,用户需要启动被诊断进程。
启动arthas-boot.jar,粘贴上面的进程。
不但可以通过命令行的方式来操作arthas,也可以通过浏览器来访问arthas。




