syrm-ll opened a new issue, #123:
URL: https://github.com/apache/rocketmq-docker/issues/123

   I tried two versions of `Apache/RocketMQ: 5.3.2` and `Apache/RocketMQ: 
5.3.3` located on Dockerhub, and found that the process with PID 1 started by 
the container is a shell script rather than a JVM 
   This violates the best practice of containers. If the shutdown signal 
forwarding is not manually handled, the JVM should be made a PID1 process to 
ensure that the JVM shutdown hook is executed correctly, rather than forcing a 
shutdown after timeout
   
   ---
   我尝试了位于 dockerhub 的 `apache/rocketmq:5.3.2`  `apache/rocketmq:5.3.3` 两个版本, 
发现容器启动的 PID 为 1 的进程都是 shell 脚本而非 JVM
   
   这违反了容器的最佳实践, 如果没有手动处理关机信号转发, 应该让 JVM 成为PID1进程, 以确保JVM关机挂钩正确执行, 而非超时后强制关闭
   
   参考:  <https://docs.docker.com/build/building/best-practices/#entrypoint>
   
   
   容器内的进程:
   ```log
   rocketmq       1       0  0 23:38 ?        00:00:00 sh mqbroker
   rocketmq       7       1  0 23:38 ?        00:00:00 sh 
/home/rocketmq/rocketmq-5.3.3/bin/runbroker.sh 
-Drmq.logback.configurationFile=/home/rocketmq/rocketmq-5.3.3/conf/rmq.broker.logback.xml
 org.apache.rocketmq.broker.BrokerStartup
   rocketmq      14       7 17 23:38 ?        00:00:12 
/opt/java/openjdk/bin/java -server -Xms2g -Xmx2g -Xmn1g 
-XX:MaxDirectMemorySize=1g -XX:+UseG1GC -XX:G1HeapRegionSize=16m 
-XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRU
   rocketmq     171       0  0 23:39 pts/0    00:00:00 /bin/sh -c [ -e 
/bin/bash ] && (/bin/bash || exit 0) || /bin/sh
   rocketmq     177     171  0 23:39 pts/0    00:00:00 /bin/sh -c [ -e 
/bin/bash ] && (/bin/bash || exit 0) || /bin/sh
   rocketmq     178     177  0 23:39 pts/0    00:00:00 /bin/bash
   
   ```
   
   
   `mqbroker` 启动脚本部分内容:
   sh 开启了子进程
   ```shell
   if [ "$enable_proxy" = true ]; then
     args_for_proxy=$other_args" -pm local"
     if [ "$broker_config" != "" ]; then
         args_for_proxy=${args_for_proxy}" -bc "${broker_config}
     fi
     sh ${ROCKETMQ_HOME}/bin/runbroker.sh 
-Drmq.logback.configurationFile=$ROCKETMQ_HOME/conf/rmq.proxy.logback.xml 
org.apache.rocketmq.proxy.ProxyStartup ${args_for_proxy}
   else
     args_for_broker=$other_args
     if [ "$broker_config" != "" ]; then
         args_for_broker=${args_for_broker}" -c "${broker_config}
     fi
     sh ${ROCKETMQ_HOME}/bin/runbroker.sh 
-Drmq.logback.configurationFile=$ROCKETMQ_HOME/conf/rmq.broker.logback.xml 
org.apache.rocketmq.broker.BrokerStartup ${args_for_broker}
   fi
   
   ```
   
   目前在 docker 环境中部署时, `docker compose down` 卸载或 `docker compose restart` 
重启能明显感觉到迟缓, 因为没有人处理关机信号, docker 在超时后强制结束容器, 所以始终有固定的延迟
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@rocketmq.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to