当前位置: 首页 > article >正文

tomcat(Web应用服务器)

tomcat

  • 一.介绍
    • web应用程序
    • tomcat的核心组件
    • 功能组件
  • 二. tomcat安装与使用
    • 1. 安装Java依赖环境和tomcat
    • 2. 网页界面配置
    • 3. 主配置
  • 三. tomcat的优化
    • 1. tomcat的配置优化
    • 2. 操作系统的内核优化
      • 相对重要的
    • 3、jvm调优
      • tomcat页面介绍
        • "ajp-nio-8009"
  • 四. tomcat动静分离

一.介绍

web应用程序

php:index.php
tomcat:index.jsp ------------>java编译的代码

三个功能组合而成

  • java servlet:tomcat是一个servlet容器,负责管理和执行iava-servlet,服务端的java程序。处理客户端的http的请求和响应。(服务端的配置)
  • pages:动态页面的技术----->Java代码完成的
  • tomcat既可以作为已iava代码为基础的动态页面,也可以处理和转发动态请求。(并发能力很差,适合小项目。)

tomcat的核心组件

  • web容器:处理web的请求,影响,动态页面的展示

  • jsp容器:解析index.jsp中的java代码转换为servlet的代码,然后servlet编译执行
    jsp是一种技术模版,类似于html语言,允许在html文件当中,嵌入java的代码

  • servlet容器:接受web容器的请求,负责加载,初始化,执行和管理

功能组件

/user/local/tomcat/

connector:接受外部的请求已经响应请求
container:包含了engine host context webapp 四个组件组成
service:包含了connector和container
engine:引擎,用来管理多个虚拟主机,一个service只能有一个engine
host:代表一个虚拟主机,也可以理解为站点
context:对应的web应用
webapp:最中的封装器,容器的最底层 index.jsp
bin:启动和关闭的脚本文件
conf:tomcat的配置文件
logs:tomcat的日志文件
webapps:保存不同项目的应用目录
work:工作目录
temp:临时文件保存目录
tomcat/conf/server.xml #主配置文件

二. tomcat安装与使用

1. 安装Java依赖环境和tomcat

apt -y install openjdk-8-jdk-headless
java -version  #查看版本

tar -xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat

cd /usr/local/tomcat/bin
./startup.sh
netstat -antp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      4038/java

2. 网页界面配置

cd /usr/local/tomcat/webapps
mkdir test1 test2
cd test1
vim index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>

#test2同理
Host name:主机名 www.test1.com
appBase="webapps":web应用程序目录
unpackWARs="true":是搭对.war格式结尾文件进行展开
autoDeploy="true":tomcat在运行时会自动部署webapps里面对应的配置
xmlValidation="false":是否验证xml文件的有效性
xmlNamespaceAware="false":是否启动xml的命名空间
Context docBase="/usr/local/tomcat/webapps/test1":路径

3. 主配置

vim /usr/local/tomcat/conf/server.xml
164层添加

<Host name="www.test1.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/test1" path="" reloadable="true" /></Host>

<Host name="www.test2.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        <Context docBase="/usr/local/tomcat/webapps/test2" path="" reloadable="true" /></Host>

vim /etc/hosts
#添加
192.168.246.6 www.test1.com
192.168.246.6 www.test2.com

cd /usr/local/tomcat/bin
./shutdown.sh
./startup.sh
root@u3:/usr/local/tomcat/bin# netstat -antp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      6162/java           
tcp6       0      0 ::1:60732               ::1:8080                TIME_WAIT   -

在这里插入图片描述
在这里插入图片描述

三. tomcat的优化

默认的安装情况下,tomcat经常会假死的情况
tomcat需要进行优化

1. tomcat的配置优化

vim /usr/local/tomcat/conf/server.xml
69行修改添加
   
