tomcat

tomcat

tomcat和php一样,都是用来处理动态页面的

tomcat也可以作为web应用服务器,开源的

php .php

tomcat .jsp

nginx .html

tomcat是用java代码写的程序,运行的是java的web应用程序.

tomcat的特点和功能:

1.servlet容易:执行java的servlet,服务端的java程序,处理客户端的http请求,以及响应.

2.jsp容器,javaserver page,动态页面页面,可以在html的页面里面嵌入java代码

3.自身也是一个http服务器

4.tomcat是一个轻量级的动态页面处理程序,高并发场景不适用

优化,tomcat自身的优化,以及系统内核优化,jvm优化

servlet

是java语言中用来开发web应用程序的关键组件

处理http请求,生成动态内容,以及响应客户端的请求.

作用:处理http请求,生成动态内容,处理java的业务逻辑,转发nginx的动态请求到数据库

jsp JavaScript,web应用程序的界面,这个界面的语言是用java实现的 index.jsp

tomcat的组件

connector 负责对外接收和响应请求,它是tomcat于客户端沟通的枢纽,监听端口接收外界请求,端口默认8080

接收到了请求之后,传递给其他组件进行处理,处理完成了之后回到connector,再响应客户端.

container 负责处理业务逻辑,engine,host,context,wrapper四个功能组成

engine: 用来管理多个虚拟主机,一个service只要有engine

host: 一个host就是一个主机,也可以叫站点,通过配置这个host,可以添加多个站点.

context: 一个context就是一个web应用

wrapper: 封装器,负责处理最底层的逻辑

service:对外提供外部服务,包含connector和container

tomcat可以有多个service,每个service之间互相是独立的

安装tomcat

tomcat目录的作用:

.bin存放启动和关闭tomcat脚本的文件,startup.sh shutdow.sh

.conf存放tomcat的主配置文件,server.xml主配置文件

context.xml host的默认配置信息

tomcat-user.xml 登录时认证用户和密码的相关信息,manager文件必须要赋权修改之后才能打开

lib tomcat运行时需要的jar包,一般不动

logs 日志文件,catalina.out主日志文件

temp 存放tomcat运行时产生的文件

webapps 部署web应用的目录,类似于nginx的html

复制代码
systemctl stop firewalld
setenforce 0
cd /opt
rz -E	#把jdk包和tomcat包扔进来
rpm -ivh jdk-8u201-linux-x64.rpm 	#安装jdk
java -version	#检查一下环境
vim /etc/profile.d/java.sh	#设置环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
:wq
source /etc/profile.d/java.sh #让它生效
java -version	#看一下
tar -xf apache-tomcat-9.0.16.tar.gz #解压tomcat包
mv apache-tomcat-9.0.16 tomcat	#原地改名
mv tomcat/ /usr/local/	#移位
cd /usr/local/			#过去看
ls
cd tomcat/				#去tomcat目录
cd bin/					#去tomcat目录下的bin/目录
./startup.sh 			#启动tomcat
netstat -antp|grep 8080	#查看端口是否启动
#然后去浏览器192.168.118.10:8080,查看页面
cd webapps/	#进入web目录
cd manager/	#进入管理器
cd META-INF/ #进入元信息目录
vim context.xml	#编辑站点信息
<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow=".*" />#把allow后面的值改成.*
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
:wq
cd /usr/local/tomcat/conf/	#回到tomcat下的conf目录
vim tomcat-users.xml	#编辑用户文件
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">	#在这下面添加
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
:wq
cd ..
cd bin/	#回到tomcat下的bin/
./shutdown.sh #先停止
./startup.sh  #再启动
netstat -antp|grep 8080	#查看两个8080端口是否都起来了,如果没有,再停止,再启动几次
#浏览器查看mangerApp,用户名tomcat,密码tomcat

tomcat优化

tomcat启动优化(心里优化)

tomcat的并处理能力不强,大项目不适应tomcat作为转发动态的中间件(k8s集群,python,rubby),小项目会使用(内部使用的)

如何优化tomcat的启动速度

vim /usr/java/jdk/jre/lin/security/java.security

117 securerandom.source=file:/dev/urandom

非阻塞的版本,不依赖系统的终端,进程也不会进入等待状态,所以处理速度相对较快

如果对应用的安全性要求比较高,/dev/random

tomcat自身优化

默认配置不适合生产环境,可能频繁出现假死,需要不停的重启.

根据生产环境的实际情况,自行测试.

vim usr/local/tomcat/conf/server.xml

port 8080 http 80端口

8443 https 443端口,接收客户端https的请求

maxThreads tomcat使用线程来处理接收请求的个数,tomcat最多可以创建多少个线程,默认是200个,一般设置成1000个

minSpareThreads 最小空闲数进程,tomcat开启之后,没人使用也会有进程待命,默认值就是10个,

