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

复制代码
相关推荐
荒Huang17 分钟前
Linux挖矿病毒(kswapd0进程使cpu爆满)
linux·运维·服务器
hjjdebug2 小时前
linux 下 signal() 函数的用法,信号类型在哪里定义的?
linux·signal
其乐无涯2 小时前
服务器技术(一)--Linux基础入门
linux·运维·服务器
Diamond技术流2 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
斑布斑布2 小时前
【linux学习2】linux基本命令行操作总结
linux·运维·服务器·学习
Spring_java_gg2 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
✿ ༺ ོIT技术༻2 小时前
Linux:认识文件系统
linux·运维·服务器
会掉头发3 小时前
Linux进程通信之共享内存
linux·运维·共享内存·进程通信
我言秋日胜春朝★3 小时前
【Linux】冯诺依曼体系、再谈操作系统
linux·运维·服务器