第一百二十九期:阿里内部员工,排查Java问题常用的工具单

平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常觉得帮助很大的工具,大家一起进步。

作者:佚名

 

阿里内部员工,排查Java问题常用的工具单

前言

平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常觉得帮助很大的工具,大家一起进步。

Linux命令类

tail
最常用的tail -f

阿里内部员工,排查Java问题常用的工具单

 

grep

阿里内部员工,排查Java问题常用的工具单

 

awk

1 基础命令

阿里内部员工,排查Java问题常用的工具单

 

2 匹配

阿里内部员工,排查Java问题常用的工具单

 

3 内建变量

NR:NR表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,NR可以理解为Number of Record的缩写。

FNR:在awk处理多个输入文件的时候,在处理完第一个文件后,NR并不会从1开始,而是继续累加,因此就出现了FNR,每当处理一个新文件的时候,FNR就从1开始计数,FNR可以理解为File Number of Record。

NF: NF表示目前的记录被分割的字段的数目,NF可以理解为Number of Field。

find

阿里内部员工,排查Java问题常用的工具单

 

pgm

批量查询vm-shopbase满足条件的日志

阿里内部员工,排查Java问题常用的工具单

 

tsar

tsar是咱公司自己的采集工具。很好用, 将历史收集到的数据持久化在磁盘上,所以我们快速来查询历史的系统数据。当然实时的应用情况也是可以查询的啦。大部分机器上都有安装。

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

top

top除了看一些基本信息之外,剩下的就是配合来查询vm的各种问题了

阿里内部员工,排查Java问题常用的工具单

 

获得线程10进制转16进制后jstack去抓看这个线程到底在干啥

其他

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

排查利器

btrace
首当其冲的要说的是btrace。真是生产环境&预发的排查问题大杀器。简介什么的就不说了。直接上代码干

1、查看当前谁调用了ArrayList的add方法,同时只打印当前ArrayList的size大于500的线程调用栈

阿里内部员工,排查Java问题常用的工具单

 

2、监控当前服务方法被调用时返回的值以及请求的参数

阿里内部员工,排查Java问题常用的工具单

 

注意:

  1. 经过观察,1.3.9的release输出不稳定,要多触发几次才能看到正确的结果
  2. 正则表达式匹配trace类时范围一定要控制,否则极有可能出现跑满CPU导致应用卡死的情况
  3. 由于是字节码注入的原理,想要应用恢复到正常情况,需要重启应用。

Greys

说几个挺棒的功能(部分功能和btrace重合):

sc -df xxx: 输出当前类的详情,包括源码位置和classloader结构

trace class method: 相当喜欢这个功能! 很早前可以早JProfiler看到这个功能。打印出当前方法调用的耗时情况,细分到每个方法。

javOSize

就说一个功能
classes:通过修改了字节码,改变了类的内容,即时生效。所以可以做到快速的在某个地方打个日志看看输出,缺点是对代码的侵入性太大。但是如果自己知道自己在干嘛,的确是不错的玩意儿。

其他功能Greys和btrace都能很轻易做的到,不说了。

JProfiler

之前判断许多问题要通过JProfiler,但是现在Greys和btrace基本都能搞定了。再加上出问题的基本上都是生产环境(网络隔离),所以基本不怎么使用了,但是还是要标记一下。

大杀器

eclipseMAT
可作为eclipse的插件,也可作为单独的程序打开。

Java三板斧,噢不对,是七把

jps
我只用一条命令:

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

jstack

普通用法:

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

native+java栈:

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

jinfo

可看系统启动的参数,如下

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

jmap

两个用途

1.查看堆的情况

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

2.dump

阿里内部员工,排查Java问题常用的工具单

 

或者

阿里内部员工,排查Java问题常用的工具单

 

3.看看堆都被谁占了? 再配合zprofiler和btrace,排查问题简直是如虎添翼

阿里内部员工,排查Java问题常用的工具单

 

jstat

jstat参数众多,但是使用一个就够了

阿里内部员工,排查Java问题常用的工具单

 

阿里内部员工,排查Java问题常用的工具单

 

jdb

时至今日,jdb也是经常使用的。
jdb可以用来预发debug,假设你预发的java_home是/opt/taobao/java/,远程调试端口是8000.那么
sudo -u admin /opt/taobao/java/bin/jdb -attach 8000.

阿里内部员工,排查Java问题常用的工具单

 

出现以上代表jdb启动成功。后续可以进行设置断点进行调试。

CHLSDB

CHLSDB感觉很多情况下可以看到更好玩的东西,不详细叙述了。查询资料听说jstack和jmap等工具就是基于它的。

阿里内部员工,排查Java问题常用的工具单

 

plugin of intellij idea

key promoter

快捷键一次你记不住,多来几次你总能记住了吧?

阿里内部员工,排查Java问题常用的工具单

 

maven helper

