一 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 命令,如下圖