一 RocketMQ 下载
可以去官网下载RocketMQ源码版
官网只有.zip版本,没有.tgz或.tar.gz版本。
RocketMQ官网地址 :
http://rocketmq.apache.org/
1. 下载
wget https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.7.0/rocketmq-all-4.7.0-bin-release.zip
2. 解压缩到指定目录 /home 目录下
unzip -o rocketmq-all-4.7.0-bin-release.zip -d /home/
二 RocketMQ安装
1. 启动Name Server服务
cd /home/rocketmq-all-4.7.0-bin-release/
nohup sh bin/mqnamesrv &
启动后会自动在当前用户根目录下创建logs文件夹并生成两个日志文件
[root@fastdfs rocketmqlogs]# pwd
/root/logs/rocketmqlogs
[root@fastdfs rocketmqlogs]# ls
namesrv_default.log namesrv.log
查看日志
[root@fastdfs home]# tail -f ~/logs/rocketmqlogs/namesrv.log
...
2020-04-08 17:47:11 INFO main - The Name Server boot success. serializeType=JSON
...
查看进程
telnet一下
netstat 一下
2.启动 Broker
cd /home/rocketmq-all-4.7.0-bin-release/
nohup bash bin/mqbroker -n 192.168.158.147:9876 &
启动 Broker后,会在 ~/下生成store目录
如果服务器内存太小,启动Broker会失败
可以通过查看 /home/rocketmq-all-4.7.0-bin-release/ 下的 nohup.out 日志文件
[root@fastdfs rocketmq-all-4.7.0-bin-release]# tail -f nohup.out
Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSONJava HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/rocketmq-all-4.7.0-bin-release/hs_err_pid94260.log
通过nohup.out 日志文件我们找到线索,是内存不足,导致启动Broker 失败,具体原因 我们可以去 nohup文件中提到的/home/rocketmq-all-4.7.0-bin-release/hs_err_pid94260.log日志文件中查看
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
# Out of Memory Error (os_linux.cpp:2640), pid=94260, tid=0x00007f73dc1d4700
#
# JRE version: (8.0_161-b12) (build )
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.161-b12 mixed mode linux-amd64 compressed oops)
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
--------------- T H R E A D ---------------
。。。。。。
VM Arguments:
jvm_args: -Xms8g -Xmx8g -Xmn4g -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRef
LRUPolicyMSPerMB=0 -verbose:gc -Xloggc:/dev/shm/rmq_broker_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStop
pedTime -XX:+PrintAdaptiveSizePolicy -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m -XX:-OmitStackTraceInFastThrow -
XX:+AlwaysPreTouch -XX:MaxDirectMemorySize=15g -XX:-UseLargePages -XX:-UseBiasedLocking -Djava.ext.dirs=/usr/local/java/jdk1.8.0_161/jre/lib/e
xt:/home/rocketmq-all-4.7.0-bin-release/bin/../lib
java_command: org.apache.rocketmq.broker.BrokerStartup -n 192.168.158.147:9876
java_class_path (initial): .:/home/rocketmq-all-4.7.0-bin-release/bin/../conf:.:/usr/local/java/jdk1.8.0_161/lib/dt.jar:/usr/local/java/jdk1.8
.0_161/lib/tools.jar:/usr/local/java/jdk1.8.0_161/jre/lib
Launcher Type: SUN_STANDARD
Environment Variables:
JAVA_HOME=/usr/local/java/jdk1.8.0_161
JRE_HOME=/usr/local/java/jdk1.8.0_161/jre
CLASSPATH=.:/home/rocketmq-all-4.7.0-bin-release/bin/../conf:.:/usr/local/java/jdk1.8.0_161/lib/dt.jar:/usr/local/java/jdk1.8.0_161/lib/tools.
jar:/usr/local/java/jdk1.8.0_161/jre/lib
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/java/jdk1.8.0_161/bin:/root/bin
SHELL=/bin/bash
。。。。。。
--------------- S Y S T E M ---------------
OS:CentOS Linux release 7.5.1804 (Core)
uname:Linux 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64
libc:glibc 2.17 NPTL 2.17
rlimit: STACK 8192k, CORE 0k, NPROC 3802, NOFILE 4096, AS infinity
load average:0.01 0.02 0.05
/proc/meminfo:
MemTotal: 997956 kB
MemFree: 61456 kB
MemAvailable: 398092 kB
。。。。。。
三 启动参数jvm调优解读
1. name server jvm
cat bin/mqnamesrv
最后一行代码为
sh ${ROCKETMQ_HOME}/bin/runserver.sh org.apache.rocketmq.namesrv.NamesrvStartup $@
说明 bin/mqnamesrv 调用了 bin/runserver.sh
cat bin/runserver.sh
最后几行代码为
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
可知是在此文件 runserver.sh 中配置的 name server 的jvm参数
2. broker jvm
cat bin/mqbroker
最后一行代码为
sh ${ROCKETMQ_HOME}/bin/runbroker.sh org.apache.rocketmq.broker.BrokerStartup $@
说明 bin/mqbroker 调用了 bin/runbroker.sh
cat bin/runbroker.sh
最后几行代码为
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
可知,是在此文件 runbroker.sh 中配置的 broker 的jvm参数
四 关闭服务
关闭 Broker
[root@fastdfs ~]# cd /home/rocketmq-all-4.7.0-bin-release/
[root@fastdfs rocketmq-all-4.7.0-bin-release]# sh bin/mqshutdown broker
The mqbroker(89975) is running...
Send shutdown request to mqbroker(89975) OK
关闭 Name Server
[root@fastdfs ~]# cd /home/rocketmq-all-4.7.0-bin-release/
[root@fastdfs rocketmq-all-4.7.0-bin-release]# sh bin/mqshutdown namesrv
The mqnamesrv(89974) is running...
Send shutdown request to mqnamesrv(89974) OK
查看 mqshutdown 脚本内容,可知,关闭服务其实也是调用的 kill $pid 命令,如下图