<Connector port="8080" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443"
		      maxThreads="500"
		      minSpareThreads="50"
			  />
  • maxThreads=“500”:tomcat可以创建最大的线程数
  • minSpareThreads=“50”:空闲线程的最小数量,用来处理溢出部分的请求
  • enableLookups=“false”:禁用反向解析,提高访问速度
  • disableUploadTimeout=“true”:开启上传的超时时间,连接在上传期间不存在超时的情况
  • acceptCount=“300” :当所线程都在忙碌的时候,可以排队等待处理的请求数量
  • processorCache=“500”:连接器可以缓存的最大处理的数量。
  • URIEncoding=“UTF-8”:设置字符集编码
  • compression=“on”:开启对响应内容的压缩功能
  • compressionMinSize=“2048”:如果大小超过2M,才会进行压缩
  • compressableMimeType=“text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png”/>:支持被压缩的文件类型

2. 操作系统的内核优化

vim /usr/local/tomcat/bin/etc/sysctl.conf

注意:设置保存后,需要重新ssh连接才会看到配置更改的变化 vim /etc/security/limits.conf
#65535 为Linux系统最大打开文件数

  • soft nproc 65535

  • hard nproc 65535

  • soft nofile 65535

  • hard nofile 65535

  • soft nproc 65535: 最大进程数软限制为 65535,即可以使用 ulimit -u 命令查看和修改的值。

  • hard nproc 65535: 最大进程数硬限制为 65535,即最大可分配的进程数。

  • soft nofile 65535:最大打开文件数软限制为 65535,即可以使用 ulimit -n 命令查看和修改的值。

  • hard nofile 65535:最大打开文件数硬限制为 65535,即最大可分配的文件数。
    这里使用的通配符 * 表示对所有用户生效。

其他调试内核参数的查看: sysctl -a

kernel.sysrq = 0: 禁用了内核的SysRq功能,SysRq允许在系统崩溃或出现问题时执行一些调试操作。

kernel.core_uses_pid = 1: 设置核心转储文件名中包含进程ID,有助于标识是哪个进程导致了核心转储。

kernel.msgmnb 和 kernel.msgmax: 增加IPC消息队列的默认和最大大小,用于进程间通信。

kernel.shmmax 和 kernel.shmall: 调整共享内存的最大大小和分配页面数。

net.ipv4.ip_forward = 0: 禁用IP数据包的转发功能,通常用于不充当路由器的系统。

net.ipv4.conf.default.rp_filter 和 net.ipv4.conf.all.rp_filter:
控制反向路径过滤,提高网络安全性。

net.ipv4.icmp_echo_ignore_all: 允许或禁止系统响应ping请求。

net.ipv4.icmp_echo_ignore_broadcasts: 禁止系统对广播和多播地址的ICMP回显和时间戳请求作出响应。

net.ipv4.conf.default.accept_source_route: 不接受源路由,增加网络安全性。

net.ipv4.tcp_syncookies = 1: 启用SYN Cookies,保护系统免受TCP SYN 攻击。

net.ipv4.tcp_max_tw_buckets = 6000: 设置允许的TIME_WAIT套接字最大数量,避免服务器性能下降。

net.ipv4.tcp_sack = 1: 启用有选择的应答(SACK)来提高TCP性能。

net.ipv4.tcp_window_scaling = 1: 启用TCP窗口缩放功能,允许大窗口的TCP传输。

net.ipv4.tcp_rmem, net.ipv4.tcp_wmem: 调整TCP套接字读取和写入缓冲区大小。

net.ipv4.tcp_mem: 设置TCP缓冲区的最小、默认和最大值。

net.core.wmem_default, net.core.rmem_default, net.core.rmem_max,
net.core.wmem_max: 调整网络核心 缓冲区的大小。 net.core.netdev_max_backlog:
控制网络接口接收数据包的排队队列大小。

net.ipv4.tcp_max_orphans: 设置系统允许的孤立TCP连接最大数量。

net.ipv4.tcp_max_syn_backlog: 控制系统允许的三次握手队列长度。

net.ipv4.tcp_synack_retries 和 net.ipv4.tcp_syn_retries:
设置SYN-ACK和SYN请求的重试次数。

