Erlang节点遭受高CPU

时间:2014-05-30 05:33:58

标签: erlang

我使用perf来检测节点的进程

Perf命令:perf record -g -p 13586 sleep 10

结果:

# Events: 7K cpu-clock
#
# Overhead  Command       Shared Object                                Symbol
# ........  .......  ..................  ....................................
#
    17.02%     beam  beam                [.] copy_struct
               |
               --- copy_struct

    12.38%     beam  beam                [.] size_object
               |
               --- size_object

    11.85%     beam  beam                [.] db_prog_match
               |
               --- db_prog_match

     7.78%     beam  beam                [.] db_select_hash
               |
               --- db_select_hash

     6.90%     beam  beam                [.] process_main
               |
               --- process_main

     4.70%     beam  beam                [.] do_minor
               |
               --- do_minor

     4.23%     beam  beam                [.] element_2
               |
               --- element_2

     3.30%     beam  beam                [.] sweep_one_area
               |
               --- sweep_one_area

     1.53%     beam  beam                [.] cmp
               |
               --- cmp

     1.39%     beam  beam                [.] copy_shallow
               |
               --- copy_shallow

如您所见,copy_structsize_object费用很高。

调度程序是否忙于复制邮件?

仅供参考,我对减少的desc进行了排序,并在节点上获取了前10个进程,这似乎是正常的。

由于我们在一个系统上有大约6个节点,因此禁用了smp。我们打开它吗?

1 个答案:

答案 0 :(得分:2)

每当一般术语必须复制时,就会使用

复制结构,而不仅仅是消息。

由于db_ *也非常高,我可以想象复制结构来自于从ets表复制数据。

关于你是否应该使用smp,它可能会使系统性能更好,但你真的应该尝试并测量系统的结果,因为它会根据你的系统的不同而有所不同。