起因
偶然间注意到实用功能>日志浏览>JVM空闲内存太少了,于是就看了下bolo程序的内存回收情况,发现ygc执行次数太多了,于是就有了改造dockerfile的想法。
编译
下载项目
代码语言:javascript复制git clone https://github.com/adlered/bolo-solo.git
修改dockerfile
将dockerfile 修改为如下内容
代码语言:javascript复制FROM maven:3-jdk-8-alpine as MVN_BUILD
WORKDIR /opt/bolo/
ADD . /tmp
RUN cd /tmp && mvn package -DskipTests -Pci && mv target/bolo/* /opt/bolo/
&& cp -f /tmp/src/main/resources/docker/* /opt/bolo/WEB-INF/classes/
FROM openjdk:8-alpine
LABEL maintainer="Liang Ding<d@b3log.org>"
WORKDIR /opt/bolo/
COPY --from=MVN_BUILD /opt/bolo/ /opt/bolo/
RUN apk add --no-cache ca-certificates tzdata
ENV TZ=Asia/Shanghai
EXPOSE 8080
ENV JAVA_OPTS="-Xms400m -Xmx400m -Xmn320m -Xloggc:/var/log/gc.log"
ENV LISTEN_PORT=8080
ENV SERVER_HOST="localhost"
ENV SERVER_SCHEME="http"
ENV SERVER_PORT=8080
ENV LUTE_HTTP="http://127.0.0.1:8249"
ENTRYPOINT java ${JAVA_OPTS} -cp WEB-INF/lib/*:WEB-INF/classes org.b3log.solo.Starter
--listen_port=${LISTEN_PORT}
--server_scheme=${SERVER_SCHEME}
--server_host=${SERVER_HOST}
--server_port=${SERVER_PORT}
--lute_http=${LUTE_HTTP}
编译
执行下面命令
代码语言:javascript复制docker build -t "zeek/bolo" .
启动
执行下面启动命令
代码语言:javascript复制docker run --detach --name bolo --network=host
--env RUNTIME_DB="MYSQL"
--env JAVA_OPTS="-Xms300m -Xmx300m -Xmn230m -Xloggc:/var/log/gc.log"
--env JDBC_USERNAME="root"
--env JDBC_PASSWORD="123456"
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver"
--env SERVER_HOST="www.zeekling.cn"
--env SERVER_PORT="443"
--env SERVER_SCHEME="https"
--env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC"
-v /dockerData/bolo/bolo-fantastic:/opt/bolo/skins/bolo-fantastic
-v /dockerData/bolo/bolo-NeoEase:/opt/bolo/skins//bolo-NeoEase-mod
zeek/bolo
--lute_http=http://127.0.0.1:8249
结束
至此,添加jvm控制参数就结束了。空闲内存明显也多了很多,如下图:
gc也少了很多(内存还可以根据实际情况调整)。