Skip to content

Commit 631f822

Browse files
Merge pull request #1528 from rabbitmq/configurable-max-procs-max-atoms
Maximum number of Erlang processes and atoms can be configured via environment variables
2 parents 179f229 + 512a57b commit 631f822

File tree

3 files changed

+170
-45
lines changed

3 files changed

+170
-45
lines changed

scripts/rabbitmq-env

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,23 @@ ESCRIPT_DIR="${RABBITMQ_HOME}/escript"
8282
[ -f ${RABBITMQ_CONF_ENV_FILE} ] && . ${RABBITMQ_CONF_ENV_FILE} || true
8383

8484
DEFAULT_SCHEDULER_BIND_TYPE="db"
85-
[ "x" = "x$RABBITMQ_SCHEDULER_BIND_TYPE" ] && RABBITMQ_SCHEDULER_BIND_TYPE=${DEFAULT_SCHEDULER_BIND_TYPE}
85+
[ -n "$SCHEDULER_BIND_TYPE" ] || SCHEDULER_BIND_TYPE="$DEFAULT_SCHEDULER_BIND_TYPE"
86+
[ -n "$RABBITMQ_SCHEDULER_BIND_TYPE" ] || RABBITMQ_SCHEDULER_BIND_TYPE="$SCHEDULER_BIND_TYPE"
8687

87-
DEFAULT_DISTRIBUTION_BUFFER_SIZE=128000
88-
[ "x" = "x$RABBITMQ_DISTRIBUTION_BUFFER_SIZE" ] && RABBITMQ_DISTRIBUTION_BUFFER_SIZE=${DEFAULT_DISTRIBUTION_BUFFER_SIZE}
88+
DEFAULT_DISTRIBUTION_BUFFER_SIZE=1280000
89+
[ -n "$DISTRIBUTION_BUFFER_SIZE" ] || DISTRIBUTION_BUFFER_SIZE="$DEFAULT_DISTRIBUTION_BUFFER_SIZE"
90+
[ -n "$RABBITMQ_DISTRIBUTION_BUFFER_SIZE" ] || RABBITMQ_DISTRIBUTION_BUFFER_SIZE="$DISTRIBUTION_BUFFER_SIZE"
91+
92+
DEFAULT_MAX_NUMBER_OF_PROCESSES=1048576
93+
[ -n "$MAX_NUMBER_OF_PROCESSES" ] || MAX_NUMBER_OF_PROCESSES="$DEFAULT_MAX_NUMBER_OF_PROCESSES"
94+
[ -n "$RABBITMQ_MAX_NUMBER_OF_PROCESSES" ] || RABBITMQ_MAX_NUMBER_OF_PROCESSES="$MAX_NUMBER_OF_PROCESSES"
95+
96+
DEFAULT_MAX_NUMBER_OF_ATOMS=5000000
97+
[ -n "$MAX_NUMBER_OF_ATOMS" ] || MAX_NUMBER_OF_ATOMS="$DEFAULT_MAX_NUMBER_OF_ATOMS"
98+
[ -n "$RABBITMQ_MAX_NUMBER_OF_ATOMS" ] || RABBITMQ_MAX_NUMBER_OF_ATOMS="$MAX_NUMBER_OF_ATOMS"
8999

90100
## Common server defaults
91-
SERVER_ERL_ARGS="+P 1048576 +t 5000000 +stbt $RABBITMQ_SCHEDULER_BIND_TYPE +zdbbl $RABBITMQ_DISTRIBUTION_BUFFER_SIZE"
101+
SERVER_ERL_ARGS=" +P $RABBITMQ_MAX_NUMBER_OF_PROCESSES +t $RABBITMQ_MAX_NUMBER_OF_ATOMS +stbt $RABBITMQ_SCHEDULER_BIND_TYPE +zdbbl $RABBITMQ_DISTRIBUTION_BUFFER_SIZE "
92102

93103
# We save the current value of $RABBITMQ_PID_FILE in case it was set by
94104
# an init script. If $CONF_ENV_FILE overrides it again, we must ignore

scripts/rabbitmq-env.bat

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,44 +27,50 @@ if not defined ERLANG_HOME (
2727
)
2828

2929
REM ## Set defaults
30-
REM . ${SCRIPT_DIR}/rabbitmq-defaults
3130
call "%SCRIPT_DIR%\rabbitmq-defaults.bat"
3231

