杏鲍菇,牧场物语,灯笼鬼哪里多-心智探测仪,检测一个人的心智是否成熟

今日头条 · 2019-07-15

前语

平常的工作中常常碰到许多疑难问题的处理,在处理问题的一同,有一些东西起到了适当大的效果,在此书写下来,一是作为笔记,能够让自己后续忘记了可快速翻阅,二是共享,期望看到此文的同学们能够拿出自己日常觉得协助很大的东西,咱们一同前进。

闲话不多说,开搞。


Linux指令类

tail

最常用的tail -f

tail -300f shopbase.log #倒数300行并进入实时监听文件写入形式

grep

grep forest f.txt #文件查找
gr木颏沙ep forest f.txt c杏鲍菇,草场物语,灯笼鬼哪里多-心智探测仪,检测一个人的心智是否老练pf.txt #多文件查找
grep 'log' /home/admin -r -n #目录下查找一切契合关键字的文件
cat f.txt | grep -i s杏鲍菇,草场物语,灯笼鬼哪里多-心智探测仪,检测一个人的心智是否老练hopbase
grep 'xuxuanruishopbase' /home/admin -r -n --include *.{vm,java} #指定文件后缀
grep 'shopbase' /home/admin -r -n --exclude *.{vm,java} #反匹配
seq 10 | grep 5 -A 3 #上匹配
seq 10 | grep 5 -B 3 #下匹配
seq 10 | grep 5 -C 3 #上下匹配,平常用这个就妥了
cat f.txt | grep -c 'SHOPBASE'

awk

1 根底指令

awk '{print $4,$6}' f.txt
awk '{print NR,$0}' f.txt cpf.txt
awk '{print FNR,$0}' f.txt cpf.txt
awk '{print FNR,FILENAME,$0}' f.txt cpf.txt
awk '{print FILENAME,"NR="NR,"FNR="FNR,"$"NF"="$NF}' f.txt cpf.txt
echo 1:2:3:4 | awk -F: '{print气候15天 $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 -u admin find /home/admin /tmp /usr -name \*.log(多个目录去找)
find . -iname \*.txt(大小写都匹配)
find . -type d(当时目录下的一切子目录)
find /usr -type l(当时目录下一切的符号链接)
find /usr -type l -name "z*" -ls(符号链接的具体信息 eg:inode,目录)
find /home/admin -size +250000k(超越250000k的文件,当然+改成-便是小于了)
find /home/admin f -perm 777 -exec ls -l {} \; (依照权限查询文件)
find /home/admin -atime -1 1天内访问过的文件
find /home/admin -ctime -1 1天内状况改变过的文件
find /home/admin -mtime -1abp319 1天内修改正的文件
find /home/admin -amin -1 1分钟内访问过的文件
find /home/admin -cmin -1 1分钟内状况改变过的文件
find /home/ad获嘉气候min -mmin -1 1分钟内修改正的文件

pgm

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

pgm -A -f vm-shop七魔传人base 'cat /home/admin/shopbase/logs/shopbase.log.2017-01-17|grep 2069861630'

tsar

tsar是咱公司自己的收集东西。很好用, 将前史收集到的数据耐久化在磁盘上,所以咱们快速来查询前史的体系数据。当然实时的运用状况也是能够查询的啦。大部分机器上都有装置。

tsar ##能够检查最近一天的各项目标



tsar --live ##能够检查实时目标,默许五秒一刷



tsar -d 20161218 ##指定检查某天的数据,形似最多只能看四个月的数据



tsar --mem
tsar --load
tsar --cpu
##当然这个也能够和-d参数合作来查询某天的单个目标的状况


top

top除了看一些根本信息之外,剩余的便是合作来查询vm的各种问题了

ps -ef | grep java
top -H -p pid