maxSpareThreads 最大空闲数线程数,一旦线程数超过了这个值,tomcat就会关闭不再需要的线程,默认就是-1,不限制.一般不设置

connectionTimeout 网络连接超时时间,单位是毫秒,20000毫秒是20秒,设置成0是永不超时

enableLookups 是否支持反向解析,值是true,false,提高处理速度

disableUplaodTimeout 上传数据时,是否使用超时机制,默认是10秒,值是true是禁用的意思和false是开启的意思

connectionUploadTimeout 设置上传的超时时间,一般比机制慢个10秒

acceptCount 当所有可以使用的处理请求的线程数都被使用的时候,可以接入请求的最大队列长度.如果超过了这个数字的请求,将被不予处理,默认是100个(缺省值)

compression 对是否对响应数据进行压缩,on是开启,off是关闭,开启压缩之后,可以有效的减少负面的大小(文本无效,图片有点用),一般可以减少三分之一,节省宽带,默认是off

​ compressionMinSize 表示的是,响应压缩的最小值,只有响应报文大于这个值才会进行压缩.如果开启了压缩,默认值是2048,

​ noCompressionUserAgents="浏览器名称",对于这些浏览器,不启用压缩

​ compressableMimeType="压缩类型",对于指定哪些类型的文件进行压缩

​ 常用的页面压缩类型

​ 文本类型 text/plain,text/html,text/css,text/javascript

​ 图像类型 image/jpg,image/jpeg,image/gif

​ 音频类型 audio/ogg, audio/wav, audio/mpeg

​ 视频类型 video/mp4 video/webm video/rmvb video/quicktime

​ 应用程序 application/pdf application/json application/xml

​ 多个类型之间用,号隔开

复制代码
<Connector port="8080" protocol="HTTP/1.1"
 70                connectionTimeout="20000"
 71                redirectPort="8443" 
 		#新增	      maxThreads="500"
 		            minSpareThreads="20"
 					enableLookups="false"
 					disableUploadTimeout="false"
 					connectionUploadTimeout="20"
 				   />
cd /usr/local/tomcat/bin
./shutdown.sh && ./startup.sh

tomcat内核优化

如何在内核当中进行系统安全的优化

内核优化的配置文件

1.vim /etc/security/limits.conf 打开文件数的限制,系统初始化的第一步要做的事情

复制代码
  * soft nproc 65535

  * hard nproc 65535

  * soft nofile 65535

  * hard nofile 65535

2.vim etc/sysctl.conf/ 内核参数文件

sysctl -a 查看内核参数

sysctl -p 内核生效

复制代码
net.ipv4.ip_forward=0/1	
#禁用或者开启数据包的转发功能,要做路由器必须打开,0是关,1是开

net.ipv4.ip_local_port_range=1024 65000
#设定系统的端口范围

net.ipv4.tcp_max_tw_buckets=2000
#允许timewait的最大数量,如果太多了,会造成性能下降

net.ipv4.tcp_max_orphans
#系统允许的最大的tcp连接数量

net.ipv4.tcp_fin_timeout=10
#设置tcp关闭连接的超时时间

net.ipv4.tcp_keepalive_time
#设置tcp的keepalive包的探测包的发送频率,用于检测连接状态

net.ipv4.tcp_sack=1 
#启用有选择的应答,提高tcp的处理性能

net.core.netdev_max_backlog=262144
#网络接口接收数据包队列的最大的大小

vm.swappiness=0
#关闭内存的交换行为,不使用交换分区,k8s默认就不能使用交换分区,否则就会报错

tomcat jvm优化

java -jar 123.jar &

cd /usr/local/tomcat/bin

vim kdln

复制代码
#119	JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC" 
cygwin=false
-Xms2048m

java初始化堆的大小,分配jvm的最小内存,cpu的性能比较高,可以分配的高一点

-Xmx2048m

java堆的最大值,也就是jvm的最大内存,这个取决于,物理硬件内存的大小,官方建议设置成与xms一样的值,物理内存的一半

-Xmn768m

新生代内存的大小,官方推荐,设置成jvm内存的最大值的八分之三,

java自带垃圾回收机制:回收垃圾之后,不需要重新计算堆区的大小.

堆区:新生代中生代老年代,每生成一个新的对象,对象占用的内存空间,就是所谓的新生代空间.那么垃圾回收之后对堆区当中的资源进行回收之后,新生代没有被回收的资源就转移到了中生代,原本的中生代转移到老年代

整个jvm堆的大小:新生代+老生代+永久代(系统自带)

-XX:ParallelGCThreads=2

#配置并行收集器的线程数,同时有多个线程一起进行垃圾回收,一般配置成cpu的一半

-XX:PermSize=1024m

