• docker tomcat jvm 使用 visualVM监控


    1.  建立基础镜像

    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 添加初始堆参数

    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地址。

    3. 加入应用

    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. 运行应用docker

    docker run -d --name 1111 -p 50001:80  -p 18999:18999 192.168.200.10/source/gateway_test_jvm

    5. 使用visualVM监控

    二,

    2. tomcat/conf/catalina.sh 添加初始堆参数

    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地址。

    部署在k8s中,使用nodePort 指定端口,端口与jmxremote.port 相同

    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

  • 相关阅读:
    在 ASP.NET 中实现会话状态的基础
    STL 备忘录
    ASP.NET开发环境的详细配置
    COFF 文件的格式
    mbstowcs and MultiByteToWideChar
    苦心人天不负
    CString GetBuffer() and ReleaseBuffer()
    c语言的函数指针
    如何架设流媒体服务器(2)
    再谈从vc6迁移到vs2005
  • 原文地址:https://www.cnblogs.com/fengjian2016/p/9547790.html
Copyright © 2020-2023  润新知