erl
ERL
命令
ERL
命令摘要
Erlang模拟器。
描述
该erl
程序启动一个Erlang运行时系统。确切的细节(例如,erl
是脚本还是程序以及它调用的其他程序)是依赖于系统的。
Windows用户可能希望使用该werl
程序,该程序使用滚动条在其自己的窗口中运行,并支持命令行编辑。erl
Windows上的程序在其外壳中不提供行编辑,而在Windows 95上,无法滚动回滚到离开屏幕的文本。该erl
程序必须使用不过,在管道或者如果要重定向标准输入或输出。
注
从ERTS 5.9(Erlang / OTP R15B)开始,运行时系统默认不会
将调度程序绑定到逻辑处理器。有关更多信息,请参阅系统标志+sbt
。
输出
erl <arguments>
启动一个Erlang运行时系统。
参数可以分为模拟器标志
,标志
和简单参数
:
- 任何以字符
+
开头的参数都被解释为一个emulator flag
。如名称所示,仿真器标志控制仿真器的行为。
- 任何以字符
-
(连字符)开头的参数都被解释为一个flag
,它将被传递到运行时系统的Erlang部分,更具体地说是传递给init
系统进程,参见init(3)
。
该init
过程本身的一些解释这些标志时,初始化标志
。它还存储任何剩余的标志,用户标志
。后者可以通过调用init:get_argument/1
少量的“ - ”标志存在,现在实际上是模拟器标志,请参阅下面的说明。
- 简单的参数是不会以任何方式解释的。它们也由init进程,并且可以通过调用init:get_plain_arguments/0可以在第一个标志之前或在--旗子。此外,-extra标志将导致后面的所有内容成为普通的参数。例子:% erl +W w -sname arnie +R 9 -s my_init -extra +bertie (arnie@host)1> init:get_argument(sname). {ok,[["arnie"]]} (arnie@host)2> init:get_plain_arguments(). ["+bertie"]这儿+W w和+R 9是模拟器标志。-s my_init是init标志,由init...-sname arnie是用户标志,存储在init它由内核读取,使Erlang运行时系统变得分布式。最后,之后的一切-extra28%,即,+bertie%29被认为是简单的参数。% erl -myflag 1 1> init:get_argument(myflag). {ok,[["1"]]} 2> init:get_plain_arguments(). []这里是用户标志-myflag 1被传递到并由init过程。它是一个用户定义的标志,大概是由某个用户定义的应用程序使用的.旗子在下面的列表中,init标志被标记为“%28 init标志%29”。除非另有规定,否则所有其他标志都是用户标志,可以通过调用init:get_argument/1注意,用户标志的列表并不详尽,可能会有更多的特定于应用程序的标志,而这些标志将在相应的应用程序文档中进行描述。--%28 init标志%29以下一切--直到下一个标志%28-flag或+flag%29被认为是简单的参数,可以使用init:get_plain_arguments/0...-Application Par Val设置应用程序配置参数。Par价值Val为申请Application;见app(4)和application(3)...-args_file FileName命令行参数从文件中读取。FileName从文件中读取的参数替换标志%27-args_file FileName在结果命令行上为%27。文件FileName是一个纯文本文件,可以包含注释和命令行参数。注释以#字符,并继续到行字符的下一个结尾。反斜杠%28[医]%29用作引用字符。接受的所有命令行参数erl也是允许的,也是标志-args_file FileName请注意,不要在包含标志的文件之间造成循环依赖。-args_file尽管如此。国旗-extra以特殊的方式对待。其作用域结束于文件的末尾。后面的参数-extra标志被移动到命令行的-extra节之后的命令行的末尾。-extra旗子。-async_shell_start在完成系统引导过程%28 Erlang/otp 5.4和更高版本%29之前,初始Erlangshell不会读取用户输入。此标志禁用启动同步功能,并允许shell与系统其他部分并行启动。-boot File指定引导文件的名称,File.boot,用于启动系统;请参见init(3).除非File包含绝对路径,系统将搜索File.boot在当前和$ROOT/bin目录。默认为$ROOT/bin/start.boot...-boot_var Var Dir如果引导脚本包含路径变量Var除$ROOT,此变量被展开为Dir。当应用程序安装在另一个目录中时使用$ROOT/lib;见systools:make_script/1,2在SASL。-code_path_cache启用代码服务器的代码路径缓存;请参见code(3)...-compile Mod1 Mod2 ...编译指定模块,如果某个文件的编译未成功%29,则使用非零退出代码终止%28。暗示-noinput...不推荐;使用erlc相反。-config Config指定配置文件的名称,Config.config,用于配置应用程序;请参见app(4)和application(3)...-connect_all false如果有这面旗帜,global不维护完全连接的分布式Erlang节点网络,则无法使用全局名称注册;请参见global(3)...-cookie Cookie无任何效果的过时标志和常见的拼写错误-setcookie.使用-setcookie相反。-detached启动与系统控制台分离的Erlang运行时系统。用于运行守护进程和后台进程。暗示-noinput...-emu_args用于调试。打印发送到模拟器的参数。-emu_type Type启动不同类型的模拟器。例如,若要启动锁计数器emualator,请使用-emu_type lcnt.%28模拟器必须已经生成。使用configure期权--enable-lock-counter若要生成锁定计数器仿真器,请执行%29。-env Variable Value设置主机OS环境变量Variable价值Value用于Erlang运行时系统。例子:% erl -env DISPLAY gin:0在本例中,Erlang运行时系统使用环境变量启动。DISPLAY设为gin:0...-epmd_module Module%28 init标志%29配置负责通信的模块。epmd.默认为erl_epmd...-eval Expr%28 init标志%29制造init评估表达式Expr;见init(3)...-extra%28 init标志%29以下一切-extra被视为普通参数,可以使用init:get_plain_arguments/0...-heart启动Erlang运行时系统的心跳监视;请参见heart(3)...-hidden如果Erlang运行时系统作为分布式节点运行,则将其作为隐藏节点启动。隐藏节点总是建立与所有其他节点的隐藏连接,但同一全局组中的节点除外。隐藏连接不会发布在任何连接节点上,也就是说,没有一个连接节点是从nodes/0在另一个节点上。另见隐藏的全球集团;global_group(3)...-hosts Hosts指定运行erlang引导服务器的主机的ip地址,请参阅erl_boot_server(3)此标志是强制性的,如果标志-loader inet是存在的。IP地址必须以标准形式%284个小数位数指定,例如,"150.236.20.74"主机名不可接受,但广播地址%28最好限于本地网络%29。-id Id指定Erlang运行时系统的标识。如果它作为分布式节点运行,Id必须与与标志一起提供的名称相同。-sname或-name...-init_debug制造init在解释引导脚本时编写一些调试信息。-instr%28模拟器标志%29选择一个被检测的Erlang运行时系统%28虚拟机%29来运行,而不是普通的运行时系统。在运行已检测的运行时系统时,可以使用instrument-loader Loader指定erl_prim_loader若要将Erlang模块加载到系统中,请参见erl_prim_loader(3).2Loader方法得到支持:
efile
,这意味着使用本地文件系统,这是默认的。
- inet,这意味着在另一台计算机上使用引导服务器。旗子-id,,,-hosts和-setcookie也必须指定。如果Loader是其他的东西,用户提供的。Loader端口程序启动。-make使Erlang运行时系统调用make:all()在当前工作目录中,然后终止;请参见make(3).暗示-noinput...-man Module显示Erlang模块的手册页。Module.只支持Unix。-mode interactive | embedded指示系统是否要动态加载代码%28interactive%29,或者如果在系统初始化期间加载所有代码,则为%28embedded%29;见code(3).默认为interactive...-name Name使Erlang运行时系统成为分布式节点。此标志调用节点分布所需的所有网络服务器;请参见net_kernel(3).还确保epmd在启动Erlang之前在当前主机上运行;请参见epmd(1).而-start_epmd选择。节点名为Name@Host,在哪里Host当前主机的完全限定主机名。对于短名称,请使用标志-sname相反。警告启动分布式节点,同时不指定-proto_dist inet_tls将使该节点暴露于可能使攻击者完全访问该节点并扩展到集群的攻击。当使用不安全的分布式节点时,请确保网络配置为防止潜在攻击者攻击。-noinput确保Erlang运行时系统从未尝试读取任何输入。暗示-noshell...-noshell启动没有shell的Erlang运行时系统。此标志使Erlang运行时系统可以作为一系列Unix管道中的组件。-nostick禁用Erlang代码服务器的粘性目录工具;请参见code(3)...-oldshell从Erlang/OTP 3.3调用旧的Erlang shell。旧壳还可以用。-pa Dir1 Dir2 ...将指定的目录添加到代码路径的开头,类似于code:add_pathsa/1请注意,给定目录的顺序将在结果路径中颠倒。作为替代-pa,如果要将多个目录加到代码路径中,并且目录有一个公共父目录,则可以在环境变量中指定父目录。ERL_LIBS;见code(3)...-pz Dir1 Dir2 ...将指定的目录添加到代码路径的末尾,类似于code:add_pathsz/1;见code(3)...-path Dir1 Dir2 ...替换引导脚本中指定的路径;请参见script(4)...-proto_dist Proto指定Erlang分发的协议:inet_tcpTCP在IPv 4%28默认的%29inet_tls在TLS/SSL上分发,请参阅Using SSL for Erlang Distribution有关如何设置安全分布式节点的详细信息,用户%27s指南。inet6_tcp基于IPv 6的TCP协议例如,要启动IPv 6分布式节点:% erl -name test@ipv6node.example.com -proto_dist inet6_tcp-remsh Node启动Erlang,并将远程shell连接到Node...-rsh Program指定替代rsh有关在远程主机上启动从节点的步骤,请参见slave(3)...-run Mod [Func [Arg1, Arg2, ...]]%28 init标志%29制造init调用指定的函数。Func默认为start如果没有提供参数,则假定函数为0。否则,假设它是第1种,取列表。[Arg1,Arg2,...]作为争论。所有参数都作为字符串传递。见init(3)...-s Mod [Func [Arg1, Arg2, ...]]%28 init标志%29制造init调用指定的函数。Func默认为start如果没有提供参数,则假定函数为0。否则,假设它是第1种,取列表。[Arg1,Arg2,...]作为争论。所有的参数都是以原子的形式传递的。见init(3)...-setcookie Cookie将节点的神奇cookie设置为Cookie;见erlang:set_cookie/2...-shutdown_time Time指定%28毫秒%29init进程被允许花费在关闭系统上。如果Time毫秒过后,仍然存在的所有进程都会被终止。默认为infinity...-sname Name将Erlang运行时系统变成分布式节点,类似于-name,但是节点名的主机名部分。Name@Host将是短名,不完全合格。如果域名系统%28DNS%29没有运行,这有时是运行分布式Erlang的唯一方法。使用标志运行的节点之间不存在通信。-sname和那些带着旗子奔跑的人-name,因为在分布式Erlang系统中,节点名必须是唯一的。警告启动分布式节点,同时不指定-proto_dist inet_tls将使该节点暴露于可能使攻击者完全访问该节点并扩展到集群的攻击。当使用不安全的分布式节点时,请确保网络配置为防止潜在攻击者攻击。-start_epmd true | false指定Erlang是否应该启动。epmd刚开始的时候。默认情况下,这是true,但如果您更愿意手动启动EPMD,请将其设置为false...只有当Erlang作为分布式节点启动时,即在-name或-sname被指定。否则,即使在-start_epmd true是给你的。注意,如果EPMD没有运行,分布式节点将无法启动。-smp [enable|auto|disable]-smp enable和-smp启用SMP支持,启动Erlang运行时系统。如果没有SMP支持的运行时系统,则此操作可能失败。-smp auto启动Erlang运行时系统,如果可用并且检测到多个逻辑处理器,则启用SMP支持。-smp disable在不支持SMP的情况下启动运行时系统。不支持SMP的运行时系统被废弃,并将在未来的主要版本中被删除。注亦见旗+S...-version%28模拟器标志%29使模拟器打印其版本号。同erl +V...仿真器旗erl调用Erlang模拟器%28虚拟机%29的代码,它支持以下标志:+a size建议的堆栈大小,以千字为单位,用于异步线程池中的线程。有效范围为16-8192千字。默认的建议堆栈大小为16千字,即32位架构上的64千字节。之所以选择这个小的默认大小,是因为异步线程的数量可能很大。对于Erlang/OTP交付的驱动程序来说,默认大小已经足够,但对于其他使用driver_async()功能。请注意,传递的值只是一个建议,甚至可以在某些平台上忽略它。+A size设置异步线程池中的线程数。有效范围为0-1024.。如果线程支持可用,默认为10。+B [c | d | i]期权c制造Ctrl-C中断当前的shell,而不是调用模拟器中断处理程序。期权d%28与指定+B如果没有额外的选项,%29将禁用中断处理程序。期权i使模拟器忽略任何中断信号。中频选项c与oldshell在Unix上,Ctrl-C将重新启动shell进程,而不是中断它。请注意,在Windows上,此标志仅适用于werl,不是erl%28oldshell29%。还请注意Ctrl-Break被使用,而不是Ctrl-C在窗户上。+c true | false启用或禁用time correction*true启用时间校正。如果在特定平台上支持时间校正,则这是默认的。false禁用时间校正。为了向后兼容,可以省略布尔值。这被解释为+c false...+C no_time_warp | single_time_warp | multi_time_warp集time warp mode*no_time_warpNo time warp mode%28默认的%29single_time_warpSingle time warp modemulti_time_warpMulti-time warp mode+d如果模拟器检测到内部错误%28或内存%29耗尽,默认情况下,它会生成崩溃转储和核心转储。但是,核心转储并不十分有用,因为崩溃转储生成会破坏进程堆的内容。期权+d指示模拟器只生成核心转储,如果检测到内部错误,则不产生崩溃转储。呼叫erlang:halt/1使用字符串参数仍然会产生崩溃转储。在unix系统上,发送模拟器处理SIGUSR1信号也会迫使崩溃垃圾场。+e Number设置ETS表的最大数目。+ec力选项compressed在所有ETS桌子上。只用于测试和评估。+fnl虚拟机使用文件名,就好像它们是使用ISO拉丁语1编码一样编码的,不允许代码点>255的Unicode字符。有关unicode文件名的详细信息,请参阅Unicode Filenames在STDLIB用户%27s指南中。请注意,此值也适用于命令行参数和环境变量%28(参见部分)。Unicode in Environment and Parameters在STDLIB用户%27s指南%29中。+fnu[{w|i|e}]虚拟机使用文件名工作,就好像它们是使用utf-8%28或其他特定于系统的Unicode编码%29进行编码一样。这是执行Unicode编码的操作系统的默认设置,即Windows和MacOSX。大+fnu开关可以跟着w,,,i,或e要控制如何报告错误编码的文件名:
w
表示警告被发送到error_logger
每当错误编码的文件名在目录列表中被“跳过”时。这是默认的。
i
意味着这些错误编码的文件名将被忽略。
e
意味着每当遇到错误编码的文件名%28或目录名%29时,API函数都会返回错误。
注意file:read_link/1
如果链接指向无效的文件名,则始终返回错误。
有关unicode文件名的详细信息,请参阅Unicode Filenames
在STDLIB用户%27s指南中。请注意,此值也适用于命令行参数和环境变量%28(参见部分)。Unicode in Environment and Parameters
在STDLIB用户%27s指南%29中。
+fna[{w|i|e}]
选择+fnl
和+fnu
是根据操作系统中当前的区域设置完成的。这意味着,如果您已经为UTF-8编码设置了终端,那么文件系统应该对文件名使用相同的编码。这在所有操作系统上都是默认的,除了MacOSX和Windows。
大+fna
开关可以跟着w
,,,i
,或e
如果区域设置导致+fnu
待选;见+fnu
上面。如果区域设置导致+fnl
然后被选中w
,,,i
,或e
没有效果。
有关unicode文件名的详细信息,请参阅Unicode Filenames
在STDLIB用户%27s指南中。请注意,此值也适用于命令行参数和环境变量%28(参见部分)。Unicode in Environment and Parameters
在STDLIB用户%27s指南%29中。
+hms Size
将进程的默认堆大小设置为Size
...
+hmbs Size
将进程的默认二进制虚拟堆大小设置为Size
...
+hmax Size
将进程的默认最大堆大小设置为Size
.默认为0
,这意味着不使用最大堆大小。有关更多信息,请参见process_flag(max_heap_size, MaxHeapSize)
...
+hmaxel true|false
设置是否为达到最大堆大小的进程发送错误记录器消息。默认为true
有关更多信息,请参见process_flag(max_heap_size, MaxHeapSize)
...
+hmaxk true|false
设置是否要杀死达到最大堆大小的进程。默认为true
有关更多信息,请参见process_flag(max_heap_size, MaxHeapSize)
...
+hpds Size
将进程的初始进程字典大小设置为大小。Size
...
+hmqd off_heap|on_heap
设置进程标志的默认值。message_queue_data
.默认为on_heap
.如果+hmqd
没有通过,on_heap
将是默认的。有关更多信息,请参见process_flag(message_queue_data, MQD)
...
+K true | false
如果模拟器支持内核轮询功能,则启用或禁用该功能。默认为false
%28残疾人%29。如果模拟器不支持内核轮询,则标记+K
传递给模拟器,则在启动时发出警告。
+l
启用自动跟踪,在加载代码时显示信息。
+L
防止加载有关源文件名和行号的信息。这节省了一些内存,但异常不包含有关文件名和行号的信息。
+MFlag Value
特定于内存分配程序的标志。有关更多信息,请参见erts_alloc(3)
...
+pc Range
设置系统认为在字符串启发式检测中可打印的字符范围。这通常会影响shell、调试器和io:format
功能%28~tp
在格式字符串%29中使用。
支持两个值Range
*
latin1默认的。只有ISO拉丁-1范围内的字符才能被认为是可打印的.。这意味着代码点>255的字符永远不会被认为是可打印的,而包含这些字符的列表将显示为整数列表,而不是由工具显示的文本字符串。unicode在确定是否以字符串语法显示整数列表时,将考虑所有可打印的Unicode字符。例如,如果字体不涵盖所有Unicode字符,则会产生意外的结果。
另见io:printable_range/0
在STDLIB。
+P Number
设置此系统同时存在的进程的最大数目,如果Number
作为值传递。有效范围Number
是[1024-134217727]
注
实际选择的最大值可能比Number
通过了。目前,运行时系统通常(但不总是)选择一个2的幂值。但是,这种情况今后可能会改变。可以通过调用erlang:system_info(process_limit)
...
默认值是262144
+Q Number
如果将一个数字作为值传递,则设置此系统同时存在的端口的最大数目。有效范围Number
是[1024-134217727]
注
实际选择的最大值可能比实际的大得多Number
通过了。目前,运行时系统通常(但不总是)选择一个2的幂值。但是,这种情况今后可能会改变。可以通过调用erlang:system_info(port_limit)
...
使用的默认值通常为65536
但是,如果运行时系统能够确定允许打开的文件描述符的最大数量,并且该值大于65536
,所选的值将增加到大于或等于可以打开的文件描述符的最大数量的值。
在Windows上,默认值设置为8196
因为正常的操作系统限制设置得比大多数机器所能处理的要高。
+R ReleaseNumber
设置兼容性模式。
默认情况下,分发机制不向后兼容。此标志将仿真器设置为与早期Erlang/OTP版本兼容的模式。ReleaseNumber.释放号必须在范围内<current release>-2..<current release>这限制了模拟器,使其能够与运行该早期版本的Erlang节点%28以及C和Java节点%29进行通信。
注
确保分布式Erlang系统的所有节点%28 Erlang-、C-和Java节点%29都属于相同的Erlang/OTP版本,或者来自两个不同的Erlang/OTP版本X和Y,其中全
Y节点具有兼容模式X。
+r
强制ETS内存块在realloc上移动。
+rg ReaderGroupsLimit
限制为Erlang运行时系统中的读操作优化的读/写锁使用的读取器组数。默认情况下,读取器组限制为64。
当调度器的数量小于或等于读取器组限制时,每个调度程序都有自己的读取器组。当调度程序的数量超过读取器组的限制时,调度程序共享读取器组。共享读取器组降低读锁和读解锁性能,而许多读取器组降低写锁性能。因此,限制是读操作的性能和写操作的性能之间的权衡。每个读取器组在每个读/写锁中消耗64字节。
注意,使用共享读取器组的运行时系统可以从binding schedulers to logical processors
,因为读取器组在调度程序之间分布得更好。
+S Schedulers:SchedulerOnline
设置要创建的调度程序线程数和启用SMP支持时要在线设置的调度程序线程数。这两个值的最大值为1024。如果Erlang运行时系统能够确定配置的逻辑处理器数量和可用的逻辑处理器,Schedulers
默认为配置的逻辑处理器,以及SchedulersOnline
默认为可用逻辑处理器;否则默认值为1。Schedulers
如果:SchedulerOnline
不是和相反。在线调度程序的数量可以在运行时通过以下方式更改:erlang:system_flag(schedulers_online, SchedulersOnline)
...
如果Schedulers
或SchedulersOnline
指定为负数,则该值将分别从配置的逻辑处理器的默认数目或可用的逻辑处理器中减去。
指定值0
为Schedulers
或SchedulersOnline
将调度程序线程或联机调度器线程的数目分别重置为默认值。
如果模拟器没有启用SMP支持%28(见标记),则忽略此选项。-smp
29%。
+SP SchedulersPercentage:SchedulersOnlinePercentage
类似于+S但是,在启用SMP支持时,使用百分比设置要创建的调度器线程数(基于配置的逻辑处理器),并根据可用逻辑处理器设置在线调度器线程数。指定的值必须是>0。例如,+SP 50:25将调度器线程数设置为配置的逻辑处理器的50%,将调度程序线程的在线数目设置为可用逻辑处理器的25%。SchedulersPercentage如果:SchedulersOnlinePercentage不是和相反。在线调度程序的数量可以在运行时通过以下方式更改:erlang:system_flag(schedulers_online, SchedulersOnline)...
此选项与+S
设置。例如,在配置了8个逻辑核和8个可用逻辑核的系统上,这些选项的组合+S 4:4 +SP 50:25
%28按任一顺序%29导致两个调度程序线程(4%29中的2850%%)和4%29中的1调度器线程在线(2825%%)。
如果模拟器没有启用SMP支持%28(见标记),则忽略此选项。-smp
29%。
+SDcpu DirtyCPUSchedulers:DirtyCPUSchedulersOnline
设置要创建的脏CPU调度程序线程数和启用线程支持时在线设置的脏CPU调度程序线程数。这两个值的最大值为1024,每个值进一步受到正常调度程序设置的限制:
- 创建的脏CPU调度程序线程数不能超过创建的普通调度程序线程数。
- 联机的脏CPU调度程序线程数不能超过联机正常调度程序线程的数量。
有关详细信息,请参阅+S
和+SP
默认情况下,创建的脏CPU调度器线程的数量等于创建的普通调度程序线程的数量,而联机的脏CPU调度程序线程的数量等于联机的正常调度程序线程的数量。DirtyCPUSchedulers
如果:DirtyCPUSchedulersOnline
不是和相反。联机的脏cpu调度程序的数量可以在运行时通过以下方式更改:erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)
...
脏CPU调度器的数量受到普通调度程序数量的限制,以限制对普通调度程序上执行的进程的影响。如果允许脏CPU调度程序的数量是无限的,则脏CPU绑定作业可能会导致正常作业的饥饿。
如果模拟器没有启用线程支持,则忽略此选项。
+SDPcpu DirtyCPUSchedulersPercentage:DirtyCPUSchedulersOnlinePercentage
类似于+SDcpu但是使用百分比来设置要创建的脏CPU调度程序线程的数量,以及启用线程支持时在线设置的脏CPU调度程序线程数。指定的值必须是>0。例如,+SDPcpu 50:25将脏cpu调度器线程的数目设置为配置的逻辑处理器的50%,将脏cpu调度器线程的在线数量设置为可用逻辑处理器的25%。DirtyCPUSchedulersPercentage如果:DirtyCPUSchedulersOnlinePercentage不是和相反。联机的脏cpu调度程序的数量可以在运行时通过以下方式更改:erlang:system_flag(dirty_cpu_schedulers_online, DirtyCPUSchedulersOnline)...
此选项与+SDcpu
设置。例如,在配置了8个逻辑核和8个可用逻辑核的系统上,这些选项的组合+SDcpu 4:4 +SDPcpu 50:25
%28按任一顺序%29导致2个脏CPU调度程序线程(4%29中的2850%%)和4%29中的1脏CPU调度器线程(在线)%2825%。
如果模拟器没有启用线程支持,则忽略此选项。
+SDio DirtyIOSchedulers
设置启用线程支持时要创建的脏I/O调度器线程数。有效范围为0-1024.。默认情况下,创建的脏I/O调度器线程数为10,与async thread pool
...
脏IO调度程序的数量不受正常调度程序数量的限制。like the amount of dirty CPU schedulers
这是因为只有I/O绑定的工作需要在脏I/O调度程序上执行。如果用户应该在脏的I/O调度器上调度与CPU绑定的作业,这些作业可能会使在普通调度程序上执行的普通作业挨饿。
如果模拟器没有启用线程支持,则忽略此选项。
+sFlag Value
调度特定标志。
+sbt BindType
设置调度程序绑定类型。
还可以使用标志绑定调度程序。+stbt
这两个标志之间唯一的区别是如何处理下列错误:
- 在特定平台上不支持计划程序的绑定。
- 没有可用的CPU拓扑。也就是说,运行时系统无法自动检测cpu拓扑,而没有。
user-defined CPU topology
被设定好了。
如果这些错误中的任何一个发生在+sbt
已传递后,运行时系统将打印错误消息,并拒绝启动。如果这些错误中的任何一个发生在+stbt
已传递,运行时系统将忽略错误,并使用未绑定调度程序启动。
有效BindType
s:
u
unbound
-调度器不绑定到逻辑处理器,即操作系统决定调度程序线程执行的位置以及何时迁移它们。这是默认的。ns
no_spread
-在硬件中尽可能地将具有关闭调度程序标识符的调度器绑定。ts
thread_spread
线程指硬件线程%28,如Intel%27s
超线程%29。调度器具有较低的调度器标识符,绑定到每个核心的第一个硬件线程,然后将具有较高调度器标识符的调度器绑定到每个核心的第二个硬件线程,等等。ps
processor_spread
-调度程序就像thread_spread
,但也超越了物理处理器芯片。s
spread
-调度程序尽可能广泛。nnts
no_node_thread_spread
-喜欢thread_spread
但是,如果存在多个非均匀内存访问%28 NUMA%29节点,则调度器一次分布在一个NUMA节点上,也就是说,一个NUMA节点的所有逻辑处理器都按顺序绑定到调度程序。nnps
no_node_processor_spread
-喜欢processor_spread
但是,如果存在多个NUMA节点,则调度器一次分散在一个NUMA节点上,也就是说,一个NUMA节点的所有逻辑处理器都按顺序绑定到调度器。tnnps
thread_no_node_processor_spread
-综合thread_spread
,和no_node_processor_spread
调度器分布在跨越NUMA节点的硬件线程上,但调度器一次只在一个NUMA节点的内部分布在处理器上。db
default_bind
-按默认方式绑定调度程序。默认为thread_no_node_processor_spread
%28,这可能会在将来更改%29。
调度程序的绑定只支持在较新的Linux、Solaris、FreeBSD和Windows系统上。
如果没有cpu
拓扑可用,则为+sbt
被处理BindType
是任何其他类型的u
,运行时系统无法启动。可以使用标志定义cpu
拓扑。+sct
注意那面旗帜+sct
必须在旗号之前传递+sbt
在命令行%28上,如果没有自动检测到%29的CPU拓扑。
默认情况下,运行时系统会执行不
将调度程序绑定到逻辑处理器。
注
如果Erlang运行时系统是唯一将线程绑定到逻辑处理器的操作系统进程,那么这将提高运行时系统的性能。但是,如果其他操作系统处理%28(例如另一个Erlang运行时系统%29)也将线程绑定到逻辑处理器,则可能会导致性能损失。这种性能损失有时会很严重。如果是这样,建议您不要绑定调度程序。
调度程序是如何绑定的。例如,在运行进程少于联机调度程序的情况下,运行时系统尝试将进程迁移到具有低调度程序标识符的调度程序。调度器在硬件上的分布越多,在这种情况下运行时系统就能获得更多的资源。
注
如果调度程序无法绑定,这通常会被静默忽略,因为验证有效的逻辑处理器标识符并不总是可能的。如果报告了错误,则报告给error_logger
如果要验证调度程序是否已按请求绑定,请调用erlang:system_info(scheduler_bindings)
...
+sbwt none|very_short|short|medium|long|very_long
设置调度程序繁忙等待阈值。默认为medium
该阈值决定了在工作结束后,调度程序在睡觉前要等待多长时间。
注
此标志可随时移除或更改,无须事先通知。
+scl true|false
启用或禁用调度程序压缩负载。默认情况下,启用了负载的计划程序压缩。当启用时,负载平衡会为负载分布而努力,这将导致尽可能多的调度程序线程完全加载%28,也就是说,不会耗尽工作%29。这是通过迁移Load%28来实现的--例如,当调度程序经常耗尽工作时,可运行进程%29迁移到一组较小的调度程序中。禁用时,负载平衡逻辑不考虑调度程序耗尽工作的频率。
+scl false
类似于+sub true
,但是+sub true
此外,在调度程序之间平衡调度程序的利用率。
+sct CpuTopology
- <Id> = integer( when 0 =< <Id> =< 65535
- <IdRange> = <Id>-<Id>
- <IdOrIdRange> = <Id> | <IdRange>
- <IdList> = <IdOrIdRange>,<IdOrIdRange> | <IdOrIdRange>
- <LogicalIds> = L<IdList>
- <ThreadIds> = T<IdList> | t<IdList>
- <CoreIds> = C<IdList> | c<IdList>
- <ProcessorIds> = P<IdList> | p<IdList>
- <NodeIds> = N<IdList> | n<IdList>
- <IdDefs> = <LogicalIds><ThreadIds><CoreIds><ProcessorIds><NodeIds> | <LogicalIds><ThreadIds><CoreIds><NodeIds><ProcessorIds>
- CpuTopology = <IdDefs>:<IdDefs> | <IdDefs>
设置用户定义的CPU拓扑。用户定义的CPU拓扑覆盖任何自动检测到的CPU拓扑。时使用cpu拓扑。binding schedulers to logical processors
...
大写字母表示真实标识符,小写字母表示假标识符,仅用于描述拓扑结构。作为实际标识符传递的标识符可以在尝试访问特定硬件时由运行时系统使用;如果它们不正确,则行为未定义。伪造的逻辑CPU标识符不被接受,因为在没有真正的逻辑CPU标识符的情况下定义CPU拓扑是没有意义的。可以省略线程、核心、处理器和节点标识符。如果省略,线程ID默认为t0
,核心ID默认为c0
,处理器ID默认为p0
,节点ID未定义。要么每个逻辑处理器必须只属于一个NUMA节点,要么没有逻辑处理器必须属于任何NUMA节点。
增减<IdRange>是允许的。
NUMA节点标识符是系统范围的。也就是说,系统上的每个NUMA节点必须有一个唯一的标识符。处理器标识符也是系统范围的。核心标识符是处理器宽的。线程标识符是核心宽的。
标识符类型的顺序意味着CPU拓扑的层次结构。有效的命令如下:
- <LogicalIds><ThreadIds><CoreIds><ProcessorIds><NodeIds>也就是说,线程是处理器的一部分核心的一部分,而处理器是NUMA节点的一部分。
- <LogicalIds><ThreadIds><CoreIds><NodeIds><ProcessorIds>也就是说,线程是核的一部分,是NUMA节点的一部分,而NUMA节点是处理器的一部分。
只要每个逻辑处理器只属于一个NUMA节点,CPU拓扑就可以由处理器外部的处理器和处理器内部的NUMA节点组成。如果<ProcessorIds>,则其默认位置在前面。<NodeIds>也就是说,默认的是处理器外部NUMA节点。
如果在<IdDefs>*
- <LogicalIds>必须是标识符列表。
- 另外,至少还有一种其他标识符类型<LogicalIds>还必须有标识符的列表。
- 所有标识符列表都必须生成相同数量的标识符。
一个简单的例子。一个四核处理器可以描述如下:
% erl +sct L0-3c0-3
1> erlang:system_info(cpu_topology).
[{processor,[{core,{logical,0}},
{core,{logical,1}},
{core,{logical,2}},
{core,{logical,3}}]}]
一个更复杂的例子,有两个四核处理器,每个处理器在自己的NUMA节点上。逻辑处理器的排序有点奇怪。为了给出一个更好的标识符列表示例:
% erl +sct L0-1,3-2c0-3p0N0:L7,4,6-5c0-3p1N1
1> erlang:system_info(cpu_topology).
[{node,[{processor,[{core,{logical,0}},
{core,{logical,1}},
{core,{logical,3}},
{core,{logical,2}}]}]},
{node,[{processor,[{core,{logical,7}},
{core,{logical,4}},
{core,{logical,6}},
{core,{logical,5}}]}]}]
只要真正的标识符是正确的,就可以传递一个CPU拓扑,而这个拓扑不是CPU拓扑的正确描述。当使用时小心,这可能是非常有用的。这是为了欺骗仿真程序,使其按需要绑定其调度程序。例如,如果您想在同一台机器上运行多个Erlang运行时系统,则需要减少所使用的调度程序的数量,并操作CPU拓扑,以便将它们绑定到不同的逻辑CPU。例如,在四核计算机上有两个Erlang运行时系统:
% erl +sct L0-3c0-3 +sbt db +S3:2 -detached -noinput -noshell -sname one
% erl +sct L3-0c0-3 +sbt db +S3:2 -detached -noinput -noshell -sname two
在本例中,每个运行时系统都有两个在线调度程序,所有在线调度程序都将在不同的核心上运行。如果我们在一个运行时系统上更改为一个联机调度程序,而另一个则切换为三个调度器,则所有在线调度程序仍将运行在不同的核心上。
注意,伪造的CPU拓扑不反映实际CPU拓扑的样子,可能会降低运行时系统的性能。
有关更多信息,请参见erlang:system_info(cpu_topology)
...
+secio true|false
启用或禁用紧急检查I/O调度。默认为true
。默认值更改为false
从ERTS 7.0开始。引入此标志之前的行为对应于+secio false
...
当调度程序将检查可能执行的I/O操作,以及这些I/O操作执行时,标志效果。正如参数名称所暗示的那样,调度程序更愿意在下列情况下检查I/Otrue
都通过了。然而,这也意味着执行未完成的I/O操作的优先级不像在false
都通过了。
erlang:system_info(eager_check_io)
返回启动虚拟机时使用的此参数的值。
+sfwi Interval
设置调度程序强制唤醒间隔。每个运行的队列都会被扫描。Interval
毫秒。当系统中有休眠调度程序时,每个发现的非空运行队列都会唤醒一个调度程序。Interval
默认为0
,这意味着此功能已被禁用。
注
这个特性被引入作为长期执行本机代码的临时解决方案,以及本机代码在OTP中不能正确地减少。当这些bug被修复后,这个标志就会被移除。
+spp Bool
设置端口并行性的默认调度程序提示。如果设置为true
,虚拟机在提高系统中的并行性时,会调度端口任务。如果设置为false
,虚拟机试图立即执行端口任务,以牺牲并行性为代价提高延迟。默认为false
可以在运行时通过调用erlang:system_info(port_parallelism)
.通过传递选项,可以在端口创建时重写默认值parallelism
到erlang:open_port/2
...+sss size
建议的堆栈大小,以千字为单位,用于调度程序线程。有效范围为20-8192千字。默认的建议堆栈大小是128千字。
+sssdcpu size
建议的堆栈大小,以千字为单位,用于脏CPU调度程序线程。有效范围为20-8192千字。默认的建议堆栈大小是40千字。
+sssdio size
建议的堆栈大小,单位为千字,用于脏IO调度程序线程。有效范围为20-8192千字。默认的建议堆栈大小是40千字。
+stbt BindType
尝试设置调度程序绑定类型。同旗+sbt
除了如何处理一些错误。有关更多信息,请参见+sbt
...
+sub true|false
启用或禁用scheduler utilization
负载平衡。默认情况下,将禁用调度程序利用率平衡,而启用调度程序压缩负载,这将努力实现负载分布,该分布将导致尽可能多的调度程序线程完全加载%28,也就是说,不会耗尽工作%29。启用调度程序使用平衡时,系统将尝试在调度程序之间平衡调度程序的利用率。也就是说,在所有调度程序上争取同等的调度程序利用率。
+sub true
仅在运行时系统检测和使用单调增加的高分辨率时钟的系统上才支持。在其他系统上,运行时系统无法启动。
+sub true
暗示+scl false
...之间的区别+sub true
和+scl false
那是+scl false
不尝试平衡调度程序的利用率。
+swct very_eager|eager|medium|lazy|very_lazy
设置调度程序唤醒清理阈值。默认为medium
控制调度程序由于某些清理操作而请求唤醒的急切程度。当使用延迟设置时,可以在调度程序空闲时保留更多未执行的清理操作。当使用热切设置时,调度程序会更频繁地被唤醒,这可能会增加CPU的利用率。
注
此标志可随时移除或更改,无须事先通知。
+sws default|legacy
设置调度器唤醒策略。默认策略在ERTS 5.10%28 Erlang/OTP R16A%29中更改。这种策略被称为proposal
在Erlang/OTP R15。大legacy
策略被用作默认的从R13到R15。
注
此标志可随时移除或更改,无须事先通知。
+swt very_low|low|medium|high|very_high
设置调度程序唤醒阈值。默认为medium
当存在比当前清醒调度程序所能处理的更多工作时,阈值决定何时唤醒休眠调度程序。低阈值导致早期唤醒,高阈值导致后期唤醒。早期唤醒更快地将工作分配到多个调度程序上,但是工作在调度器之间更容易反弹。
注
此标志可随时移除或更改,无须事先通知。
+t size
设置虚拟机可以处理的最大原子数。默认值为1,048,576。
+T Level
启用修改的计时并设置修改的计时级别。有效范围是0-9.。运行时系统的时间发生了更改。高水平通常意味着比低水平更大的变化。更改时间对于查找与时间相关的错误非常有用。
修改的时间影响到以下方面:
过程产卵
进程调用spawn
,,,spawn_link
,,,spawn_monitor
,或spawn_opt
在呼叫完成后立即被安排外出。当使用更高的修改的定时电平时,调用方也在计划结束后睡上一段时间。上下文缩减
进程在计划退出之前允许使用的减少数会增加或减少。投入削减
检查I/O之前执行的减少数会增加或减少。
注
当启用修改的定时时,性能会受到影响。这个旗子是只
用于测试和调试。
return_to
和return_from
跟踪消息丢失时,跟踪在产卵BIF。
此标志可随时移除或更改,无须事先通知。
+v
长篇大论。
+V
使模拟器打印其版本号。
+W w | i | e
设置警告消息的映射。error_logger
使用警告例程之一发送到错误记录器的消息可以映射到错误%28。+W e
+W w
%29,或信息报告%28+W i
29%。默认为警告。当前映射可以使用error_logger:warning_map/0
有关更多信息,请参见error_logger:warning_map/0
在内核。
+zFlag Value
杂项旗帜:
+zdbbl size
设置分发缓冲区繁忙限制%28dist_buf_busy_limit
%29千字节。有效范围为1-2097151.。默认为1024。
较大的缓冲区限制允许进程在分发版上缓冲更多的传出消息。当达到缓冲区限制时,发送进程将暂停,直到缓冲区大小缩小为止。缓冲区限制为每个分发通道。更高的限制以牺牲更高的内存使用为代价,提供更低的延迟和更高的吞吐量。
+zdntgc time
设置延迟节点表垃圾收集时间%28delayed_node_table_gc
%29秒。有效值为infinity
或0-100000000范围内的整数。默认为60。
在表中没有引用的节点表条目至少要停留此参数确定的时间。挥之不去可以防止重复删除和插入表。
环境变量
ERL_CRASH_DUMP
如果模拟器需要编写崩溃转储,则此变量的值是崩溃转储文件的文件名。如果未设置变量,则崩溃转储文件的名称为erl_crash.dump
在当前目录中。
ERL_CRASH_DUMP_NICE
Unix系统
:如果模拟器需要编写崩溃转储,它会使用这个变量的值来设置进程的好值,从而降低其优先级。有效范围为1-39%,28更高的值被替换为39%29。最高值(39)给予进程最低优先级。
ERL_CRASH_DUMP_SECONDS
Unix系统
这个变量给出了仿真器用于编写崩溃转储的秒数。当给定的秒数已经过去时,模拟器将被终止。
ERL_CRASH_DUMP_SECONDS=0
如果变量设置为0
运行时系统甚至不
尝试编写崩溃转储文件。它只会终止。这是默认的if选项。-heart
传递给erl
和ERL_CRASH_DUMP_SECONDS
还没有设定。ERL_CRASH_DUMP_SECONDS=S
如果变量设置为正值S
,等待S
以完成崩溃转储文件,然后使用SIGALRM
信号。ERL_CRASH_DUMP_SECONDS=-1
一个负值会导致运行时系统的终止无限期地等待,直到崩溃转储文件被完整地写入。这是默认的if选项。-heart
是不
传给erl
和ERL_CRASH_DUMP_SECONDS
还没有设定。
另见heart(3)
...
ERL_CRASH_DUMP_BYTES
此变量设置崩溃转储文件的最大大小(以字节为单位)。如果超出此限制,将截断崩溃转储。如果未设置变量,默认情况下不强制设置大小限制。如果变量设置为0
,运行时系统甚至不尝试编写崩溃转储文件。
引进ERTS 8.1.2%28 Erlang/OTP 19.2%29。
ERL_AFLAGS
将此变量的内容添加到erl
...
旗子-extra
以一种特殊的方式对待。其作用域结束于环境变量内容的末尾。后面的参数-extra
将命令行上的标志移至区段。-extra
,即命令行在-extra
旗子。
ERL_ZFLAGS
和
ERL_FLAGS
将这些变量的内容添加到命令行的末尾erl
...
旗子-extra
以一种特殊的方式对待。其作用域结束于环境变量内容的末尾。后面的参数-extra
将命令行上的标志移至区段。-extra
,即命令行在-extra
旗子。
ERL_LIBS
包含代码服务器搜索应用程序并添加到代码路径的附加库目录列表;请参见code(3)
...
ERL_EPMD_ADDRESS
可以设置为以逗号分隔的ip地址列表,在这种情况下,epmd
守护进程只侦听指定地址%28es%29和环回地址%28,如果未指定%29,则隐式添加到列表中。
ERL_EPMD_PORT
可以包含要使用的端口号,以便与epmd
默认端口在大多数情况下工作正常。可以指定不同的端口,以允许独立集群的节点在同一主机上共存。集群中的所有节点必须使用相同的epmd
端口号。
信号
在Unix系统上,Erlang运行时将解释两种类型的信号。
SIGUSR1
阿SIGUSR1
信号会迫使飞机坠毁。
SIGTERM
阿SIGTERM
会产生一个stop
消息发送给init
过程。这相当于init:stop/0
打电话。
介绍了ERTS 8.3%28 Erlang/OTP 19.3%29
信号SIGUSR2
保留给内部使用。没有其他信号被处理。
配置
可以重新配置标准的Erlang/OTP系统,以更改启动时的默认行为。
大
.erlang
启动文件
当Erlang/OTP启动时,系统将搜索一个名为.erlang
在启动Erlang/OTP的目录中。如果找不到,则搜索用户%27s主目录中的.erlang
档案。
如果.erlang
文件被找到时,假定它包含有效的Erlang表达式。这些表达式的计算方法就好像它们是输入到shell中一样。
典型.erlang
文件包含一组搜索路径,例如:
io:format("executing user profile in HOME/.erlang\n",[]).
code:add_path("/home/calvin/test/ebin").
code:add_path("/home/hobbes/bigappl-1.2/ebin").
io:format(".erlang rc finished\n",[]).
用户
[医]
默认和外壳
[医]
违约
在shell中没有以模块名称作为前缀的函数被假定为函数对象%28 funs%29,内置函数%28 bif%29,或属于该模块。user_default
或shell_default
...
若要包含私有shell命令,请在模块中定义它们user_default
中的第一行添加以下参数.erlang
档案:
code:load_abs("..../user_default").
ERL
如果...的内容.erlang
的私有版本user_default
则可以自定义Erlang/OTP环境。可以通过在启动脚本中提供命令行参数来进行更强大的更改。erl
有关更多信息,请参见init(3)
...
另见
epmd(1)
,,,erl_prim_loader(3)
,,,erts_alloc(3)
,,,init(3)
,,,application(3)
,,,auth(3)
,,,code(3)
,,,erl_boot_server(3)
,,,heart(3)
,,,net_kernel(3)
,,,make(3)
© 2010–2017 Ericsson AB
根据ApacheLicense,版本2.0获得许可。