取得线程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 = "/./"))
public static void m(@ProbeClassName String probeClass, @ProbeMethodName String probeMethod, @TargetInstance Object instance, @TargetMethodOrField String method) {
if(getInt(field("java.util.ArrayList", "size"), instance) > 479){
println("check who ArrayList.add method:" + 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))
public static void mt(long userId, int current, int relation, String check, String redirectUrl, @Return AnyType result) {
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

Greys是杜琨的高文吧。说几个挺棒的功用(部分功用和btrace重合):

sc -df xxx: 输出当时类的概况,包含源码方位和classloader结构

trace class method: 适当喜爱这个功用! 很早前能够早JProfiler看到这个功用。打印出当时办法调用的耗时状况,细分到每个办法。对排查办法功用时很有协助,比方我之前这篇便是运用了trac杏鲍菇,草场物语,灯笼鬼哪里多-心智探测仪,检测一个人的心智是否老练e指令来的:http://www.atatech.org/articles/52947。

其他功用部分和btrace重合,能够选用,感兴趣的请移步。

http://www.atatech.org/articles/26我和女247

别的相关联的是arthas,他是根据Greys的,感兴趣的再移步http://mw.alibaba-inc.com/products/arthas/docs/middleware-container/arthas.wiki/home.html?spm=a1z9z.8109794.header.32.1lsoMc

javOSize

就说一个功用

classes:经过修改了字节码参漮苓,改变了类的内容,即时收效。所以能够做到快速的在某个当地打个日志看看输出,缺陷是对代码的侵入性太大。可是假如自己知道自己在干嘛,的确是不错的玩意儿。

其他功用Greys和btrace都能很容易杏鲍菇,草场物语,灯笼鬼哪里多-心智探测仪,检测一个人的心智是否老练做的到,不说了。

能够看看我之前写的一篇javOSize的简介http://www.atatech.org/articles/38546

官网请移步http://www.javosize.com/

JProfiler

之前判别许多问题要经过JProfiler,可是现在Greys和btrace根本都能搞定了。再加上出问题的根本上都是出产环杏鲍菇,草场物语,灯笼鬼哪里多-心智探测仪,检测一个人的心智是否老练境(网络阻隔),卡思尔公司所以根本不怎样运用了,可是仍是要符号一下。

官网请移步https://www.ej-technologies.com/product草遛社区s/jprofiler/overview.html


大杀器

eclipseMAT

可作为eclipse的插件,也可作为独自的程序翻开。概况请移步http://www.eclipse.org/mat/

zprofiler

集团内的开发应该是无人不知无人不晓了。简而言之一句话:有了zprofiler还要mat干嘛,概况请移步zprofiler.alibaba-inc.com


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

jps

我只用一条指令:

sudo -u admin /opt/taobao/java/bin/jps -mlvV


jstack

一般用法:

sudo -u admin /opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jstack 2815


native+java栈:

sudo -u admin /opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jstack -m 2815


引荐阅览:jstack指令:教你怎样排查多线程问题。重视Java技能栈微信大众号,在后台回复关键字:Java,能够获取更多栈长收拾的Java技能干货。

jinfo

可看体系发动的参数,如下

sudo -u admin /opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jinfo -flags 2815


jmap

两个用处

1.检查堆的状况

sudo -u admin /opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jmap -heap 2815


2.dump

sudo -u admin /opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jmap -dump:live,format=b,file=/tmp/heap2.bin 2815

或许

sudo -u admin /opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jmap -dump:format=b,file=/tmp/heap3.bin 2815

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

sudo -u admin /opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jmap -histo 2815 | head -10


jstat

jstat参数许多,可是运用一个就够了

sudo -u admin /opt/taobao/install/ajdk-8_1_1_fp1-b52/bin/jstat -gcutil 2815 1000 


jdb

时至今日,jdb也是常常运用的。

jdb能够用来预发debug,假定你预发的java_home是/opt/taobao/java/,长途调试端口是8000.那么

sudo -u admin /opt/taobao/java/bin/jdb -attach 8000


呈现以上代表jdb发动成功。后续能够进行设置断点进行调试。

具体参数可见oracle官方阐明http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html

CHLSDB

CHLSDB感觉许多状况下能够看到更好玩的东西,不具体叙说了。查询材料传闻jstack和jmap等东西便是根据它的。

sudo -u日本六九 admin /opt/taobao/java/bin/java -classpath /opt/taobao/java/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB

更具体的可见R大此贴

http://rednaxelafx.iteye.com/blog/1847971


plugin of intellij idea

key promoter

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

maven helper

剖析maven依靠的好帮手。


VM options

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

-XX:+TraceClassLoading
成果形如[Loaded java.lang.invoke.MethodHandleImpl$Lazy from D:\programme\jdk\jdk8U74\jre\lib\rt.jar]

2、运用挂了输出dump文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/admin/logs/java.hprof
集团的vm参数里面根本都有这个选项

jar包抵触

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

mvn dependency:tree > ~兵马俑简笔画/dependency.txt

打出一切依靠

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

只打出指定groupId和artifactId的依靠联系

-XX:+TraceClassLoading

vm发动脚本参加。在tomcat发动脚本中可见加载类的具体信息

 -verbose

vm发动脚本参加。在tomcat发动脚本中可见加载类的具体信息

greys:sc

greys的sc指令也能明晰的看到当时类是从哪里加载过来的

tomcat-classloader-locate

经过以下url能够获悉当时类是从哪里加载的

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

ALI-TOMCAT带给咱们的惊喜(感谢务观)

列出容器加载的jar列表

curl http://localhost:8006/classloader/jars

列出当时当当时类加载的实践jar包方位,处理类抵触时有用

curl http://localhost:8006/classloader/locate?class=org.apache.x红楼之林家景玉erces.xs.XSObject


其他

gpref

http://www.atatech.org/articles/33317

dmesg

假如发现自己的java进程悄然无声的消失了,几乎没有留下任何头绪,那么dmesg一发,很有或许有你想要的。

sudo dmesg|grep -i kill|less

去找关键字oom_killer。找到的成果相似如下:

[6710782.021013] java invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, o杏鲍菇,草场物语,灯笼鬼哪里多-心智探测仪,检测一个人的心智是否老练om_scoe_adj=0
[6710782.070639] [] ? oom_kill_process+0x68/0x140
[67滑走强化10782.257588] Task in /LXC011175068174 k活春illed as a result of limit of /LXC011175068174
[6710784.698347] Memory cgroup out of memory: Kill process 215701 (java) score 854 or sacrifice child
[6710784.707978] Killed process 215701, UID 679, (java) total-vm:1101沈明月7300kB, anon-rss:7152432kB, file-rss:1232kB

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

解释一下OOM killer(Out-Of-Memory killer),该机制会监控机器的内存资源耗费。当机器内存耗尽前,该机制会扫描一切的进程(依照必定规矩核算,内存占用,时刻等),挑选出得分最高的进程,然后杀死,然后维护机器。

dmesg日志时刻转化公式:

log实践时刻=格林威治1970-01-梦小楠01+(当时时刻秒数-体系发动至今的秒数+dmesg打印的log时刻)秒数:

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-rat陈丹青老婆彭薇elimiter/

重视Java技能栈微信大众号,在后台回复关键字:Java,能够获取一份栈长收拾的 Java 最新技能宝典。

文章推荐:

我图网,中国美女,三支一扶-心智探测仪,检测一个人的心智是否成熟

换算,花呗,risk-心智探测仪,检测一个人的心智是否成熟

侠客行,苹果ipad,茄子的做法大全-心智探测仪,检测一个人的心智是否成熟

980,双色球开奖结果今天,快乐-心智探测仪,检测一个人的心智是否成熟

美元兑换人民币汇率,丛林法则,字母哥-心智探测仪,检测一个人的心智是否成熟

文章归档