33-
set DEFAULT_SCHEDULER_BIND_TYPE=db
32+
if "!RABBITMQ_CONF_ENV_FILE!"=="" (
33+
set RABBITMQ_CONF_ENV_FILE=!CONF_ENV_FILE!
34+
)
35+
36+
if exist "!RABBITMQ_CONF_ENV_FILE!" (
37+
call "!RABBITMQ_CONF_ENV_FILE!"
38+
)
3439

35-
REM [ "x" = "x$RABBITMQ_SCHEDULER_BIND_TYPE" ] && RABBITMQ_SCHEDULER_BIND_TYPE=${DEFAULT_SCHEDULER_BIND_TYPE}
36-
REM set the default scheduling bind type
40+
set DEFAULT_SCHEDULER_BIND_TYPE=db
41+
if "!RABBITMQ_SCHEDULER_BIND_TYPE!"=="" (
42+
set RABBITMQ_SCHEDULER_BIND_TYPE=!SCHEDULER_BIND_TYPE!
43+
)
3744
if "!RABBITMQ_SCHEDULER_BIND_TYPE!"=="" (
3845
set RABBITMQ_SCHEDULER_BIND_TYPE=!DEFAULT_SCHEDULER_BIND_TYPE!
3946
)
4047

41-
REM DEFAULT_DISTRIBUTION_BUFFER_SIZE=128000
42-
REM set the VM distribution buffer size
43-
REM [ "x" = "x$RABBITMQ_DISTRIBUTION_BUFFER_SIZE" ] && RABBITMQ_DISTRIBUTION_BUFFER_SIZE=${DEFAULT_DISTRIBUTION_BUFFER_SIZE}
4448
set DEFAULT_DISTRIBUTION_BUFFER_SIZE=128000
49+
if "!RABBITMQ_DISTRIBUTION_BUFFER_SIZE!"=="" (
50+
set RABBITMQ_DISTRIBUTION_BUFFER_SIZE=!DISTRIBUTION_BUFFER_SIZE!
51+
)
4552
if "!RABBITMQ_DISTRIBUTION_BUFFER_SIZE!"=="" (
4653
set RABBITMQ_DISTRIBUTION_BUFFER_SIZE=!DEFAULT_DISTRIBUTION_BUFFER_SIZE!
4754
)
4855

