2012-11-11 42 views
5

我正在使用2个四核至强E5520 2.2GHz,24.0GB RAM和Erlang R15B02(启用SMP)的节点上运行实验。我想知道是否可以限制Erlang虚拟机使用的内核数量,以便我可以暂时禁用一些内核并逐步增加数量以测试可伸缩性。限制erlang使用的内核数量

我在此节点上没有root访问权限。所以我期待的方法是通过指定参数erl或Erlang代码。

回答

13

您可以将Erlang通过+S选项使用的内核数量限制为erl,该选项允许您设置Erlang创建的调度程序内核线程的数量。有关更多详细信息,请参见erl man page

需要注意的是二郎linked-in port driversnative implemented functions(NIFS)能够创建自己的线程,从而影响多少个核心的Erlang进程将独立通过+S选项指定的线程使用了,虽然没有标准的驱动程序或NIFS的做到这一点。另外选项erl创建一个供驱动程序使用的异步线程池,这也可能影响所使用的内核数量,默认情况下,异步线程池有10个线程(在Erlang/OTP版本R16B之前默认为空) 。

+0

谢谢!请你解释一下'+ S 4:2'和'+ S 2:2'(即'Schedulers'大于'SchedulerOnline')之间的区别吗? –

+1

“+ S 2:2”表示您需要两个调度程序,并且您希望它们都处于联机状态。 '+ S 4:2'意味着你需要四个调度器,但你只需要两个在线。还要注意,在运行时,应用程序可以通过'erlang:system_info/1'和'erlang:system_flag/2'函数检查和更改调度程序和在线调度程序的数量;请参阅[system_info/1](http://www.erlang.org/doc/man/erlang.html#system_info-1)和[system_flag/2](http://www.erlang.org/doc)的文档/man/erlang.html#system_flag-2)以获取更多详细信息。 –

+0

但由于在线调度程序的数量相同,因此不同'Schedulers'值有什么不同? –