Java面试题~面试官:你是怎么定位、排查、诊断生产环境的Bug的?

作为一名Java程序猿,“沟通需求”、“设计数据库”、“建表”以及“编码开发”是家常便饭的事,每天几乎都得重复性干这样的活,有的甚至还乐此不彼!(当然啦,前提是钱给到位了~~);但若要问起他们对什么东西相当敏感、甚至偶尔还会出现反感的话,那当属Bug和一些疑难杂症 无疑了!而如何在线上生产环境快速定位、排查以及诊断相应的Bug、解决相应的疑难杂症便成为了一个值得探讨的话题,话不多说,咱们直接进入正文!!!

    先不绕弯子,咱们直接先说答案吧:借助Alibaba开源的Java诊断工具Arthas可以快速直观地定位、排查、诊断生产环境中的Bug;

      这时候就有小伙伴可能会问了,这家伙是啥玩意?怎么就可以快速定位、排查、诊断生产环境的Bug?它在实际生产环境中又是怎么用的呢?能不能来点实际的啊?……   

    别急啊,容debug娓娓道来………先说说Arthas是啥玩意吧:

    这家伙是“Alibaba开源的Java应用线上诊断工具,深受开发者喜爱”,这是Arthas的官方定义,enenen……这丫的也太短了吧………,算了,大道至简,这丝毫不影响debug对它的爱慕,感兴趣的小伙伴可以点击其开源地址:

  1. https://github.com/alibaba/arthas/blob/master/README_CN.md  
  2. arthas: Arthas(阿尔萨斯)是阿里巴巴开源的 Java 诊断工具

附注:有些小伙伴可能访问不了github,没关系,点击第(2)个链接,那是debug专门为大伙儿找的对应的码云的地址;   

接下来,我们来看一下Arthas可以解决什么样的问题?直接看官网的介绍吧:

    毋庸置疑,这是一款强大而且好用的线上诊断工具,若用得好,相信可以干掉许多线上生产环境的疑难杂症,特别是在前后端分离开发、部署的模式下,诸如 快速定位前端传递的参数、查看接口返回的结果、查看接口执行的方法路径及其对应的耗时、监控整个Java应用的内存/CPU等指标的占用等情况,在Arthas面前可以说是小菜一碟

    那么在实际生产环境中该如何使用呢?还是来点实际的吧:

(1)这里我们以Linux环境中部署的“程序员实战基地 fightjava.com” 的课程中心 板块的接口为案例,一同学习并实战Arthas在实际生产环境中的使用;其中这个接口的方法所在的全限定类名为:

com.debug.coding.fight.server.controller.web.IndexCourseController.center()

对应的完整的代码如下所示:

@RestController
public class IndexCourseController extends IndexWebAbstractController{

    private static final Logger log= LoggerFactory.getLogger(IndexCourseController.class);

    //首页课程中心
    @RequestMapping(value = prefix + "/center", method = RequestMethod.GET)
    public BaseResponse center(@Validated IndexCourseQuery query, BindingResult result){
        if (result.hasErrors() || query.getPageNo() <= 0 || query.getPageSize() <= 0) {
            return new BaseResponse(StatusCode.InvalidParams);
        }
        BaseResponse response = new BaseResponse(StatusCode.Success);
        try {
          //其中indexCourseService.indexCourseCenter(query)为具体执行的代码逻辑
          response.setData(indexCourseService.indexCourseCenter(query));
        } catch (Exception e) {
            return new BaseResponse(StatusCode.Fail.getCode(), e.getMessage());
        }
        return response;
    }
}

    其中,该方法的请求参数为IndexCourseQuery,其定义如下所示:

@Data
@ToString
public class IndexCourseQuery implements Serializable {
    @NotNull
    private Integer pageNo=1;
    @NotNull
    private Integer pageSize=Constant.COURSE_CENTER_PAGE_SIZE;

    private String search;
    private Integer typeId;
}

    而响应结果是塞到BaseResponse类中的,其结果是indexCourseService服务类调用indexCourseCenter()方法返回的,类型为:Map<String, Object>,里面有许多核心数据,在这里就不贴出来了,大伙儿可以访问程序员实战基地 然后,点击课程中心,F12即可看到请求接口链接后返回的响应结果:

(2)OK,介绍了那么多,可能有些小伙伴有疑惑“这跟Arthas有啥关系?” 实不相瞒,还真有关系,因为debug将以这个板块、接口为案例,基于Linux环境查看整个Java应用的资源分配情况、接口调用的入参、接口返回的结果、接口方法调用的路径及其对应的耗时………那就直接来吧! 

更多请见:http://www.mark-to-win.com/tutorial/51078.html  

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值