分析maven依赖的好帮手。

VM options

1、你的类到底是从哪个文件加载进来的?

阿里内部员工,排查Java问题常用的工具单

 

2、应用挂了输出dump文件

阿里内部员工,排查Java问题常用的工具单

 

jar包冲突

把这个单独写个大标题不过分吧?每个人或多或少都处理过这种烦人的case。我特么下边这么多方案不信就搞不定你?

阿里内部员工,排查Java问题常用的工具单

 

打出所有依赖

阿里内部员工,排查Java问题常用的工具单

 

只打出指定groupId和artifactId的依赖关系

阿里内部员工,排查Java问题常用的工具单

 

vm启动脚本加入。在tomcat启动脚本中可见加载类的详细信息

阿里内部员工,排查Java问题常用的工具单

 

vm启动脚本加入。在tomcat启动脚本中可见加载类的详细信息

阿里内部员工,排查Java问题常用的工具单

 

greys的sc命令也能清晰的看到当前类是从哪里加载过来的

阿里内部员工,排查Java问题常用的工具单

 

其他

dmesg
如果发现自己的java进程悄无声息的消失了,几乎没有留下任何线索,那么dmesg一发,很有可能有你想要的。

阿里内部员工,排查Java问题常用的工具单

 

去找关键字oom_killer。找到的结果类似如下:

阿里内部员工,排查Java问题常用的工具单

 

以上表明,对应的java进程被系统的OOM Killer给干掉了,得分为854.
解释一下OOM killer(Out-Of-Memory killer),该机制会监控机器的内存资源消耗。当机器内存耗尽前,该机制会扫描所有的进程(按照一定规则计算,内存占用,时间等),挑选出得分最高的进程,然后杀死,从而保护机器。

dmesg日志时间转换公式:
log实际时间=格林威治1970-01-01+(当前时间秒数-系统启动至今的秒数+dmesg打印的log时间)秒数:

阿里内部员工,排查Java问题常用的工具单

 

剩下的,就是看看为什么内存这么大,触发了OOM-Killer了。

新技能get

RateLimiter

想要精细的控制QPS? 比如这样一个场景,你调用某个接口,对方明确需要你限制你的QPS在400之内你怎么控制?这个时候RateLimiter就有了用武之地。

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期科技领域知识)

歌谣带你看java面试题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一百三十期:14种常见编程语言的优缺点及应用范围

C语言是一门通用计算机编程语言,应用广泛。面向过程的,数据与算法分开。它的重点在于算法和数据结构。1972年由美国贝尔实验室在B语言的基础上设计出。 作者:编程小新 C 概述:C语言是一门通用计算机编程语言,应用广泛。面向过程…

第一百三十一期:2019年容器使用报告:Docker 和 Kubernetes 王者地位不倒!

近日,容器创业公司 Sysdig 发布了 2019 年容器使用报告。这是 Sysdig 第三年发布容器年度使用报告,与之前不同的是,今年的调查结合了更多的数据源,并深入挖掘了 Kubernetes 的使用模式。 作者:高效开发运维 近日&…

Flask 路由映射对于双斜线的处理 //a//b

