Linux下hadoop分散式系統基礎架構調試
stat看內存分配對象,內存區域的狀況
首先在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
Advertisements
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發生了多少次
Advertisements
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
mapred.child.java.opts
-Xmx200m -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/@[email protected]
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位元組