diff --git a/bin/README.md b/bin/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..58903a11886c73663dd26b62c100054cd07dfc6c
--- /dev/null
+++ b/bin/README.md
@@ -0,0 +1,34 @@
+### 操作系统调优
+在生产环境部署Broker前,必须要执行os.sh,对操作系统进行调优
+
+**P.S: os.sh只能执行一次,需要sudo root权限**
+
+### 启动broker
+* Unix平台
+
+ `nohup sh mqbroker &`
+
+* Windows平台(仅支持64位)
+
+ `mqbroker.exe`
+
+### 关闭broker
+ sh mqshutdown broker
+
+### 启动Name Server
+* Unix平台
+
+ `nohup sh mqnamesrv &`
+
+* Windows平台(仅支持64位)
+
+ `mqnamesrv.exe`
+
+### 关闭Name Server
+ sh mqshutdown namesrv
+
+### 更新或创建Topic
+ sh mqadmin updateTopic -b 127.0.0.1:10911 -t TopicA
+
+### 更新或创建订阅组
+ sh mqadmin updateSubGroup -b 127.0.0.1:10911 -g SubGroupA
\ No newline at end of file
diff --git a/bin/cachedog.sh b/bin/cachedog.sh
new file mode 100644
index 0000000000000000000000000000000000000000..049a6637cb2438d856831bfc4120cb0143334e0a
--- /dev/null
+++ b/bin/cachedog.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+export PATH=$PATH:/sbin
+
+while true; do
+ nr_free_pages=`fgrep -A 10 Normal /proc/zoneinfo |grep nr_free_pages |awk -F ' ' '{print $2}'`
+ high=`fgrep -A 10 Normal /proc/zoneinfo |grep high |awk -F ' ' '{print $2}'`
+
+ NOW_DATE=`date +%D`
+ NOW_TIME=`date +%T`
+
+ if [ ${nr_free_pages} -le ${high} ]; then
+ sysctl -w vm.drop_caches=3
+ nr_free_pages_new=`fgrep -A 10 Normal /proc/zoneinfo |grep nr_free_pages |awk -F ' ' '{print $2}'`
+
+ printf "%s %s [CLEAN] nr_free_pages < high, clean cache. nr_free_pages=%s ====> nr_free_pages=%s\n" "${NOW_DATE}" "${NOW_TIME}" ${nr_free_pages} ${nr_free_pages_new}
+
+ sysctl -w vm.drop_caches=1
+ echo
+ echo
+ echo
+ else
+ printf "%s %s [NOTHING] nr_free_pages=%s high=%s\n" "${NOW_DATE}" "${NOW_TIME}" ${nr_free_pages} ${high}
+ fi
+
+ sleep 1
+done
diff --git a/bin/cleancache.sh b/bin/cleancache.sh
new file mode 100644
index 0000000000000000000000000000000000000000..250a46b25659842d3d2b6f07dbe285f4022340b7
--- /dev/null
+++ b/bin/cleancache.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+export PATH=$PATH:/sbin
+
+sysctl -w vm.drop_caches=3
diff --git a/bin/cleancache.v1.sh b/bin/cleancache.v1.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2e21582eea5d7685b839844509261d7c84aafd99
--- /dev/null
+++ b/bin/cleancache.v1.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+export PATH=$PATH:/sbin
+
+#
+# GB
+#
+function changeFreeCache()
+{
+ EXTRA=$1
+ MIN=$2
+ sysctl -w vm.extra_free_kbytes=${EXTRA}000000
+ sysctl -w vm.min_free_kbytes=${MIN}000000
+}
+
+
+if [ $# -ne 1 ]
+then
+ echo "Usage: $0 freecache(GB)"
+ echo "Example: $0 15"
+ exit
+fi
+
+changeFreeCache 3 $1
+changeFreeCache 3 1
diff --git a/bin/mqadmin b/bin/mqadmin
new file mode 100644
index 0000000000000000000000000000000000000000..616dc6d8bb8f3104cba169fef6458d567f6603e1
--- /dev/null
+++ b/bin/mqadmin
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ -z "$ROCKETMQ_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ ROCKETMQ_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ ROCKETMQ_HOME=`cd "$ROCKETMQ_HOME" && pwd`
+
+ cd "$saveddir"
+fi
+
+export ROCKETMQ_HOME
+
+sh ${ROCKETMQ_HOME}/bin/tools.sh com.alibaba.rocketmq.tools.command.MQAdminStartup $@
diff --git a/bin/mqadmin.exe b/bin/mqadmin.exe
new file mode 100644
index 0000000000000000000000000000000000000000..e8d8fac090b889ffc5f07d426857e824924473f6
Binary files /dev/null and b/bin/mqadmin.exe differ
diff --git a/bin/mqadmin.xml b/bin/mqadmin.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3f0180896ee94f6be1baba256fd442f17c7a77af
--- /dev/null
+++ b/bin/mqadmin.xml
@@ -0,0 +1,43 @@
+
+
+
+ false
+
+ ${JAVA_HOME}
+
+ server
+
+ com.alibaba.rocketmq.tools.command.MQAdminStartup
+
+
+ ${cpd}/../lib
+ ${cpd}/..
+
+
+
+
+
+
+ <-Xms512m>-Xms512m>
+ <-Xmx1g>-Xmx1g>
+ <-XX:NewSize>256M-XX:NewSize>
+ <-XX:MaxNewSize>512M-XX:MaxNewSize>
+ <-XX:PermSize>128M-XX:PermSize>
+ <-XX:MaxPermSize>128M-XX:MaxPermSize>
+
+
diff --git a/bin/mqbroker b/bin/mqbroker
new file mode 100644
index 0000000000000000000000000000000000000000..d4742549737af30c992a872322e1f50958c17dcc
--- /dev/null
+++ b/bin/mqbroker
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ -z "$ROCKETMQ_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ ROCKETMQ_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ ROCKETMQ_HOME=`cd "$ROCKETMQ_HOME" && pwd`
+
+ cd "$saveddir"
+fi
+
+export ROCKETMQ_HOME
+
+rm -f $HOME/rmq_bk_gc.log.bac
+cp $HOME/rmq_bk_gc.log $HOME/rmq_bk_gc.log.bac
+sh ${ROCKETMQ_HOME}/bin/runbroker.sh com.alibaba.rocketmq.broker.BrokerStartup $@
diff --git a/bin/mqbroker.exe b/bin/mqbroker.exe
new file mode 100644
index 0000000000000000000000000000000000000000..e8d8fac090b889ffc5f07d426857e824924473f6
Binary files /dev/null and b/bin/mqbroker.exe differ
diff --git a/bin/mqbroker.numanode0 b/bin/mqbroker.numanode0
new file mode 100644
index 0000000000000000000000000000000000000000..d0688a072dda267381a5b6cfdb924dc13c868fb5
--- /dev/null
+++ b/bin/mqbroker.numanode0
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ -z "$ROCKETMQ_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ ROCKETMQ_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ ROCKETMQ_HOME=`cd "$ROCKETMQ_HOME" && pwd`
+
+ cd "$saveddir"
+fi
+
+export ROCKETMQ_HOME
+
+export RMQ_NUMA_NODE=0
+
+sh ${ROCKETMQ_HOME}/bin/mqbroker $@
diff --git a/bin/mqbroker.numanode1 b/bin/mqbroker.numanode1
new file mode 100644
index 0000000000000000000000000000000000000000..ee350d4bf67996c09459c31a85e3993da0c6aa07
--- /dev/null
+++ b/bin/mqbroker.numanode1
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ -z "$ROCKETMQ_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ ROCKETMQ_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ ROCKETMQ_HOME=`cd "$ROCKETMQ_HOME" && pwd`
+
+ cd "$saveddir"
+fi
+
+export ROCKETMQ_HOME
+
+export RMQ_NUMA_NODE=1
+
+sh ${ROCKETMQ_HOME}/bin/mqbroker $@
diff --git a/bin/mqbroker.numanode2 b/bin/mqbroker.numanode2
new file mode 100644
index 0000000000000000000000000000000000000000..4ff227490293ce96a450630545ae9fbd8258931b
--- /dev/null
+++ b/bin/mqbroker.numanode2
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ -z "$ROCKETMQ_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ ROCKETMQ_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ ROCKETMQ_HOME=`cd "$ROCKETMQ_HOME" && pwd`
+
+ cd "$saveddir"
+fi
+
+export ROCKETMQ_HOME
+
+export RMQ_NUMA_NODE=2
+
+sh ${ROCKETMQ_HOME}/bin/mqbroker $@
diff --git a/bin/mqbroker.numanode3 b/bin/mqbroker.numanode3
new file mode 100644
index 0000000000000000000000000000000000000000..6c91d53f1a4dc4a352670327f8f47a08adcc4892
--- /dev/null
+++ b/bin/mqbroker.numanode3
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ -z "$ROCKETMQ_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ ROCKETMQ_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ ROCKETMQ_HOME=`cd "$ROCKETMQ_HOME" && pwd`
+
+ cd "$saveddir"
+fi
+
+export ROCKETMQ_HOME
+
+export RMQ_NUMA_NODE=3
+
+sh ${ROCKETMQ_HOME}/bin/mqbroker $@
diff --git a/bin/mqbroker.xml b/bin/mqbroker.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f0254d35d8a221615c50f26414c0191bb4533fac
--- /dev/null
+++ b/bin/mqbroker.xml
@@ -0,0 +1,43 @@
+
+
+
+ false
+
+ ${JAVA_HOME}
+
+ server
+
+ com.alibaba.rocketmq.broker.BrokerStartup
+
+
+ ${cpd}/../lib
+ ${cpd}/..
+
+
+
+
+
+
+ <-Xms512m>-Xms512m>
+ <-Xmx1g>-Xmx1g>
+ <-XX:NewSize>256M-XX:NewSize>
+ <-XX:MaxNewSize>512M-XX:MaxNewSize>
+ <-XX:PermSize>128M-XX:PermSize>
+ <-XX:MaxPermSize>128M-XX:MaxPermSize>
+
+
diff --git a/bin/mqfiltersrv b/bin/mqfiltersrv
new file mode 100644
index 0000000000000000000000000000000000000000..69fc6354ca795f08b3d557b5a88d5e3fff869d84
--- /dev/null
+++ b/bin/mqfiltersrv
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ -z "$ROCKETMQ_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ ROCKETMQ_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ ROCKETMQ_HOME=`cd "$ROCKETMQ_HOME" && pwd`
+
+ cd "$saveddir"
+fi
+
+export ROCKETMQ_HOME
+
+sh ${ROCKETMQ_HOME}/bin/runserver.sh com.alibaba.rocketmq.filtersrv.FiltersrvStartup $@
diff --git a/bin/mqfiltersrv.exe b/bin/mqfiltersrv.exe
new file mode 100644
index 0000000000000000000000000000000000000000..e8d8fac090b889ffc5f07d426857e824924473f6
Binary files /dev/null and b/bin/mqfiltersrv.exe differ
diff --git a/bin/mqfiltersrv.xml b/bin/mqfiltersrv.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0e391d26de3c4d04b86d39244c9036640a21d237
--- /dev/null
+++ b/bin/mqfiltersrv.xml
@@ -0,0 +1,43 @@
+
+
+
+ false
+
+ ${JAVA_HOME}
+
+ server
+
+ com.alibaba.rocketmq.filtersrv.FiltersrvStartup
+
+
+ ${cpd}/../lib
+ ${cpd}/..
+
+
+
+
+
+
+ <-Xms512m>-Xms512m>
+ <-Xmx1g>-Xmx1g>
+ <-XX:NewSize>256M-XX:NewSize>
+ <-XX:MaxNewSize>512M-XX:MaxNewSize>
+ <-XX:PermSize>128M-XX:PermSize>
+ <-XX:MaxPermSize>128M-XX:MaxPermSize>
+
+
diff --git a/bin/mqnamesrv b/bin/mqnamesrv
new file mode 100644
index 0000000000000000000000000000000000000000..ed7cd1e0aaebeaf22a1be30e121c9412b67b8400
--- /dev/null
+++ b/bin/mqnamesrv
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ -z "$ROCKETMQ_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ ROCKETMQ_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ ROCKETMQ_HOME=`cd "$ROCKETMQ_HOME" && pwd`
+
+ cd "$saveddir"
+fi
+
+export ROCKETMQ_HOME
+
+sh ${ROCKETMQ_HOME}/bin/runserver.sh com.alibaba.rocketmq.namesrv.NamesrvStartup $@
diff --git a/bin/mqnamesrv.exe b/bin/mqnamesrv.exe
new file mode 100644
index 0000000000000000000000000000000000000000..e8d8fac090b889ffc5f07d426857e824924473f6
Binary files /dev/null and b/bin/mqnamesrv.exe differ
diff --git a/bin/mqnamesrv.xml b/bin/mqnamesrv.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9194cbb582089cf6f0ed94a023e07bbf23da4474
--- /dev/null
+++ b/bin/mqnamesrv.xml
@@ -0,0 +1,43 @@
+
+
+
+ false
+
+ ${JAVA_HOME}
+
+ server
+
+ com.alibaba.rocketmq.namesrv.NamesrvStartup
+
+
+ ${cpd}/../lib
+ ${cpd}/..
+
+
+
+
+
+
+ <-Xms512m>-Xms512m>
+ <-Xmx1g>-Xmx1g>
+ <-XX:NewSize>256M-XX:NewSize>
+ <-XX:MaxNewSize>512M-XX:MaxNewSize>
+ <-XX:PermSize>128M-XX:PermSize>
+ <-XX:MaxPermSize>128M-XX:MaxPermSize>
+
+
diff --git a/bin/mqshutdown b/bin/mqshutdown
new file mode 100644
index 0000000000000000000000000000000000000000..19561ac08c3e32a9ea8798a5032443fab669aae6
--- /dev/null
+++ b/bin/mqshutdown
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+case $1 in
+ broker)
+
+ pid=`ps ax | grep -i 'com.alibaba.rocketmq.broker.BrokerStartup' |grep java | grep -v grep | awk '{print $1}'`
+ if [ -z "$pid" ] ; then
+ echo "No mqbroker running."
+ exit -1;
+ fi
+
+ echo "The mqbroker(${pid}) is running..."
+
+ kill ${pid}
+
+ echo "Send shutdown request to mqbroker(${pid}) OK"
+ ;;
+ namesrv)
+
+ pid=`ps ax | grep -i 'com.alibaba.rocketmq.namesrv.NamesrvStartup' |grep java | grep -v grep | awk '{print $1}'`
+ if [ -z "$pid" ] ; then
+ echo "No mqnamesrv running."
+ exit -1;
+ fi
+
+ echo "The mqnamesrv(${pid}) is running..."
+
+ kill ${pid}
+
+ echo "Send shutdown request to mqnamesrv(${pid}) OK"
+ ;;
+ *)
+ echo "Useage: mqshutdown broker | namesrv"
+esac
diff --git a/bin/os.sh b/bin/os.sh
new file mode 100644
index 0000000000000000000000000000000000000000..17911d4e00697ec8716a1d2be826bd031faf7805
--- /dev/null
+++ b/bin/os.sh
@@ -0,0 +1,68 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Execute Only Once
+#
+
+export PATH=$PATH:/sbin
+
+# sudo sysctl -w vm.extra_free_kbytes=2000000
+# sudo sysctl -w vm.min_free_kbytes=1000000
+sudo sysctl -w vm.overcommit_memory=1
+sudo sysctl -w vm.drop_caches=1
+sudo sysctl -w vm.zone_reclaim_mode=0
+sudo sysctl -w vm.max_map_count=655360
+sudo sysctl -w vm.dirty_background_ratio=50
+sudo sysctl -w vm.dirty_ratio=50
+sudo sysctl -w vm.dirty_writeback_centisecs=360000
+sudo sysctl -w vm.page-cluster=3
+sudo sysctl -w vm.swappiness=1
+
+echo 'ulimit -n 655350' >> /etc/profile
+echo '* hard nofile 655350' >> /etc/security/limits.conf
+
+echo '* hard memlock unlimited' >> /etc/security/limits.conf
+echo '* soft memlock unlimited' >> /etc/security/limits.conf
+
+DISK=`df -k | sort -n -r -k 2 | awk -F/ 'NR==1 {gsub(/[0-9].*/,"",$3); print $3}'`
+[ "$DISK" = 'cciss' ] && DISK='cciss!c0d0'
+echo 'deadline' > /sys/block/${DISK}/queue/scheduler
+
+
+echo "---------------------------------------------------------------"
+sysctl vm.extra_free_kbytes
+sysctl vm.min_free_kbytes
+sysctl vm.overcommit_memory
+sysctl vm.drop_caches
+sysctl vm.zone_reclaim_mode
+sysctl vm.max_map_count
+sysctl vm.dirty_background_ratio
+sysctl vm.dirty_ratio
+sysctl vm.dirty_writeback_centisecs
+sysctl vm.page-cluster
+sysctl vm.swappiness
+
+su - admin -c 'ulimit -n'
+cat /sys/block/$DISK/queue/scheduler
+
+if [ -d ${HOME}/tmpfs ] ; then
+ echo "tmpfs exist, do nothing."
+else
+ ln -s /dev/shm tmpfs
+ echo "create tmpfs ok"
+fi
diff --git a/bin/play.sh b/bin/play.sh
new file mode 100644
index 0000000000000000000000000000000000000000..4abb648904cfaea00c90b53a0c9b2bb2604b7712
--- /dev/null
+++ b/bin/play.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Name Server
+#
+nohup sh mqnamesrv > ns.log 2>&1 &
+
+#
+# Service Addr
+#
+ADDR=`hostname -i`:9876
+
+#
+# Broker
+#
+nohup sh mqbroker -n ${ADDR} > bk.log 2>&1 &
+
+echo "Start Name Server and Broker Successfully, ${ADDR}"
diff --git a/bin/runbroker.sh b/bin/runbroker.sh
new file mode 100644
index 0000000000000000000000000000000000000000..08d97ad372d5a5291f42b27ef0c01a54fa5f61f7
--- /dev/null
+++ b/bin/runbroker.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#===========================================================================================
+# Java Environment Setting
+#===========================================================================================
+error_exit ()
+{
+ echo "ERROR: $1 !!"
+ exit 1
+}
+
+[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
+[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
+[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
+
+export JAVA_HOME
+export JAVA="$JAVA_HOME/bin/java"
+export BASE_DIR=$(dirname $0)/..
+export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
+
+#===========================================================================================
+# JVM Configuration
+#===========================================================================================
+JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
+JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8 -XX:+DisableExplicitGC"
+JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
+JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
+JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
+JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
+JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
+JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
+JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib"
+#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
+JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
+
+numactl --interleave=all pwd > /dev/null 2>&1
+if [ $? -eq 0 ]
+then
+ if [ -z "$RMQ_NUMA_NODE" ] ; then
+ numactl --interleave=all $JAVA ${JAVA_OPT} $@
+ else
+ numactl --cpunodebind=$RMQ_NUMA_NODE --membind=$RMQ_NUMA_NODE $JAVA ${JAVA_OPT} $@
+ fi
+else
+ $JAVA ${JAVA_OPT} $@
+fi
diff --git a/bin/runserver.sh b/bin/runserver.sh
new file mode 100644
index 0000000000000000000000000000000000000000..a0d4f0ce14227635c568cc5ce3d944605213c7b8
--- /dev/null
+++ b/bin/runserver.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#===========================================================================================
+# Java Environment Setting
+#===========================================================================================
+error_exit ()
+{
+ echo "ERROR: $1 !!"
+ exit 1
+}
+
+[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
+[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
+[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
+
+export JAVA_HOME
+export JAVA="$JAVA_HOME/bin/java"
+export BASE_DIR=$(dirname $0)/..
+export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
+
+#===========================================================================================
+# JVM Configuration
+#===========================================================================================
+JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m"
+JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:+DisableExplicitGC -XX:-UseParNewGC"
+JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails"
+JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
+JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
+JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib"
+#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
+JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
+
+$JAVA ${JAVA_OPT} $@
diff --git a/bin/setcache.sh b/bin/setcache.sh
new file mode 100644
index 0000000000000000000000000000000000000000..5c72fd1e46a9e683096647310508a38e8e7f8d5e
--- /dev/null
+++ b/bin/setcache.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+export PATH=$PATH:/sbin
+
+#
+# GB
+#
+function changeFreeCache()
+{
+ EXTRA=$1
+ MIN=$2
+ sysctl -w vm.extra_free_kbytes=${EXTRA}000000
+ sysctl -w vm.min_free_kbytes=${MIN}000000
+ sysctl -w vm.swappiness=0
+}
+
+
+if [ $# -ne 2 ]
+then
+ echo "Usage: $0 extra_free_kbytes(GB) min_free_kbytes(GB)"
+ echo "Example: $0 3 1"
+ exit
+fi
+
+changeFreeCache $1 $2
diff --git a/bin/startfsrv.sh b/bin/startfsrv.sh
new file mode 100644
index 0000000000000000000000000000000000000000..21c828c9a5f10e7f9b131eca6ccbbfd295220f91
--- /dev/null
+++ b/bin/startfsrv.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ -z "$ROCKETMQ_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ ROCKETMQ_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ ROCKETMQ_HOME=`cd "$ROCKETMQ_HOME" && pwd`
+
+ cd "$saveddir"
+fi
+
+export ROCKETMQ_HOME
+
+nohup sh ${ROCKETMQ_HOME}/bin/runserver.sh com.alibaba.rocketmq.filtersrv.FiltersrvStartup $@ &
diff --git a/bin/tools.sh b/bin/tools.sh
new file mode 100644
index 0000000000000000000000000000000000000000..63e88845a55378130591b7bb678a34d71ccdc75b
--- /dev/null
+++ b/bin/tools.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#===========================================================================================
+# Java Environment Setting
+#===========================================================================================
+error_exit ()
+{
+ echo "ERROR: $1 !!"
+ exit 1
+}
+
+[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
+[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
+[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
+
+export JAVA_HOME
+export JAVA="$JAVA_HOME/bin/java"
+export BASE_DIR=$(dirname $0)/..
+export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
+
+#===========================================================================================
+# JVM Configuration
+#===========================================================================================
+JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"
+JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext"
+JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
+
+$JAVA ${JAVA_OPT} $@