net.ipv4.tcp_tw_recycle 和 net.ipv4.tcp_tw_reuse:
启用TIME_WAIT套接字快速回收和重用。

net.ipv4.tcp_fin_timeout: 设置TCP连接FIN(关闭连接)的超时时间。

net.ipv4.tcp_keepalive_time: 设置TCP keepalive探测包发送频率,以检测连接状态。

net.ipv4.ip_local_port_range: 设置本地端口范围,用于分配本地应用程序端口。

net.ipv6.conf.all.disable_ipv6 和 net.ipv6.conf.default.disable_ipv6:
禁用IPv6。

net.netfilter.nf_conntrack_max 和其他 net.netfilter.nf_conntrack_*:
控制连接跟踪和防火墙相关设置。

net.nf_conntrack_max: 设置最大连接跟踪项数。

vm.overcommit_memory = 0: 控制内存超额分配策略,避免OOM killer杀掉进程。

vm.swappiness = 0: 设置内存交换行为,降低内存交换。

fs.file-max = 999999: 设置进程可以同时打开的最大文件句柄数。

net.ipv4.tcp_max_tw_buckets = 6000: 设置操作系统允许的TIME_WAIT套接字最大数量。

net.ipv4.ip_local_port_range = 1024 65000: 设置系统允许的本地端口范围。

net.ipv4.tcp_tw_recycle = 1: 启用TIME_WAIT套接字快速回收。

net.ipv4.tcp_tw_reuse = 1: 允许TIME-WAIT套接字重用。

net.ipv4.tcp_syncookies = 1: 启用SYN Cookies,防止TCP SYN 攻击。

net.core.somaxconn = 40960: 设置最大监听队列长度,用于控制最大并发连接数。

net.core.netdev_max_backlog = 262144: 设置每个网络接口接收数据包队列的最大大小。

net.ipv4.tcp_max_syn_backlog = 262144: 设置接受SYN请求队列的最大长度。

net.ipv4.tcp_rmem, net.ipv4.tcp_wmem: 设置TCP套接字读取和写入缓冲区的最小、默认和最大大小。

net.core.rmem_default, net.core.wmem_default, net.core.rmem_max,
net.core.wmem_max: 设置内核套接字接收和 发送缓冲区大小。

相对重要的

net.ipv4.ip_forward=0 #开启服务数据的路由功能
net.ipv4.tcp_syncookies = 1 #启动SYN cookies功能,避免tcp SYN的攻击
net.ipv4.tcp_max_tw_buckets = 6000 #系统中允许出现的最大的time_wait的数量
net.ipv4.tcp_tw_recycle 和 net.ipv4.tcp_tw_reuse: 启用TIME_WAIT套接字快速回收和重用。
vm.overcommit_memory = 0: 控制内存超额分配策略,避免OOM killer杀掉进程。
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_window_scaling = 1: 启用TCP窗口缩放功能,允许大窗口的TCP传输。
net.ipv4.conf.default.accept_source_route: 不接受源路由,增加网络安全性。
kernel.sysrq = 0: 禁用了内核的SysRq功能,SysRq允许在系统崩溃或出现问题时执行一些调试操作。
kernel.core_uses_pid = 1: 设置核心转储文件名中包含进程ID,有助于标识是哪个进程导致了核心转储。
kernel.msgmnb 和 kernel.msgmax: 增加IPC消息队列的默认和最大大小,用于进程间通信。
kernel.shmmax 和 kernel.shmall: 调整共享内存的最大大小和分配页面数。

3、jvm调优

vim /usr/local/tomcat/bin/catalina.sh
119行添加

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -Djava.awt.headless=true -XX:+DisableExplicitGC"
$AVA_OPTS -server jvm服务端的优化
-Xms2048m
Xmx:jvm分配的最大内存
2核4G:
设置成的内存的
官方建议,初始大小和最大值设置成一样的值。
一般是物理内存大小的一般。

