Linux命令
- tail 最常用的tail -f
tail -fn 200 aa.log 动态查看日志 - grep
grep 'error' f.txt #文件查找
grep 'error' f.txt cpf.txt #多文件查找
grep 'error' -A 3 test.log #上匹配 在test文件下查找error并显示前3行内容
grep 'error' -B 3 test.log #下匹配 在test文件下查找error并显示后3行内容
grep 'error' -C 3 #上下匹配,平时用这个就妥了 前后各3行
cat f.txt | grep -c 'SHOPBASE'
日志匹配到太多可以使用less
grep -C 5 'defaultItem' item-war.log | less
- top
top除了看一些基本信息之外,剩下的就是配合来查询vm的各种问题了
ps -ef | grep java
top -H -p pid 获得线程10进制转16进制后jstack去抓看这个线程到底在干啥
jstack pid
- netstat
netstat -nat|awk '{print $6}'|sort|uniq -c|sort -rn
注意close_wait偏高的情况
netstat -ant | grep 'close_wait' |wc -l
- dmesg
java线程无缘无故没有 可以使用下
dmesg|grep -i kill|less
找关键字oom_killer。找到的结果类似如下:
[6710782.021013] java invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_scoe_adj=0
[6710782.070639] [<ffffffff81118898>] ? oom_kill_process+0x68/0x140
[6710782.257588] Task in /LXC011175068174 killed 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:11017300kB, anon-rss:7152432kB, file-rss:1232kB
以上表明,对应的java进程被系统的OOM Killer给干掉了,得分为854.
解释一下OOM killer(Out-Of-Memory killer),该机制会监控机器的内存资源消耗。当机器内存耗尽前,该机制会扫描所有的进程(按照一定规则计算,内存占用,时间等),挑选出得分最高的进程,然后杀死,从而保护机器。
一些工具
Arthas https://github.com/alibaba/arthas 很强大
btrace https://github.com/btraceio/btrace
eclipseMAT http://www.eclipse.org/mat/ 内存监控工具
Greys