分类: LINUX
2014-05-07 12:06:09
jstat看内存分配对象,内存区域的状况
首先在young Genaration ,然后 Old Genaration。
持久层存放的是各自类,不会变化的东西
Eden -》From-》To 对象拷贝15次会
大的对象直接放到Old Genaration
分配线程和上层应用同时进行 -》并行GC ,实时回收,无停顿感
并发GC 需要暂停掉上层应用
用命令jstat看GC的不同区域
用jps找到namenode的进程号:
vmid=8154 = namenode的进程号
2000表示interval 两秒显示一次
5 显示5次
-h 30 每30行显示一次标头
Jstat –gcutil –h30 8154 1000
jstat -gcutil 8154 2000 5
S0 S1 E O
P YGC YGCT FGC
FGCT GCT
85.51 0.00 17.45 71.93 92.48 10
5.713 0 0.000 5.713
85.51 0.00 17.45 71.93 92.48 10
5.713 0 0.000 5.713
85.51 0.00 17.45 71.93 92.48 10
5.713 0 0.000 5.713
85.51 0.00 17.45 71.93 92.48 10
5.713 0 0.000 5.713
S0、S1是swap区域,就是From 、To区域
E 是Eden
O 是Old Genaration
YGC 是youngGC发生了多少次
YGCT 是youngGC发生了多少时间
FGCT 是整个Heap一起来做GC花费的时间
GCT 是GC的总时间 = YGCT+FGCT
java heap主要看O 是不是满了?或者FGC发生的次数非常频繁
改进程的参数,记录gc历史
jps –ml
看具体进程的线程栈thread dump情况
jstack pid >/tmp/pid.txt
还有一种方式是用 kill -3 $taskpid ,会在log的stdout里打印stack信息
看子进程的gc详情log
jmap/jhat 配合使用
jmap -dump:live,format=b,file=/tmp/jmap.dat $pid
jhat -J-Xmx4g jmap.dat
10分钟收不到map或reduce的输出时,会kill task
可以通过页面看看
ip:7000
ip:50060/tasklog?attemptid=attempt_201404051615_0002_m_000000_0
Streaming coredump
$ cat /proc/sys/kernel/core_pattern
core
在当前路径打印core文件
可以改成/tmp/core
echo /tmp/core > /proc/sys/kernel/core_pattern
strace
跟踪已经启动的pid
strace -fF -p 16246 -o /tmp/strace.log
跟踪新启动的进程
strace -fF -o /tmp/strace.log 启动命令
iostat -x 1
nload
iptraf
netstat -ant
Recv 高表示本机有问题,无法处理其他机器发过来的网络消息
Send 高表示对方的机器来不及接受包,一直堆积在这里
tcpdump -nn -i eth0 -xX -s 0 tcp and port 2181
-nn 不反解析dns
-xX 不读取包内容
-s 0 指定每个包取多少字节,0表示无上限默认128字节