web一些概念,tomcat工作模式、优化,nginx平滑升级
有状态的服务和无状态的服务
有状态服务之间存在依赖关系、数据存储等问题,不能被轻易代替。
无状态服务就是不存在依赖关系、数据存储等问题,可以随意替换新的
centos7安装jdk1.8
1、解压包
tar xf jdk*
安装jdk1.8到/usr/local/
mv jdk1.8 /usr/local/
cd /usr/local/
2、配置环境变量
vim /etc/profile
在文件尾添加:
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=/usr/local/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
3、使立即生效
source /etc/profile
4、验证
java -version
tomcat
一、几个概念:Servlet、Servlet容器、Tomcat
1、web技术的发展
早期,web技术主要用于浏览静态页面:
然而随着时间发展,用户已经不满足于仅浏览静态页面。用户需要一些交互操作,获取一些动态结果。如果基于HTTP协议实现服务器端软件增强功能太过 复杂,所以需要一些扩展机制来实现用户想要的功能。
早期使用的Web服务器扩展机制是CGI(Common Gateway Interface,公共网关接口)。
CGI程序在一定程度上解决了用户需求。不过还存在一些不足之处,如CGI程序编写困难,响应时间较长,以进程方式运行导致性能受限。于是1997年,sun公司推出了Servlet技术,作为java阵营的CGI解决方案。
2、Servlet
Java Servlet(Java服务器小程序)是一个基于Java技术的Web组件,运行在服务器端,它由Servlet容器所管理,用于生成动态的内容。 Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。Servlet被编译为平台独立 的字节码,可以被动态地加载到支持Java技术的Web服务器中运行。
3、Servlet容器
Servlet容器也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于 MIME的请求,格式化基于MIME的响应。Servlet没有main方法,不能独立运行,它必须被部署到Servlet容器中,由容器来实例化和调用 Servlet的方法(如doGet()和doPost()),Servlet容器在Servlet的生命周期内包容和管理Servlet。在JSP技术 推出后,管理和运行Servlet/JSP的容器也称为Web容器。
4、Tomcat
Tomcat是一个免费的开放源代码的Servlet容器。
Tomcat服务器接受客户请求并做出响应的过程如下,与上图类似:
1)客户端(通常都是浏览器)访问Web服务器,发送HTTP请求。
2)Web服务器接收到请求后,传递给Servlet容器。
3)Servlet容器加载Servlet,产生Servlet实例后,向其传递表示请求和响应的对象。
4)Servlet实例使用请求对象得到客户端的请求信息,然后进行相应的处理。
5)Servlet实例将处理结果通过响应对象发送回客户端,容器负责确保响应正确送出,同时将控制返回给Web服务器。
二、tomcat的三种工作模式
1、Tomcat 的连接器有两种:HTTP和AJP
HTTP Connector:http拥有这个连接器,Tomcat才能成为一个web服务器,但还额外可处理Servlet和jsp。
AJP Connector:AJP连接器可以通过AJP协议和另一个web容器进行交互。
2、Tomcat Connector(连接器)有三种运行模式:bio nio apr
Tomcat8以下版本在默认情况下是以bio模式运行的。一般而言,bio模式是三种运行模式中性能最低的一种。
Tomcat8 及以上版本在 Linux 系统中,默认使用的就是NIO模式,不需要额外修改 。
tomcat默认有三种工作模式,分别为
(1)bio(blocking I/O)
即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。一个线程处理一个请求,缺点:并发量高时,线程数较多,浪费资源。
使用方式:现在通常不使用
(2)nio(new I/O)
Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。利用 Java 的异步请求 IO 处理,可以通过少量的线程处理大量的请求。
使用方式:tomcat默认模式
(3)apr(Apache Portable Runtime/Apache可移植运行时)
Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。Tomcat apr也是在Tomcat上运行高并发应用的首选模式。
使用方式:在server.xml中更改使用的协议,更加详细的说明可以之间看tomcat的文档。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443"/>
apr模式需要nativie组件支持,如果本机native组件版本过低,tomcat在启动时会报异常,解决方法时根据异常提示信息下载对应版本的native插件。
三、tomcat性能优化
Tomcat优化主要从一下几个方面考虑:
1、Tomcat线程池优化
在server.xml中有:
<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100"
maxSpareThreads="500" acceptCount="700" connectionTimeout="20000" />
maxThreads="600" ///最大线程数
minSpareThreads="100"///初始化时创建的线程数
maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
acceptCount="700"//指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
2、tomcat内存优化
Linux中是在catalina.sh中设置。
例如:-XX:PermSize=256M -XX:MaxPermSize=512M -Xms512m -Xmx1024m
其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。
-Xms<size> JVM初始堆大小
-Xmx<size>JVM堆的最大值,实际参数根据服务器配置或项目具体设置。
-XX:PermSize=<size> JVM初始分配的非堆内存
-XX:MaxPermSize=<size> JVM最大允许分配的非堆内存,按需分配
3、禁用DNS查询
当web应用程序想要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名 转换为IP地址。
DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。
修改server.xml文件中的Connector元素,修改属性enableLookups参数值: enableLookups="false"
如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
4、设置session过期时间
conf\web.xml中通过参数指定:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
单位为分钟。
四、日志分隔工具Cronolog的使用
Cronolog 分割 Tomcat8 Catalina.out日志。
默认情况下,tomcat的catalina.out日志文件是没有像其它日志一样,按日期进行分割,而是全部输出全部写入到一个catalina.out,这样日积月累就会造成.out日志越来越大,给管理造成了不便,为了实现像其它日志文件一样按日期归档,这里我采用cronolog来完成日志分割。
nginx平滑升级
1、在不停掉老进程的情况下,启动新进程。
2、老进程负责处理没有处理完的请求,但不接受新的处理请求。
3、新进程接受新请求。
4、老进程处理完所有请求,关闭所有连接后停止。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」