阿里程序员,排查Java问题的常用工具列表,作为笔记使用,方便以后忘记的时候快速阅读。二是分享。希望看到这篇文章的同学能想出自己认为对日常生活很有帮助的工具,大家一起进步。废话不多说,开始吧。最常用的Linux命令tail-fgrepawk1基本命令2匹配3内置变量NR:NR表示awk执行后根据记录分隔符读取数据的次数,默认记录分隔符是换行符,所以默认是读取的数据行数,NR可以理解为NumberofRecord的缩写。FNR:当awk处理多个输入文件时,处理完第一个文件后NR并不是从1开始,而是不断累加,所以出现了FNR。每当处理一个新文件时,FNR从1开始计数,FNR可以理解为FileNumberofRecord。NF:NF表示当前记录被划分为多少个字段,NF可以理解为NumberofField。findpgm批量查询vm-shopbase满足条件的日志tsartsar是我们公司自己的采集工具。将历史收集的数据持久化到磁盘上是非常有用的,这样我们可以快速查询历史系统数据。当然也可以查询实时申请状态。它安装在大多数机器上。toptop除了看一些基本信息外,剩下的就是配合查询vm的各种问题。从十进制转十六进制获取线程后,jstack会抓取,看看线程在干什么。其他故障排除工具btrace首当其冲。一个是btrace。真的是生产环境&发布前排查的大杀器。简介我就不多说了。直接看代码1.查看谁调用了ArrayList的add方法,同时只打印当前ArrayList大小大于500的线程的调用栈。2.监听返回值currentservicemethodiscalledandrequestedparameters注:经观察,1.3.9的release输出不稳定,需要多次触发才能看到正确的结果。当正则表达式匹配trace类时,一定要控制范围,否则很有可能CPU爆满,应用卡死。因为是字节代码注入的原理,如果想让应用恢复正常,就需要重启应用。Grays说了几个很棒的功能(部分功能与btrace重叠):sc-dfxxx:输出当前类的详细信息,包括源代码位置和类加载器结构跟踪类方法:我非常喜欢这个功能!很久以前在JProfiler中就可以看到这个功能。打印出当前方法调用的耗时情况,细分到每个方法。javOSize指的是一个功能类:通过修改字节码,改变类的内容,并立即生效。因此,您可以快速在某处创建日志以查看输出。缺点是对代码的侵入性太大。但如果你知道自己在做什么,那确实是一件好事。greys和btrace可以轻松完成其他功能,更不用说了。以前JProfiler很多问题都是通过JProfiler来判断的,现在Grays和btrace基本可以搞定。另外,问题基本出在生产环境(网络隔离),所以基本上用的不多,不过还是要标注一下。大杀器eclipseMAT可以作为eclipse插件使用,也可以作为单独的程序打开。java三招,哦不,是七个jps我只用了一个命令:jstack常用用法:native+javastack:jinfo可以看到系统启动的参数,如下jmap有两个用途1.查看堆状态2.dumpor3.看看谁占用了堆?结合zprofiler和btrace,排错如虎添翼jstatjstat的参数很多,但是jdb用jdb就够了。今天,jdb也经常被使用。jdb可以用来预发布调试,假设你的预发布java_home是/opt/taobao/java/,远程调试端口是8000,然后sudo-uadmin/opt/taobao/java/bin/jdb-attach8000.出现以上代表jdb启动成功。然后您可以设置断点进行调试。CHLSDBCHLSDB感觉在很多情况下,可以看到更多有趣的东西,就不详细描述了。查询数据听说jstack、jmap等工具都是基于它的。intellijideakeypromoter的插件快捷键记一次就记不住,但总能记住几次?Mavenhelper是分析maven依赖的好帮手。虚拟机选项1。你的类是从哪个文件加载的?2.应用挂了,输出dump文件jar包冲突。把这个单独写成标题也不过分吧?每个人都或多或少地处理过这种烦人的情况。如果我不相信下面这么多解决方案,我对付不了你?显示所有依赖,只显示指定groupId和artifactId的依赖。添加了虚拟机启动脚本。加载类的详细信息可以在tomcat启动脚本中看到。添加了虚拟机启动脚本。在tomcat启动脚本中可以看到加载类的详细信息。grays的sc命令也可以清楚的看到当前类是从哪里加载的。其他dmesg如果你发现你的java进程已经悄无声息的消失了,几乎没有留下任何线索,那么dmesg一旦发出,很可能就有你想要的。寻找关键字oom_killer。查到的结果类似如下:上面显示对应的java进程被系统的OOMKiller杀死,得分为854。解释一下OOMkiller(Out-Of-Memorykiller),监控内存资源消耗机器的。在机器的内存耗尽之前,该机制会扫描所有进程(根据一定的规则计算,内存使用,时间等),选择得分最高的进程,然后杀死它以保护机器。dmesg日志时间换算公式:实际日志时间=Greenwich1970-01-01+(当前时间的秒数-系统启动后的秒数+dmesg打印的日志时间)seconds:剩下的就是看内存为什么这么大,OOM-杀手被触发。新技能getRateLimiter想精细控制QPS?比如这样一个场景,你调用某个接口,对方明明需要你限制你的QPS在400以内,你怎么控制?这时候RateLimiter就派上用场了。
