当前位置: 首页> 汽车> 维修 > tomcat优化

tomcat优化

时间:2025/8/23 15:59:48来源:https://blog.csdn.net/Hai990218/article/details/140258678 浏览次数: 1次

目录

tomcat自身的优化

优化tomcat的启动速度​编辑

自身的优化

内核优化

jvm优化

理解即可内容

ajp-nio-8009

tomcat和nginx实现动静分离

实验1

实验2


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

tomcat自身的优化

优化tomcat的启动速度

 vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security

file:/dev/urandom

非阻塞的版本,不依赖系统的终端,进程忙也不会进入等待状态,所以处理速度相对较快。如果对应用的安全性要求比较高,不能使用/dev/urandom,只能使用/dev/random

自身的优化

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

根据生成环境的实际情况,自行测试。

http的端口是80;https的端口是443

cd conf/

vim server.xml

maxThreads :tomcat使用线程来处理接受请求的个数,tomcat最多可以创建的线程个数,默认200个,一般使用500、1000

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

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

connectionTimeout:网络连接超时时间,单位是毫秒,也可以设置成0,永不超时,默认即可

enableLookups:是否支持反向解析,有两个值true ,false。一般都设置成false关闭,false可以提高处理速度

disableUplaodTimeout:上传时是否使用超时机制,默认10s,有两个值true ,false。true是禁用,false是开启

connectionUploadTimeout:上传的超时时间

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

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

如果compression="on"

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

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

compressableMimeType="页面类型":压缩类型,指定对哪些类型的文件进行压缩

常用的页面类型:

文本类型:text/plain   text/html  text/css  text/javacript

图片类型: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

内核优化

系统安全的优化补齐

内核优化的配置文件:

1.vim /etc/security/limits.conf

打开文件数的限制。系统初始化第一步要做的事情

2.内核参数文件

vim /etc/sysctl.conf

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

net.ipv4.tcp_max_tw_buckets=2000  允许timewait的最大数量

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

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

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

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

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

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

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

jvm优化

cd bin/

vim  catalina.sh

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内存最大值的3/8

Java自带垃圾回收机制,Java进行垃圾回收之后不需要重新计算堆区的大小

堆区:新生代堆区,中生代堆区,老生代堆区

每生成一个新的对象,对象占用的内存空间就是新生代空间。垃圾回收对堆区当中的资源进行回收之后,新生代没有被回收的资源就转移到中生代。中生代的就会转移到老生代。

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

XX:ParallelGCThreads=2:配置并行收集器的线程数,同时有多少个线程一起进行来及回收,配置成cpu的一半

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

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

-XX:MaxPermSize=1024m:非堆内存的最大值,和初始值一致即可

-Djava.awt.headless=true:防止在linux访问的情况下,web页面的图片不能打开

-XX:+DisableExplicitGC" :老年队的收集算法,缩短垃圾回收机制回收的时间

理解即可内容

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

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

PS Survivor Space 堆内存,PS Eden Space和PS Old Gen之间的存活对象,中生代

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

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

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

ajp-nio-8009

ajp-nio:连接器的类型。ajp是协议,nio是异步非阻塞的通信方式

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

nio可以提高并发的处理能力

8009就是ajp的默认端口

tomcat和nginx实现动静分离

实验1

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

数据流向

步骤

一、tomcat部分

1.分别在tomcat1和tomcat2做动态页面

 <%@ 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>

2.分别在tomcat1和tomcat2添加站点

cd 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" />

查看端口是否启动

访问192.168.233.40:8080/index.jsp

二、nginx部分

cd /usr/local/nginx/conf/

cp nginx.conf nginx.conf.bak.2024.07.08

vim nginx.conf

upstream tomcat {
    server 192.168.233.40:8080 weight=1;
    server 192.168.233.50:8080 weight=1;
}

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;
        }

然后systemctl restart nginx

结果

实验2

访问index.html就是静态页面,访问index.jsp就是访问tomcat的动态页面

数据流向

步骤

一、tomcat部分

1.分别在tomcat1和tomcat2做动态页面

<%@ 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>

2.分别在tomcat1和tomcat2添加站点

cd 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" />

查看端口是否启动

访问192.168.233.40:8080/index.jsp

二、nginx部分

配置nginx2和nginx3

cd /usr/local/nginx/conf/

cp nginx.conf nginx.conf.bak.2024.07.08

vim nginx.conf

upstream tomcat {
    server 192.168.233.40:8080 weight=1;
    server 192.168.233.50:8080 weight=1;
}

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;
        }

然后systemctl restart nginx

配置nginx1代理

做四层代理

cd /usr/local/nginx/conf

vim nginx.conf

然后systemctl restart nginx

结果

访问192.168.10:81 静态页面

访问192.168.233.10:82/index.jsp  动态页面

关键字:tomcat优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: