未加星标

阿里员工排查问题的工具清单,总有一款适合你!

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二04 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

阿里员工排查问题的工具清单,总有一款适合你!

这是一篇来源于阿里内部技术论坛的文章,原文在阿里内部获得一致好评。作者已经把这篇文章开放到云栖社区中供外网访问。文章内容做了部分删减,主要删减掉了其中只有阿里内部才能使用的工具的介绍,并删减掉部分只有通过阿里内网才能访问到的链接。

前言

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

闲话不多说,开搞。

linux命令类 tail

最常用的tail -f

tail-300fshopbase.log#倒数300行并进入实时监听文件写入模式 grep grepforestf.txt#文件查找 grepforestf.txtcpf.txt#多文件查找 grep'log'/home/admin-r-n#目录下查找所有符合关键字的文件 catf.txt|grep-ishopbase grep'shopbase'/home/admin-r-n--include*.{vm,java}#指定文件后缀 grep'shopbase'/home/admin-r-n--exclude*.{vm,java}#反匹配 seq10|grep5-A3#上匹配 seq10|grep5-B3#下匹配 seq10|grep5-C3#上下匹配,平时用这个就妥了 catf.txt|grep-c'SHOPBASE' awk 1 、基础命令 awk'{print$4,$6}'f.txt awk'{printNR,$0}'f.txtcpf.txt awk'{printFNR,$0}'f.txtcpf.txt awk'{printFNR,FILENAME,$0}'f.txtcpf.txt awk'{printFILENAME,"NR="NR,"FNR="FNR,"$"NF"="$NF}'f.txtcpf.txt echo1:2:3:4|awk-F:'{print$1,$2,$3,$4}' 2 、匹配 awk'/ldb/{print}'f.txt#匹配ldb awk'!/ldb/{print}'f.txt#不匹配ldb awk'/ldb/&&/LISTEN/{print}'f.txt#匹配ldb和LISTEN awk'$5~/ldb/{print}'f.txt#第五列匹配ldb 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 sudo-uadminfind/home/admin/tmp/usr-name\*.log(多个目录去找) find.-iname\*.txt(大小写都匹配) find.-typed(当前目录下的所有子目录) find/usr-typel(当前目录下所有的符号链接) find/usr-typel-name"z*"-ls(符号链接的详细信息eg:inode,目录) find/home/admin-size+250000k(超过250000k的文件,当然+改成-就是小于了) find/home/adminf-perm777-execls-l{}\;(按照权限查询文件) find/home/admin-atime-11天内访问过的文件 find/home/admin-ctime-11天内状态改变过的文件 find/home/admin-mtime-11天内修改过的文件 find/home/admin-amin-11分钟内访问过的文件 find/home/admin-cmin-11分钟内状态改变过的文件 find/home/admin-mmin-11分钟内修改过的文件 pgm

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

pgm-A-fvm-shopbase'cat/home/admin/shopbase/logs/shopbase.log.2017-01-17|grep2069861630' tsar

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

tsar ###可以查看最近一天的各项指标


阿里员工排查问题的工具清单,总有一款适合你!

tsar --live ###可以查看实时指标,默认五秒一刷


阿里员工排查问题的工具清单,总有一款适合你!
tsar--mem tsar--load tsar--cpu ###当然这个也可以和-d参数配合来查询某天的单个指标的情况
阿里员工排查问题的工具清单,总有一款适合你!

tsar --memtsar --loadtsar --cpu###当然这个也可以和-d参数配合来查询某天的单个指标的情况


阿里员工排查问题的工具清单,总有一款适合你!
阿里员工排查问题的工具清单,总有一款适合你!
阿里员工排查问题的工具清单,总有一款适合你!
top

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

ps-ef|grepjava top-H-ppid

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

其他 netstat-nat|awk'{print$6}'|sort|uniq-c|sort-rn#查看当前连接,注意close_wait偏高的情况,比如如下
阿里员工排查问题的工具清单,总有一款适合你!
阿里员工排查问题的工具清单,总有一款适合你!
排查利器 btrace

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

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

@OnMethod(clazz="java.util.ArrayList",method="add",location=@Location(value=Kind.CALL,clazz="/.*/",method="/.*/")) publicstaticvoidm(@ProbeClassNameStringprobeClass,@ProbeMethodNameStringprobeMethod,@TargetInstanceObjectinstance,@TargetMethodOrFieldStringmethod){ if(getInt(field("java.util.ArrayList","size"),instance)>479){ println("checkwhoArrayList.addmethod:"+probeClass+"#"+probeMethod+",method:"+method+",size:"+getInt(field("java.util.ArrayList","size"),instance)); jstack(); println(); println("==========================="); println(); } }

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

@OnMethod(clazz="com.taobao.sellerhome.transfer.biz.impl.C2CApplyerServiceImpl",method="nav",location=@Location(value=Kind.RETURN)) publicstaticvoidmt(longuserId,intcurrent,intrelation,Stringcheck,StringredirectUrl,@ReturnAnyTyperesult){ println("parameter#userId:"+userId+",current:"+current+",relation:"+relation+",check:"+check+",redirectUrl:"+redirectUrl+",result:"+result); }

更多内容,感兴趣的请移步:https://github.com/btraceio/btrace

注意:

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

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

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

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

javOSize

就说一个功能

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

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

JProfiler

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

官网请移步https://www.ej-technologies.com/products/jprofiler/overview.html

大杀器 eclipseMAT

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

详情请移步http://www.eclipse.org/mat/

java三板斧,噢不对,是七把 jps

我只用一条命令:

sudo-uadmin/opt/taobao/java/bin/jps-mlvV
阿里员工排查问题的工具清单,总有一款适合你!
jstack

普通用法:

sudo-uadmin/opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jstack2815
阿里员工排查问题的工具清单,总有一款适合你!

native+java栈:

sudo-uadmin/opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jstack-m2815
阿里员工排查问题的工具清单,总有一款适合你!
jinfo

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

sudo-uadmin/opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jinfo-flags2815
阿里员工排查问题的工具清单,总有一款适合你!
jmap

两个用途

1.查看堆的情况 sudo-uadmin/opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jmap-heap2815
阿里员工排查问题的工具清单,总有一款适合你!
阿里员工排查问题的工具清单,总有一款适合你!
2.dump sudo-uadmin/opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jmap-dump:live,format=b,file=/tmp/heap2.bin2815

或者

sudo-uadmin/opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jmap-dump:format=b,file=/tmp/heap3.bin2815 3.看看堆都被谁占了? 再配合zprofiler和btrace,排查问题简直是如虎添翼 sudo-uadmin/opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jmap-histo2815|head-10
阿里员工排查问题的工具清单,总有一款适合你!
jstat

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

sudo-uadmin/opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jstat-gcutil28151000

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

代码区博客精选文章
分页:12
转载请注明
本文标题:阿里员工排查问题的工具清单,总有一款适合你!
本站链接:https://www.codesec.net/view/621132.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(173)