例子 from flask import Flask import time from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoopapp Flask(__name__)app.route(//abc//a) def index():# time.sleep(5)return OKapp.route(/abc//a) def in…

⼤规模⽆监督预训练语⾔模型与应⽤(上)

文章目录1 单词作为语言模型的基本单位的缺点2 character level modeling3预训练句子向量3.1 skip-thought3.2 InferSent3.3 句子向量评价数据集4 预训练文档向量5 ELMO1 单词作为语言模型的基本单位的缺点 单词量有限,遇到没有见过的单词只能以UNK表示。 模型参数…

第一百三十二期:MySQL系列:一句SQL,MySQL是怎么工作的?

当我们在mysql窗口或者数据库连接工具中输入一句sql后,我们就可以获取到想要的数据,这中间MySQL到底是怎么工作的呢? 作者:Java架构学习交流 对于MySQL而言,其实分为客户端与服务端。 服务端,就是MySQL应…

Visual Studio 2005 Tip:编辑项目文件

原文参考自:http://blogs.msdn.com/shawnfa/archive/2006/04/26/582326.aspx很多时候我们需要手动修改VS的项目文件(.csproj/.vbproj),这时大多数人会简单的使用记事本(notepad)打开并编辑。虽然这没什么不…

transformer bert GPT(未完)

原文标题:⼤规模⽆监督预训练语⾔模型与应⽤(中) 文章目录1 transformer1.1 encoder部分1.1.1 Attention定义1.1.2 Multi-head Attention1.1.3 position-wise feed-forward networks1.1.4 positional encoding1.1.5 残差链接1.1.6 layer norm…

spring mvc学习(42):restful的编辑功能实现

上图是目录结构&#xff0c;本节是有问同学的&#xff0c;当好好总结 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

那些年用过的Redis集群架构(含面试解析)

引言 今天&#xff0c;我接到了高中同学刘有码面试失利的消息。 他面试的时候&#xff0c;身份是某知名公司的小码农一枚&#xff0c;却因为不懂自己生产上Redis是如何部署的&#xff0c;导致面试失败&#xff01; 人间惨剧&#xff0c;莫过于此。 接到他面试失利的消息&#x…

再谈BERT

三次讲到了BERT。第一次是nlp中的经典深度学习模型(二)&#xff0c;第二次是transformer & bert &GPT&#xff0c;这是第三次。 文章目录1 关于预训练模型1.1预训练概念1.2 再谈语言模型1.3 ELMo1.4 GPT2 BERT2.1 BERT特点2.2架构2.3 预训练任务2.3.1 masked language …

第一百三十三期:MySQL锁会不会,你就差看一看咯

本文章向大家介绍MySQL锁详细讲解&#xff0c;包括数据库锁基本知识、表锁、表读锁、表写锁、行锁、MVCC、事务的隔离级别、悲观锁、乐观锁、间隙锁GAP、死锁等等&#xff0c;需要的朋友可以参考一下。 作者&#xff1a;php自学中心 本文章向大家介绍MySQL锁详细讲解&#xff…

[导入][你必须知道的.NET]第十回:品味类型---值类型与引用类型(下)-应用征途...

摘要: 本文将值类型和引用类型的讨论从应用示例角度来进一步做以延伸&#xff0c;可以看作是对前两回的补充性探讨。我们从类型定义、实例创建、参数传递、类型判等、垃圾回收等几个方面来简要的对上两回的内容做以剖析&#xff0c;并以一定的IL语言和内存机制来说明&#xff0…

云开发新能力,支持 HTTP 调用 API

今天来上班打开电脑&#xff0c;总感觉微信开发文档哪里有点不太一样&#xff0c;研究了半天原来是云开发又多了神级功能——HTTP API&#xff01; HTTP API是什么&#xff1f;简单来说就是通过云开发HTTP API&#xff0c;可以不需要通过微信小程序或云开发控制台&#xff0c;就…

mac下pip install 安装只能选择python2.7的问题

mac自带python2.7。 我用brew install安装过python3:brew install python3 我安装了anaconda3。因为它自带了很多包。所以我无论是用pycharm编程还是jupyter notebook一直都用的是anaconda3带的python。 后来发现用pip install 安装的包&#xff0c;在pycharm工程中用不了。更有…

第一百三十四期:MySQL分页查询方法及优化

在MySQL中&#xff0c;分页查询一般都是使用limit子句实现&#xff0c;limit子句声明如下&#xff1a;LIMIT子句可以被用于指定 SELECT 语句返回的记录数。 作者&#xff1a;青芽草 分页查询方法&#xff1a; 在MySQL中&#xff0c;分页查询一般都是使用limit子句实现&#x…

One2One主键关联的实现

主键关联&#xff0c;产生主键的是A类&#xff0c;与A相同主键的是B类 主键对应的A类&#xff0c;hbm.xml文件与.cs文件均无任何特别&#xff0c;与单表相同 与A相同的主键B类&#xff0c; Hbm.xml文件&#xff1a; <id name"Id"column"ID"type"Gu…

scroll

因为想赶紧开始敲考核任务的&#xff0c;所以就跳着来学 1. window.pageYOffset可以获取滚动了的高度 2.转载于:https://www.cnblogs.com/lijingjaj/p/11206841.html

第一百三十五期:如何模拟一次阿里双11秒杀场景的实现?程序员必看

秒杀活动可以说在互联网上随处可见&#xff0c;从12306抢票&#xff0c;到聚划算抢购&#xff0c;我们生活的方方面面都可以看到秒杀的身影。 作者&#xff1a;IT技术管理那些事儿 秒杀活动可以说在互联网上随处可见&#xff0c;从12306抢票&#xff0c;到聚划算抢购&#xf…

什么是“中台”

“中台”概念起源于军事范畴&#xff0c;其精髓是“大平台支撑精兵作战”&#xff0c;即前线小团队作战&#xff0c;后方建设强大的火力平台和信息化指挥系统机动支撑。企业中台战略随着Supercell、阿里巴巴、腾讯、华为等国内外科技巨头的应用和宣传&#xff0c;近年来在国内被…

第一百三十六期:详细讲解 Redis 的两种安装部署方式

Redis 是一款比较常用的 NoSQL 数据库&#xff0c;我们通常使用 Redis 来做缓存&#xff0c;这是一篇关于 Redis 安装的文章&#xff0c;所以不会涉及到 Redis 的高级特性和使用场景&#xff0c;Redis 能够兼容绝大部分的 POSIX 系统。 作者&#xff1a;平头哥 Redis 是一款比…