-Xmn768m:设置新生代的内存大小,建议设置成整个堆内存大小的3/8

-XX:ParallelGCThreads=2:设置资源回收器的线程数量是2.

-XX:MetaspaceSize=128m:元空间的初始大小

-XX:MaxMetaspaceSize=512m:元空间的最大值
元:都是保存数据的核心信息。

-Djava.awt.headless=true:启用无图形界面的模式,防止在linux系统下,web页面无法正常显示图片
-XX:+DisableExplicitGC:垃圾回收机制的信息在后台显示。

tomcat页面介绍

在这里插入图片描述

“ajp-nio-8009”
  • AJP:AJP是已种协议。AJP协议(内部通讯)
    tomcat服务端和前端的服务器进行连接的协议,提供负载均衡和高效请求的转发。
    tomcat nginx
  • NIO:NIO技术
    异步非阻塞通信
  • 和前端服务器通信的端口是 8009

四. tomcat动静分离

客户端:浏览器
192.168.246.6/(访问静态)
192.168.246.6/index.php(访问动态)
nginx1:调度器192.168.246.6
nginx2静态页面192.168.246.9
nginx3 静态页面192.168.246.10
tomcat1:后端服务器1 动态192.168.246.7
tomcat2:后端服务器2 动态192.168.246.8
Nginx+Tomcat负载均衡、动静分离配制如图的三层,显示代理服务器与nginx静态服务器与tomcat动态服务器的配置
在这里插入图片描述

stream {
    upstream tomcat {
        server 192.168.246.9:80;
        server 192.168.246.10:8080;
        }
    server {
        listen 80;
        proxy_pass test;
   }
#源server的端口改为81

nginx2静态页面

upstream tomcat {
        server 192.168.246.7:8080;
        server 192.168.246.8:8080;
    }

#server中添加
 location ~* \.jsp {
            proxy_pass http://tomcat;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header HOST $host;

        }

nginx3静态页面一样
tomcat1:后端服务器1与tomcat2:后端服务器2正常安装tomcat动态页面即可

root@u10:~# curl 192.168.246.6
静态网页192.168.246.10
root@u10:~# curl 192.168.246.6
静态网页192.168.246.9
root@u10:~# curl 192.168.246.6/index.jsp
动态网页1;http://www.test1.com
root@u10:~# curl 192.168.246.6/index.jsp
动态网页2;http://www.test2.com

http://www.kler.cn/a/444265.html

相关文章:

  • 大数据机器学习算法和计算机视觉应用07:机器学习
  • linux-----常用指令
  • LeetCode 热题 100_K 个一组翻转链表(31_25_困难_C++)(四指针法)
  • Pytorch | 从零构建ResNet对CIFAR10进行分类
  • 中间件 redis安装
  • OpenCV 学习记录:首篇
  • 线性代数基础与应用:基底 (Basis) 与现金流及单期贷款模型(中英双语)
  • ACL-2024 | MapGPT:基于地图引导提示和自适应路径规划机制的视觉语言导航
  • 如何实现单例模式?
  • webpack处理图片资源
  • 【JavaEE进阶】关于Maven
  • macos控制台安装
  • C++ OpenGL学习笔记(1、Hello World空窗口程序)
  • 计算机网络-GRE Over IPSec实验
  • 递归读取指定目录下的文件
  • postman免登录步骤
  • AIGC:图像风格迁移技术实现猜想
  • 【多模态】MiniCPM-V多模态大模型使用学习
  • RTR Chaptor12
  • C语言基础:数组(字符数组)
  • url提取
  • HarmonyOS Next应用开发实战:ArkWeb组件使用介绍及使用举例
  • 【原创教程】西门子1500TCP_UDP通信说明大全(下篇)
  • 【多模态实战】在本地计算机上使用小型视觉语言模型【VLM】进行目标计数【附源码】
  • Liblib上面下载的各种模型,如果使用comfy,如何确定其存放的位置?
  • 解析在OceanBase创建分区的常见问题|OceanBase 用户问题精粹