我尝试使用
分析群集上的减少任务conf.setBoolean("mapred.task.profile", true);
conf.set("mapred.task.profile.params", "-agentlib:hprof=cpu=samples,heap=sites,depth=6,force=n,thread=y,verbose=n,file=%s");
conf.set("mapred.task.profile.maps", "0-1");
conf.set("mapred.task.profile.reduces", "0-1");
正如预期的那样,我生成了4个配置文件:
2849 Mar 25 15:30 attempt_201402231438_11879_m_000000_0.profile
8786788 Mar 25 15:30 attempt_201402231438_11879_m_000001_0.profile
4129237 Mar 25 15:31 attempt_201402231438_11879_r_000000_0.profile
12644892 Mar 25 15:32 attempt_201402231438_11879_r_000001_0.profile
(在映射器任务分析期间生成_m_
的文件,在reduce任务分析期间生成_r_
attempt_201402231438_11879_m_000001_0.profile
看起来不错:
THREAD START (obj=50000161, id = 200001, name="main", group="main")
THREAD START (obj=500021bd, id = 200004, name="TGT Renewer for yampolsy", group="main")
THREAD END (id = 200004)
...
TRACE 300000: (thread=200001)
<empty>
TRACE 300001: (thread=200001)
java.lang.Thread.<init>(Thread.java:493)
TRACE 300002: (thread=200001)
java.lang.Thread.<init>(Thread.java:206)
...
SITES BEGIN (ordered by live bytes) Tue Mar 25 15:30:45 2014
percent live alloc'ed stack class
rank self accum bytes objs bytes objs trace name
1 35.41% 35.41% 99614736 1 99614736 1 317704 byte[]
2 16.79% 52.20% 47232000 2880 125952000 7680 318394 char[]
...
SITES END
CPU SAMPLES BEGIN (total = 6089) Tue Mar 25 15:30:45 2014
rank self accum count trace method
...
859 0.02% 99.57% 1 319489 java.lang.System.arraycopy
860 0.02% 99.59% 1 319490 java.lang.Object.<init>
CPU SAMPLES END
奇迹开始后:
attempt_201402231438_11879_m_000000_0.profile
仅包含标准标头(无配置文件信息)。我并不关心这个文件,因为我的主要兴趣是减速器,但这感觉不对。attempt_201402231438_11879_r_000000_0.profile
和attempt_201402231438_11879_r_000001_0.profile
包含线程和跟踪信息,但不包含 CPU SAMPLES 和 SITES 信息。 作业成功完成。
知道什么可能出错吗?
为什么我没有为减速器获取 CPU SAMPLES ?
有没有人遇到同样的问题?