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位元組

Advertisements

你可能會喜歡