背景介紹
我們使用docker容器部署了ignite集羣,在使用過程中發現佔用內存很高,50萬條數據佔用了8個G內存,於是就想看一下容器內部應用的堆棧信息,分析一下。一開始我在容器創建腳本中加入了以下配置,結果端口無法訪問。經過再三查閱資料,需要以下配置纔可以:
修改 ignite.sh 腳本
if [ -n "$JMX_PORT" ]; then
JMX_MON="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Dcom.sun.management.jmxremote.rmi.port=${JMX_PORT} \
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
fi
將修改後的 ignite.sh 替換容器中的腳本
完整的容器創建腳本如下:
docker run -it -d --name ignite-test --net=host \
-v /data/ignite/config:/opt/ignite/apache-ignite/config \
-v /data/ignite/config/ignite.sh:/opt/ignite/apache-ignite/bin/ignite.sh \
-v /data/ignite:/data/ignite \
-p 10800:10800 \
-p 9090:9090 \
-e "CONFIG_URI=/opt/ignite/apache-ignite/config/default-config.xml" \
-e "JMX_PORT=9090" \
-e "IGNITE_JMX_PORT=9090" \
-e "JAVA_OPTS= \
-server -Xms512m -Xmx512m -XX:+AlwaysPreTouch -XX:+UseG1GC -XX:+ScavengeBeforeFullGC -XX:MaxDirectMemorySize=1024m -XX:+DisableExplicitGC \
-DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true \
-Djava.net.preferIPv4Stack=true" \
apacheignite/ignite:2.7.5
因爲使用了 --net=host 網絡模式,其實 -p 10800:10800 和 -p 9090:9090 可以省略
參考資料:http://apache-ignite-users.70518.x6.nabble.com/JMX-port-for-Ignite-in-docker-td27491.html#a