74、75、76——tomcat项目实战

tomcat项目实战

tomcat 依赖 java运行环境,必须要有jre , 选择 jdk1.8 JvmPertest
千万不能用 kyj易捷支付 项目机器

  • 选择 一台机器 ,安装jdk1.8的机器
  • 下载tomcat的包 上传到机器,解压tomcat

tomcat文件

bin文件夹:

  • 启动文件

  • 堆栈配置文件 catalina.sh

    • JAVA_OPTS="-Xms256m -Xmx256m -Xmn128m"
    • JAVA_OPTS="-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -Xloggc:gc.log"
JAVA_OPTS="-Xms256m -Xmx256m -Xmn128m"
JAVA_OPTS="-javaagent:./jmx_prometheus_javaagent-0.18.0.jar=3088:./tomcat.yml"
JAVA_OPTS="-Xms256m -Xmx256m -Xmn128m -javaagent:./jmx_prometheus_javaagent-0.18.0.jar=3088:./tomcat.yml -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -Xloggc:gc.log"

在这里插入图片描述


conf文件夹

  • server.xml文件
    • tomcat的协议的服务端口 在这里配置; 如果一台电脑上,要启动多个tomcat,那么,就需要修改 这个文件中端口
    • tomcat线程池的配置

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->

    <!--
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- A "Connector" using the shared thread pool-->

    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
               

在这里插入图片描述


tomcat性能调优:

  • 如果,性能测试,发现tomcat有 内存不足的问题时候,或者,tomcat响应时间 偏慢,我们可以去 调整 catalina.sh文件中 JAVA_OPTS 的堆栈配置参数
  • 如果,性能测试过程中,出现了 tomcat的连接数不够,或者 tomcat的并发用户数上不去。就要去改 server.xml文件中 连接池的配置参数。 ------连接池的大小, 不是想多大,就多大, 越大,消耗
  • 的资源也会越多。要根据你的资源情况,来合理设置。
    • 现在很多项目 springboot开发,这个框架,自带了tomcat, 也有连接池的配置参数,只是这个参数,开发写在代码中,打在jar包中。 ----如果,你性能测试,发现,需要调整,只能找开发人员去修改他代码

webapps文件夹

  • 存放部署的项目包
  • 部署的项目包 war格式 (不是jar包) 会自动解压
  • 服务的访问路径 就要 带上 项目包名称

项目包 JvmPertest.war
访问地址: http://ip:8080/JvmPertest/pertest1


tomcat的监控

grafana+prometheus+jvm_exporter

  • jvm_exporter 放到tomcat的机器上
  • https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/ 去里面下载自己要jar包
  • 把jmx_prometheus_javaagent-0.16.1.jar包 上传到 tomcat的bin文件夹
  • tomcat.yml文件 上传到 tomcat的bin文件夹
    在这里插入图片描述

修改 catalina.sh文件
添加 JAVA_OPTS=“-javaagent:./jmx_prometheus_javaagent-0.18.0.jar=3088:./tomcat.yml”
在这里插入图片描述


  • cd /opt/apache-tomcat-8.5.59/bin
  • 启动项目:./startup.sh
    在这里插入图片描述

启动日志收集:cd /opt/apache-tomcat-8.5.59/logs
输入:tail -f catalina.out
在这里插入图片描述


配置prometheus

grafana的启动: systemctl restart grafana-server 端口: 3000
启动prometheus: ./prometheus
后台进程运行 nohup ./prometheus &

  • 在grafana的web界面中,配置展示
    • http://grafana_ip:3000 admin admin
    • 添加数据源
      在这里插入图片描述

把 gc配置 、堆栈配置 注释了

项目是有 oom问题

怎么知道有 OOM问题: 1、从请求日志, 2、或者 从服务日志中看 3、 或者通过监控


堆栈配置参数

-server 第一个参数,指定为服务,多核时用
-Xms 启动时,初始堆大小;没有配置时,从最小逐步增加到最大值
-Xmx 运行时分配的最大堆大小;默认64M
-Xmn 新生代堆大小
-Xss 每个线程栈大小
-XX:PermSize 初始化非堆内存大小
-XX:MaxPermSize 永久代(非堆)最大内存大小
-XX:MaxNewSize 新生代最大大小


gc的配置

-XX:+PrintGC 打印gc
-XX:+PrintGCDetails 打印gc的详细信息
-XX:+PrintGCTimeStamps 打印gc消耗时间
-XX:+PrintGCApplicationStoppedTime 打印出 gc操作时程序出现卡顿的时间
-Xloggc:gc.log 输出gc日志文件的路径, 直接写了gc.log 意思是,gc日志文件,就在当前路径下。


tomcat的连接池参数

  • connectionTimeout 连接超时时间,单位毫秒
  • name:线程池的标记
  • namePrefix: 线程名字前缀
  • maxThreads: 线程池中最大活跃线程数,默认200
  • minSpareThreads:线程池中保持的最小线程数,也是线程每次增加的最小数量,默认25
  • acceptCount 最大可接受的排队数量
  • maxSpareThreads:这个参数标识,一旦创建的线程数量超过这个值,Tomcat 就会关闭不活 动的线程
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好!关于在 Kubernetes 集群上部署 Tomcat 项目的实战,我可以给你一些建议。 首先,确保你已经安装了 Kubernetes 集群,并且可以使用 kubectl 命令与集群进行交互。 接下来,创建一个 Tomcat 的 Deployment。可以通过编写一个 YAML 文件来定义 Deployment,示例如下: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: tomcat-deployment spec: replicas: 3 # 你可以根据需求调整副本数量 selector: matchLabels: app: tomcat template: metadata: labels: app: tomcat spec: containers: - name: tomcat image: tomcat:latest # 根据你的需求选择合适的 Tomcat 镜像 ports: - containerPort: 8080 # Tomcat 默认监听的端口是 8080 ``` 保存以上内容为一个文件(例如 `tomcat-deployment.yaml`),然后使用 kubectl 命令将其部署到集群中: ``` kubectl apply -f tomcat-deployment.yaml ``` 这样,Kubernetes 将会创建一个包含 3 个副本的 Tomcat Deployment。 接下来,你可以创建一个 Service 来将流量引入到 Tomcat Pod 中。创建一个 YAML 文件,示例如下: ```yaml apiVersion: v1 kind: Service metadata: name: tomcat-service spec: selector: app: tomcat ports: - protocol: TCP port: 80 # 定义 Service 的端口 targetPort: 8080 # 将流量转发到 Tomcat Pod 的 8080 端口 type: LoadBalancer # 如果你在云平台上部署,可以选择 LoadBalancer 类型,否则可以选择 NodePort 类型 ``` 保存以上内容为一个文件(例如 `tomcat-service.yaml`),然后使用 kubectl 命令将其部署到集群中: ``` kubectl apply -f tomcat-service.yaml ``` 这样,Kubernetes 将会创建一个 Service,并将外部流量引导到 Tomcat Pod 的 8080 端口。 现在,你应该可以通过访问 Service 的 IP 地址来访问 Tomcat 项目了。你可以使用 `kubectl get services` 命令来查看 Service 的 IP 地址。 希望这些信息对你有所帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值