#设置非堆内存的初始值,持久代内存的大小,默认是物理内存的1/4,建议设置成整个jvm内存的一半

#非堆内存是不会被java垃圾回收机制处理的

-XX:MaxPermSize=1024m

#非堆内存的最大值,和初始值一致即可

-Djava.awt.headless=true

#防止在linux访问的情况下,web页面的图片不能打开

-XX:+DisableExplicitGC

#老年代的收集算法,缩短垃圾回收机制的收集时间

内存.池 Type Initial Total 最大.值 Used
PS Eden Space Heap memory 15.00 MB 60.00 MB 309.50 MB 42.56 MB (13%)
PS Old Gen Heap memory 40.00 MB 40.00 MB 629.50 MB 16.73 MB (2%)
PS Survivor Space Heap memory 2.50 MB 2.50 MB 2.50 MB 2.48 MB (99%)
Code Cache Non-heap memory 2.43 MB 8.00 MB 240.00 MB 7.89 MB (3%)
Compressed Class Space Non-heap memory 0.00 MB 2.37 MB 1024.00 MB 2.20 MB (0%)
Metaspace Non-heap memory 0.00 MB 20.62 MB -0.00 MB 20.00 MB

PS Eden Space 创建一个新的对象都在堆内存当中

PS Old Gen 堆内存,长期存活的对象

PS Survivor Space 堆内存,存储新生代pseden和psoldgen之间的存活对象,可以理解成中生代

Code Cache 非堆内存,存储已经编译的代码

Compressed Class Space 非堆内存,存储已经压缩过的类定义.

Metaspace 非堆内存,存储元数据的区别

Ajp-nio-8009

ajp是协议,tomcat服务器和web服务器之间进行连接的协议,可以提供负载均衡和高效转发

nio是异步非阻塞的通信方式,可以提高并发的处理能力

8009就是ajp协议的默认端口

tomcat和nginx动静分离

访问nginx就是静态页面,nginx代理index.jsp可以访问tomcat的动态页面

test1 192.168.118.10

复制代码
systemctl stop firewalld
setenforce 0
cd /usr/local/tomcat/webapps
mkdir test
cd test/
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>
:wq

cd /usr/local/tomcat/conf
vim server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
<Host>
:wq
cd /usr/local/tomcat/bin/
./shutdown.sh
./startup.sh 
netstat -antp|grep 8080

test2

复制代码
systemctl stop firewalld
setenforce 0
cd /usr/local/tomcat/webapps
mkdir test
cd test/
vim index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>
:wq
cd /usr/local/tomcat/conf
vim server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
<Host>
:wq
./shutdown.sh
./startup.sh 
netstat -antp|grep 8080

test3

复制代码
systemctl stop firewalld
setenforce 0
cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak.2024.07.08
vim nginx.conf
 #gzip  on;
 http{
 	 upstream tomcat {
        server 192.168.118.10:8080 weight=1;
        server 192.168.118.20:8080 weight=1;
    }
	server{
 		location ~ .*\.jsp$ {
            proxy_pass http://tomcat;
            proxy_set_header HOST $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For 							 		$proxy_add_x_forwarded_for;
        }
	}
 }
:wq
nginx -t
systemctl restart nginx.service
cd /usr/local/nginx/html
vim index.html
#qingkong
this is static

    server 192.168.118.20:8080 weight=1;
}
server{
	location ~ .*\.jsp$ {
        proxy_pass http://tomcat;
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For 							 		$proxy_add_x_forwarded_for;
    }
}

}

:wq

nginx -t

systemctl restart nginx.service

cd /usr/local/nginx/html

vim index.html

#qingkong

this is static

复制代码
相关推荐
谷雨不太卷2 分钟前
Linux_文件权限
linux·运维·服务器
无泪无花月隐星沉1 小时前
uos server 1070e lvm格式磁盘扩容分区
linux·运维·uos
食咗未2 小时前
Linux USB HOST EXTERNAL STORAGE
linux·驱动开发
食咗未2 小时前
Linux USB HOST HID
linux·驱动开发·人机交互
Xの哲學2 小时前
Linux SLAB分配器深度解剖
linux·服务器·网络·算法·边缘计算
齐鲁大虾3 小时前
UOS(统信操作系统)如何更新CUPS(通用Unix打印系统)
linux·服务器·chrome·unix
虾..4 小时前
Linux 简单日志程序
linux·运维·算法
huoxingwen5 小时前
Ubuntu 22.04 上 VMware Workstation 点击虚拟机窗口就消失的解决历程
linux·运维·ubuntu
姚青&5 小时前
Linux 常用命令之基本命令
linux·运维·服务器
一路往蓝-Anbo5 小时前
【第05期】数据的微观世界 (五) —— 浮点数 vs 定点数:MCU的数学课
linux·stm32·单片机·嵌入式硬件·物联网