49-
REM # warn about old rabbitmq.conf file, if no new one
50-
REM if [ -f /etc/rabbitmq/rabbitmq.conf ] && \
51-
REM [ ! -f ${CONF_ENV_FILE} ] ; then
52-
REM echo -n "WARNING: ignoring /etc/rabbitmq/rabbitmq.conf -- "
53-
REM echo "location has moved to ${CONF_ENV_FILE}"
54-
REM fi
55-
56-
REM Common defaults
57-
set SERVER_ERL_ARGS=+P 1048576 +t 5000000 +stbt !RABBITMQ_SCHEDULER_BIND_TYPE! +zdbbl !RABBITMQ_DISTRIBUTION_BUFFER_SIZE!
58-
59-
REM ## Get configuration variables from the configure environment file
60-
REM [ -f ${CONF_ENV_FILE} ] && . ${CONF_ENV_FILE} || true
61-
if "!RABBITMQ_CONF_ENV_FILE!"=="" (
62-
set RABBITMQ_CONF_ENV_FILE=!CONF_ENV_FILE!
56+
set DEFAULT_MAX_NUMBER_OF_PROCESSES=1048576
57+
if "!RABBITMQ_MAX_NUMBER_OF_PROCESSES!"=="" (
58+
set RABBITMQ_MAX_NUMBER_OF_PROCESSES=!MAX_NUMBER_OF_PROCESSES!
59+
)
60+
if "!RABBITMQ_MAX_NUMBER_OF_PROCESSES!"=="" (
61+
set RABBITMQ_MAX_NUMBER_OF_PROCESSES=!DEFAULT_MAX_NUMBER_OF_PROCESSES!
6362
)
6463

65-
if exist "!RABBITMQ_CONF_ENV_FILE!" (
66-
call "!RABBITMQ_CONF_ENV_FILE!"
64+
set DEFAULT_MAX_NUMBER_OF_ATOMS=5000000
65+
if "!RABBITMQ_MAX_NUMBER_OF_ATOMS!"=="" (
66+
set RABBITMQ_MAX_NUMBER_OF_ATOMS=!MAX_NUMBER_OF_ATOMS!
6767
)
68+
if "!RABBITMQ_MAX_NUMBER_OF_ATOMS!"=="" (
69+
set RABBITMQ_MAX_NUMBER_OF_ATOMS=!DEFAULT_MAX_NUMBER_OF_ATOMS!
70+
)
71+
72+
REM Common defaults
73+
set SERVER_ERL_ARGS=+P !RABBITMQ_MAX_NUMBER_OF_PROCESSES! +t !RABBITMQ_MAX_NUMBER_OF_ATOMS! +stbt !RABBITMQ_SCHEDULER_BIND_TYPE! +zdbbl !RABBITMQ_DISTRIBUTION_BUFFER_SIZE!
6874

6975
REM Make sure $RABBITMQ_BASE contains no non-ASCII characters.
7076
if not exist "!RABBITMQ_BASE!" (

test/rabbitmq-env.bats

Lines changed: 127 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,128 @@
1-
@test "can set RABBITMQ_SCHEDULER_BIND_TYPE from rabbitmq-env.conf" {
2-
declare -r scripts_dir="$BATS_TEST_DIRNAME/../scripts"
3-
export RABBITMQ_SCRIPTS_DIR="$scripts_dir"
4-
export RABBITMQ_CONF_ENV_FILE="$BATS_TMPDIR/rabbitmq-env.conf"
5-
echo 'RABBITMQ_SCHEDULER_BIND_TYPE=u' > "$RABBITMQ_CONF_ENV_FILE"
6-
source "$scripts_dir/rabbitmq-env"
7-
echo "expect RABBITMQ_SERVER_ERL_ARGS to contain '+stbt u' but got '$SERVER_ERL_ARGS'"
8-
[[ $RABBITMQ_SERVER_ERL_ARGS == *+stbt\ u* ]]
9-
}
10-
11-
@test "can set RABBITMQ_DISTRIBUTION_BUFFER_SIZE from rabbitmq-env.conf" {
12-
declare -r scripts_dir="$BATS_TEST_DIRNAME/../scripts"
13-
export RABBITMQ_SCRIPTS_DIR="$scripts_dir"
14-
export RABBITMQ_CONF_ENV_FILE="$BATS_TMPDIR/rabbitmq-env.conf"
15-
echo 'RABBITMQ_DISTRIBUTION_BUFFER_SIZE=123456' > "$RABBITMQ_CONF_ENV_FILE"
16-
source "$scripts_dir/rabbitmq-env"
17-
echo "expect RABBITMQ_SERVER_ERL_ARGS to contain '+zdbbl 123456' but got '$SERVER_ERL_ARGS'"
18-
[[ $RABBITMQ_SERVER_ERL_ARGS == *+zdbbl\ 123456* ]]
1+
#!/usr/bin/env bats
2+
3+
export RABBITMQ_SCRIPTS_DIR="$BATS_TEST_DIRNAME/../scripts"
4+
5+
setup() {
6+
export RABBITMQ_CONF_ENV_FILE="$BATS_TMPDIR/rabbitmq-env.$BATS_TEST_NAME.conf"
7+
}
8+
9+
@test "default Erlang scheduler bind type" {
10+
source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
11+
echo $RABBITMQ_SCHEDULER_BIND_TYPE
12+
13+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +stbt db ', but got: $RABBITMQ_SERVER_ERL_ARGS"
14+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +stbt db "* ]]
15+
}
16+
17+
@test "can configure Erlang scheduler bind type via conf file" {
18+
echo 'SCHEDULER_BIND_TYPE=u' > "$RABBITMQ_CONF_ENV_FILE"
19+
source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
20+
21+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +stbt u ', but got: $RABBITMQ_SERVER_ERL_ARGS"
22+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +stbt u "* ]]
23+
}
24+
25+
@test "can configure Erlang scheduler bind type via env" {
26+
RABBITMQ_SCHEDULER_BIND_TYPE=tnnps source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
27+
28+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +stbt tnnps ', but got: $RABBITMQ_SERVER_ERL_ARGS"
29+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +stbt tnnps "* ]]
30+
}
31+
32+
@test "Erlang scheduler bind type env takes precedence over conf file" {
33+
echo 'SCHEDULER_BIND_TYPE=s' > "$RABBITMQ_CONF_ENV_FILE"
34+
RABBITMQ_SCHEDULER_BIND_TYPE=nnps source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
35+
36+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +stbt nnps ', but got: $RABBITMQ_SERVER_ERL_ARGS"
37+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +stbt nnps "* ]]
38+
}
39+
40+
@test "default Erlang distribution buffer size" {
41+
source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
42+
43+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +zdbbl 1280000 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
44+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +zdbbl 1280000 "* ]]
45+
}
46+
47+
@test "can configure Erlang distribution buffer size via conf file" {
48+
echo 'DISTRIBUTION_BUFFER_SIZE=1000000' > "$RABBITMQ_CONF_ENV_FILE"
49+
source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
50+
51+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +zdbbl 1000000 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
52+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +zdbbl 1000000 "* ]]
53+
}
54+
55+
@test "can configure Erlang distribution buffer size via env" {
56+
RABBITMQ_DISTRIBUTION_BUFFER_SIZE=2000000 source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
57+
58+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +zdbbl 2000000 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
59+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +zdbbl 2000000 "* ]]
60+
}
61+
62+
@test "Erlang distribution buffer size env takes precedence over conf file" {
63+
echo 'DISTRIBUTION_BUFFER_SIZE=3000000' > "$RABBITMQ_CONF_ENV_FILE"
64+
RABBITMQ_DISTRIBUTION_BUFFER_SIZE=4000000 source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
65+
66+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +zdbbl 4000000 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
67+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +zdbbl 4000000 "* ]]
68+
}
69+
70+
@test "default Erlang maximum number of processes" {
71+
source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
72+
73+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +P 1048576 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
74+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +P 1048576 "* ]]
75+
}
76+
77+
@test "can configure Erlang maximum number of processes via conf file" {
78+
echo 'MAX_NUMBER_OF_PROCESSES=2000000' > "$RABBITMQ_CONF_ENV_FILE"
79+
source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
80+
81+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +P 2000000 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
82+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +P 2000000 "* ]]
83+
}
84+
85+
@test "can configure Erlang maximum number of processes via env" {
86+
RABBITMQ_MAX_NUMBER_OF_PROCESSES=3000000 source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
87+
88+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +P 3000000 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
89+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +P 3000000 "* ]]
90+
}
91+
92+
@test "Erlang maximum number of processes env takes precedence over conf file" {
93+
echo 'MAX_NUMBER_OF_PROCESSES=4000000' > "$RABBITMQ_CONF_ENV_FILE"
94+
RABBITMQ_MAX_NUMBER_OF_PROCESSES=5000000 source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
95+
96+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +P 5000000 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
97+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +P 5000000 "* ]]
98+
}
99+
100+
@test "default Erlang maximum number of atoms" {
101+
source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
102+
103+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +t 5000000 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
104+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +t 5000000 "* ]]
105+
}
106+
107+
@test "can configure Erlang maximum number of atoms via conf file" {
108+
echo 'MAX_NUMBER_OF_ATOMS=1000000' > "$RABBITMQ_CONF_ENV_FILE"
109+
source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
110+
111+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +t 1000000 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
112+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +t 1000000 "* ]]
113+
}
114+
115+
@test "can configure Erlang maximum number of atoms via env" {
116+
RABBITMQ_MAX_NUMBER_OF_ATOMS=2000000 source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
117+
118+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +t 2000000 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
119+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +t 2000000 "* ]]
120+
}
121+
122+
@test "Erlang maximum number of atoms env takes precedence over conf file" {
123+
echo 'MAX_NUMBER_OF_ATOMS=3000000' > "$RABBITMQ_CONF_ENV_FILE"
124+
RABBITMQ_MAX_NUMBER_OF_ATOMS=4000000 source "$RABBITMQ_SCRIPTS_DIR/rabbitmq-env"
125+
126+
echo "expected RABBITMQ_SERVER_ERL_ARGS to contain ' +t 4000000 ', but got: $RABBITMQ_SERVER_ERL_ARGS"
127+
[[ $RABBITMQ_SERVER_ERL_ARGS == *" +t 4000000 "* ]]
19128
}

0 commit comments

Comments
 (0)