场景:
Hello World上线了,突然有一天cpu跑得比珠穆朗玛峰还高,经过排除不是中毒,UFO路过等因素影响,基本就是代码问题了,所以要查出相关的异常代码。线上不好查,根本不知道哪里的错,此时可以用greys-anatomy来进行排查。
项目模拟:
建一个小小的web项目,里面有一个简单的servlet,一个简单的java类
One.java:简单的servlet
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.test.Test;
@WebServlet("/One")
public class One extends HttpServlet {
private static final long serialVersionUID = 1L;
public One() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
public void init() throws ServletException {
super.init();
Test.hello();// 初始化时调用这个hello(),里面是个死循环
}
}
Test:简单的类
package cn.test;
public class Test {
public static void hello() {
while(true){// 死循环,让CPU嗨越来
System.out.println("=====================");
}
}
}
OK,准备好就丢到tomcat上跑
步骤:
1、用 top 命令可以查看CPU使用频率,很高。拿到PID:2910
同时我们可以通过 命令 ps -ef|grep java 可以查出这个pid是tomcat(如下图),也是就说这个tomcat下的项目CPU使用率高
2、安装 greys-anatomy ,安装方法:https://github.com/oldmanpushcart/greys-anatomy/wiki/installing,选择安装在greys目录下
3、安装完 greys-anatomy 后,进入greys目录,执行 ./greys.sh 2910 (2910是从步骤一里拿的PID),效果如下图:
4、在greys目录下执行 top -t 3 -d (意思是查看cpu使用率最高的前3条信息,数字3可以随便换),效果如下图,
这样子就看出问题在哪里了,直接修改了
笔记记录完毕,撤!