1. 創建基礎鏡像java
FROM centos MAINTAINER fengjian <fengjian@senyint.com> ENV TZ "Asia/Shanghai" ENV TERM xterm ENV JAVA_HOME /data/jdk ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /data/tomcat ENV CATALINA_BASE /data/tomcat ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin RUN rm /etc/yum.repos.d/* -rf ADD Centos-7.repo /etc/yum.repos.d/ ADD epel.repo /etc/yum.repos.d/ RUN yum clean all RUN yum -y install unzip net-tools bind-utils sysstat kde-l10n-Chinese telnet reinstall glibc-common RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 ENV LC_ALL "zh_CN.UTF-8" ADD localtime /etc/ ADD jdk.tar.gz /data ADD tomcat.tar.gz /data ADD profile /etc ADD 20-nproc.conf /etc/security/limits.d/ ADD limits.conf /etc/security/ RUN mkdir -p /data/webserver RUN mkdir -p /data/logs
2. tomcat/conf/catalina.sh 添加初始堆參數node
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -server -Xms4096M -Xmx4096M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:-UseCounterDecay -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=18999 -Dcom.sun.management.jmxremote.rmi.port=18999 -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=192.168.200.10"
**其中 Djava.rmi.server.hostname= 192.168.200.10 爲宿主機的IP地址。web
3. 加入應用docker
FROM 192.168.200.10/source/tomcat8_jdk1.8_test MAINTAINER fengjian <fengjian@senyint.com.com> ADD webserver.tar.gz /data/webserver/ EXPOSE 80 18999 CMD ["/data/tomcat/bin/catalina.sh","run"]
4. 運行應用dockercentos
docker run -d --name 1111 -p 50001:80 -p 18999:18999 192.168.200.10/source/gateway_test_jvm
5. 使用visualVM監控api
二,tomcat
2. tomcat/conf/catalina.sh 添加初始堆參數app
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -server -Xms4096M -Xmx4096M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:-UseCounterDecay -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=18999 -Dcom.sun.management.jmxremote.rmi.port=18999 -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=192.168.20.174"
**其中 Djava.rmi.server.hostname= 192.168.20.174 爲宿主機的IP地址。less
部署在k8s中,使用nodePort 指定端口,端口與jmxremote.port 相同dom
apiVersion: apps/v1beta2 kind: Deployment metadata: name: gateway namespace: senyint spec: selector: matchLabels: app: gateway replicas: 1 template: metadata: labels: app: gateway spec: nodeName: node1 #指定部署到 node1 上 containers: - name: gateway image: 192.168.200.10/source/gateway_test_jvm resources: limits: cpu: 2 memory: 8192Mi requests: cpu: 100m memory: 512Mi ports: - name: webport containerPort: 80 - name: jvmport containerPort: 31999 --- apiVersion: v1 kind: Service metadata: name: gateway namespace: senyint spec: type: NodePort ports: - name: webport port: 80 targetPort: 80 protocol: TCP - name: jvmport port: 31999 targetPort: 31999 protocol: TCP nodePort: 31999 selector: app: gateway
或者使用標籤
kubectl label nodes node1 jvmmonitor=test
apiVersion: apps/v1beta2 kind: Deployment metadata: name: gateway namespace: senyint spec: selector: matchLabels: app: gateway replicas: 1 template: metadata: labels: app: gateway spec: nodeSelector: jvmmonitor: test containers: - name: gateway image: 192.168.200.10/source/gateway_test_jvm resources: limits: cpu: 2 memory: 8192Mi requests: cpu: 100m memory: 512Mi ports: - name: webport containerPort: 80 - name: jvmport containerPort: 31999 --- apiVersion: v1 kind: Service metadata: name: gateway namespace: senyint spec: type: NodePort ports: - name: webport port: 80 targetPort: 80 protocol: TCP - name: jvmport port: 31999 targetPort: 31999 protocol: TCP nodePort: 31999 selector: app: gateway