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/tomcatcd /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.comcd /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