本文详细说明了 rabbitmq 服务程序启动时配置参数的含义。
[root@Betty mnt]# ps aux|grep rabbit
root 3588 0.3 0.9 133420 37812 ? Sl 09:35 0:11 /usr/local/lib/erlang/erts-5.9.2/bin/beam.smp -W w -K true -A30 -P 1048576 -- -root /usr/local/lib/erlang -progname erl -- -home /root -- -pa /usr/local/sbin/../ebin -noshell -noinput -s rabbit boot -sname rabbit@Betty -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/log/rabbitmq/rabbit@Betty.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbit@Betty-sasl.log"} -rabbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/local/sbin/../plugins" -rabbit plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbit@Betty-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@Betty" -noshell -noinput
我们通常使用 erl <arguments> 命令启动 Erlang 的运行时系统,其中 arguments 就是我们启动时指定的各种参数。其类型如下:
+ emulator flag there are a small number of "-" flags which now actually are emulator flags
- flag {init flag, user flag} init process interprets init flags, and stores user flags.
-- plain argument init process plain argument, -extra causes everything that follows to become plain arguments
可以在 Erlang shell 或者 code 中通过如下调用获取相应的值:
init:get_argument/1 -- 获取指定 user flag 或者系统自定义 flag 的值
init:get_arguments/0 -- 获取所有 user flag 和系统自定义 flag 的值
init:get_plain_arguments/0 -- 获取所有 plain argument 的值
下面将上面的启动参数进行分解说明:
/usr/local/lib/erlang/erts-5.9.2/bin/beam.smp
-W w
==========
+W w | i
Sets the mapping of warning messages for error_logger.
Messages sent to the error logger using one of the warning routines can be mapped either to errors (default), warnings (+W w), or info reports (+W i). The current mapping can be retrieved using error_logger:warning_map/0. See error_logger(3) for further information.
==========
-K true
==========
+K true | false
Enables or disables the kernel poll functionality if the emulator supports it. Default is false (disabled). If the emulator does not support kernel poll, and the +K flag is passed to the emulator, a warning is issued at startup.
==========
-A30
==========
+A size
Sets the number of threads in async thread pool, valid range is 0-1024. Default is 0.
==========
-P 1048576
==========
+P Number
Sets the maximum number of concurrent processes for this system. Number must be in the range 16..134217727.
Default is 32768.
==========
--
==========
--(init flag)
Everything following -- up to the next flag (-flag or +flag) is considered plain arguments and can be retrieved using init:get_plain_arguments/0.
==========
-root /usr/local/lib/erlang
-progname erl
--
-home /root
--
-pa /usr/local/sbin/../ebin
==========
-pa Dir1 Dir2 ...
Adds the specified directories to the beginning of the code path, similar to code:add_pathsa/1. See code(3).
As an alternative to -pa, if several directories are to be prepended to the code and the directories have a common parent directory, that parent directory could be specified in the ERL_LIBS environment variable. See code(3).
-pz Dir1 Dir2 ...
Adds the specified directories to the end of the code path, similar to code:add_pathsz/1. See code(3).
==========
-noshell
-noinput
==========
-noinput
Ensures that the Erlang runtime system never tries to read any input. Implies -noshell.
-noshell
Starts an Erlang runtime system with no shell. This flag makes it possible to have the Erlang runtime system as a component in a series of UNIX pipes.
==========
-s rabbit boot
==========
-s Mod [Func [Arg1, Arg2, ...]](init flag)
Makes init call the specified function. Func defaults to start. If no arguments are provided, the function is assumed to be of arity 0. Otherwise it is assumed to be of arity 1, taking the list [Arg1,Arg2,...] as argument. All arguments are passed as atoms. See init(3).
==========
-sname rabbit @Betty -boot start_sasl
==========
-sname Name
Makes the Erlang runtime system into a distributed node, similar to -name, but the host name portion of the node name Name@Host will be the short name, not fully qualified.
This is sometimes the only way to run distributed Erlang if the DNS (Domain Name System) is not running. There can be no communication between nodes running with the -sname flag and those running with the -name flag, as node names must be unique in distributed Erlang systems.
==========
-kernel inet_default_connect_options [{nodelay,true}]
-sasl errlog_type error
-sasl sasl_error_logger false
-rabbit error_logger {file,"/var/log/rabbitmq/rabbit@Betty.log"}
-rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbit@Betty-sasl.log"}
-rabbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins"
-rabbit plugins_dir "/usr/local/sbin/../plugins"
-rabbit plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbit@Betty-plugins-expand"
-os_mon start_cpu_sup false
-os_mon start_disksup false
-os_mon start_memsup false
-mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@Betty"
==========
-Application Par Val
Sets the application configuration parameter Par to the value Val for the application Application, see app(4)
and application(3).
==========
-noshell
-noinput
注:
上面参数中的 emulator flag 均使用的 - 号作为前缀,其在erts-5.9.2中的说明如下:
It can be noted that there are a small number of "-" flags which now actually are emulator flags
上面未进行解释说明的 -root /usr/local/lib/erlang 、-progname erl 和 -home /root 均为 user flag 。这些参数为运行时系统自动定义的。其中
root The installation directory of Erlang/OTP, $ROOT.
progname The name of the program which started Erlang.
home The home directory.
上面多处出现 -- 但其后并未指定任何 plain argument 。