加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

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

发布时间:2018-12-19 19:10:04 所属栏目:Windows 来源:红魔七号
导读:副标题#e# 这是一篇来源于阿里内部技术论坛的文章,原文在阿里内部获得一致好评。作者已经把这篇文章开放到云栖社区中供外网访问。文章内容做了部分删减,主要删减掉了其中只有阿里内部才能使用的工具的介绍,并删减掉部分只有通过阿里内网才能访问到的链接

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

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

maven helper

分析maven依赖的好帮手。

VM options 

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

  1. -XX:+TraceClassLoading 
  2. 结果形如[Loaded java.lang.invoke.MethodHandleImpl$Lazy from D:programmejdkjdk8U74jrelibrt.jar] 

2、应用挂了输出dump文件

  1. -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/logs/java.hprof 

jar包冲突 

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

  1. mvn dependency:tree > ~/dependency.txt 

打出所有依赖

  1. mvn dependency:tree -Dverbose -Dincludes=groupId:artifactId 

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

  1. -XX:+TraceClassLoading 

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

  1. -verbose 

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

  1. greys:sc 

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

  1. tomcat-classloader-locate 

通过以下url可以获知当前类是从哪里加载的

  1. curl http://localhost:8006/classloader/locate?class=org.apache.xerces.xs.XSObjec 

其他 

dmesg

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

  1. sudo dmesg|grep -i kill|less 

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

  1. [6710782.021013] java invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_scoe_adj=0 
  2. [6710782.070639] [<ffffffff81118898>] ? oom_kill_process+0x68/0x140  
  3. [6710782.257588] Task in /LXC011175068174 killed as a result of limit of /LXC011175068174  
  4. [6710784.698347] Memory cgroup out of memory: Kill process 215701 (java) score 854 or sacrifice child  
  5. [6710784.707978] Killed process 215701, UID 679, (java) total-vm:11017300kB, anon-rss:7152432kB, file-rss:1232kB 

以上表明,对应的java进程被系统的OOM Killer给干掉了,得分为854.

解释一下OOM killer(Out-Of-Memory killer),该机制会监控机器的内存资源消耗。当机器内存耗尽前,该机制会扫描所有的进程(按照一定规则计算,内存占用,时间等),挑选出得分最高的进程,然后杀死,从而保护机器。

dmesg日志时间转换公式:

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

  1. date -d "1970-01-01 UTC `echo "$(date +%s)-$(cat /proc/uptime|cut -f 1 -d' ')+12288812.926194"|bc ` seconds" 

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

新技能get 

RateLimiter

想要精细的控制QPS? 比如这样一个场景,你调用某个接口,对方明确需要你限制你的QPS在400之内你怎么控制?这个时候RateLimiter就有了用武之地。详情可移步http://ifeve.com/guava-ratelimite

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读