Web 进阶——Tomcat

简介: Web 进阶——Tomcat

Web 进阶——Tomcat



一、Tomcat 优化


1.配置默认页面、页面超时、禁止列出目录

2.禁用 AJP 协议连接器

3.配置网页传输压缩

4.Tomcat 的三种模式切换

5.生产环境 Tomcat 配置

6.JVM 内存管理机制

1)堆和非堆内存

2)修改内存等 JVM 相关配置

3)验证


一、Tomcat 优化



Tomcat 常见日志:


image.png


  • 注意:Tomcat7 版本以上默认会自动进行分割。


1.配置默认页面、页面超时、禁止列出目录


禁止列出目录(Tomcat 默认是拒绝的)


[root@Tomcat ~]# vim /usr/local/tomcat/conf/web.xml
<init-param>
    <param-name>listings</param-name>
    <param-value>false</param-value>
</init-param>


  • 当网页存放路径下,没有默认页面时,不会将其网页存放目录下的内容展示出来。

页面超时


[root@Tomcat ~]# vim /usr/local/tomcat/conf/web.xml
<session-config>
    <session-timeout>30</session-timeout>
</session-config>


默认页面(如果访问的不是默认页面的话,访问时就需要完整路径。如:www.baidu.com/test.html)


[root@Tomcat ~]# vim /usr/local/tomcat/conf/web.xml
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>


  • Tomcat 的默认根目录为:/usr/local/tomcat/webapps/ROOT


2.禁用 AJP 协议连接器


  • AJP 是一个二进制的 TCP 传输协议,相比 HTTP 这种纯文本的协议来说,效率和性能更高。
  • 但是浏览器并不能直接支持 AJP 协议,只支持 HTTP 协议。
  • 为什么要禁用 AJP 协议:因为支持 AJP 代理的服务器非常少,除了 Apache 之外的 HTTP Server 几乎都不能反代 AJP 协议。


[root@Tomcat ~]# vim /usr/local/tomcat/conf/server.xml
<!-- Define an AJP 1.3 Connector on port 8009 
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->


  • 只需要将 Tomcat 主配置文件里的 8009 端口注释即可。


3.配置网页传输压缩


[root@Tomcat ~]# vim /usr/local/tomcat/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1">
    connectionTimeout="20000"
    redirectPort="8443"
    compression="on"                # 开启压缩
    compressionMinSize="10"             # 指定最小压缩文件. 单位是字节
    noCompressionUserAgents="gozilla,traviata"    # 此浏览器类型不进行压缩
    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>     # 压缩文件的格式
[root@Tomcat ROOT]# /usr/local/tomcat/bin/shutdown.sh         # 关闭 Tomcat 服务
[root@Tomcat ROOT]# /usr/local/tomcat/bin/start.sh            # 开启 Tomcat 服务


  • 注意:如果客户端是通过代理来访问后端服务器时,则没有必要配置页面传输压缩。


验证:


image.png


4.Tomcat 的三种模式切换


Java 对 BIO、NIO、APR 的支持:


image.png


1)BIO、NIO、APR 适用场景分析


  • BIO:适用于连接数目比较少且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4 以前的唯一选择。
  • NIO:适用于连接数目多且比较短的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4 开始支持。
  • APR:适用于连接数目多且连接比较长的架构,比如相册服务器,充分调用 OS 参与并发操作,编程比较复杂,JDK1.7 开始支持。


2)配置


  • 注意:因为 Tomcat7 版本以上默认使用的是 NIO 模式,所以不再进行配置。


Apr 模式配置:


[root@Tomcat ~]# yum -y install apr apr-devel
[root@Tomcat ~]# cp /usr/local/tomcat/bin/tomcat-native.tar.gz /root/
[root@Tomcat ~]# tar zxf tomcat-native.tar.gz
[root@Tomcat ~]# ls
...    tomcat-native.tar.gz    tomcat-native-1.2.17-src
[root@Tomcat ~]# cd tomcat-native-1.2.17-src/native/
[root@Tomcat native]# ./configure \
--with-apr=/usr/bin/apr-1-config && make && make install


安装成功会提示如下:


Libraries have been installed in:
   /usr/local/apr/lib
...


[root@Tomcat ~]# cat <<END >> /usr/local/tomcat/bin/catalina.sh 
CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
END


[root@Tomcat ~]# vim /usr/local/tomcat/conf/server.xml            #修改主配置文件
将:
<Connector port="8080" protocol="HTTP/1.1"
修改为:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"


  • 注意:当修改为其它模式时,只需要将 Http11AprProtocol 中的 Apr 替换为其它模式即可。


[root@Tomcat ~]# cat <<END >> /etc/profile                  # 配置环境变量
export LD_LIBRARY_PATH=:/usr/local/apr/lib
END
[root@Tomcat ~]# source /etc/profile                    # 使其生效
[root@Tomcat ~]# /usr/local/tomcat/bin/shutdown.sh              # 关闭 Tomcat 服务
[root@Tomcat ~]# /usr/local/tomcat/bin/start.sh               # 开启 Tomcat 服务


3)查看 Tomcat 服务状态


[root@Tomcat ~]# vim /usr/local/tomcat/conf/tomcat-users.xml
在最后一行 </tomcat-users> 前面添加:
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/> 
<role rolename="manager-script"/> 
<role rolename="manager-status"/> 
# 如上五条命令只是设置角色
<user username="admin" password="123123" roles="admin-gui,manager-gui,manager-jmx,manager-script,manager-status"/>


默认 Tomcat 的管理页面只能通过 Tomcat 服务器上的浏览器才可以访问,设置其可以在其他主机访问


[root@Tomcat ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >   
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$"/>
</Context>


验证:http://192.168.1.1:8080/manager/status


image.png


5.生产环境 Tomcat 配置


[root@Tomcat ~]# vim /usr/local/tomcat/conf/server.xml
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"    # 工作模式为 Nio
        URIEncoding="UTF-8"     # 设置编码
        minSpareThreads="25"    # 初始化时创建的 socket 线程数
        maxSpareThreads="75"    # 连接器的最大空闲 socket 线程数. 一旦创建的线程超过这个值. Tomcat就会关闭不再需要的 socket 线程
        enableLookups="false"   # 屏蔽 DNS 查询
    disableUploadTimeout="true"     # 开启 上传数据时. 要么使用更长的时间完成上传. 要么出现更长的超时
        connectionTimeout="20000"     # 网络超时时间. 单位:毫秒
        acceptCount="300"         # 允许的最大连接数. 一般设置为 maxProcessors 的 1.5 倍即可. 超出后客户端请求将被拒绝
        maxThreads="300"          # 客户端请求最大线程数. 默认值为 "200"
        maxProcessors="1000"        # 最大连接线程数. 并发处理的最大请求数. 默认值为75
        minProcessors="5"         # 最小空闲连接线程数. 用于提高系统处理性能. 默认值为10
        compression="on"          # 开启压缩功能
        compressionMinSize="2048"     # 指定最小的压缩文件. 单位是字节
        compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"   # 压缩文件的格式
        redirectPort="8443"         # 开启安全通道 SSL
/>


6.JVM 内存管理机制


1)堆和非堆内存


JVM 主要管理两种类型的内存:


  • 堆:简单来说堆就是 Java 代码可及的内存,是留给开发人员使用的。
  • 非堆:非堆就是 JVM 留给自己用的,所以方法区、JVM 内部处理或优化所需的内存(如 JIT 编译后的代码缓存);
  • 每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。


内存分配:JVM 堆和非堆的初始值默认都是物理内存的 1/64,最大分配内存为 1/4。


2)修改内存等 JVM 相关配置


[root@Tomcat ~]# vim /usr/local/tomcat/bin/catalina.sh
在 CLASSPATH= 下面添加:
JAVA_OPTS="-Xms2048M -Xmx2048M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M"


  • -Xms:设置堆最小内存。
  • -Xmx:设置堆最大内存。
  • -XX:MetaspaceSize:设置非堆最小内存。
  • -XX:MaxMetaspaceSize:设置非堆最大内存。


3)验证


设置成功后我们可以利用 JDK 自动的工具进行验证:


  • jps:用来显示本地的 Java 进程,以及进程号,进程启动的路径等。
  • jmap:能够查看运行中的 JVM 物理内存的占用情况。


[root@Tomcat ~]# jps                      # 查看本地 Java 进程号
15703 Jps
15576 Bootstrap
[root@Tomcat ~]# jmap -heap 15576               # 查看 JVM 物理内存占用情况


image.png


如果 JVM 内存超出会报以下错误:


严重: Exception invoking periodic operation: java.lang.OutOfMemoryError: Java heap space
严重: Error processing request java.lang.OutOfMemoryError: GC overhead limit exceeded


  • 说明 Tomcat 已经无力支持访问处理,内部 GC 也已经"无能无力"。所以一般情况下我们需要重新配置 Tomcat 的相关内存大小。


相关文章
|
4月前
|
Java 应用服务中间件 Apache
Maven程序 tomcat插件安装与web工程启动
Maven程序 tomcat插件安装与web工程启动
47 0
|
2月前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
42 1
|
2月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
76 0
|
2月前
|
网络协议 Java 应用服务中间件
Tomcat源码分析 (一)----- 手撕Java Web服务器需要准备哪些工作
本文探讨了后端开发中Web服务器的重要性,特别是Tomcat框架的地位与作用。通过解析Tomcat的内部机制,文章引导读者理解其复杂性,并提出了一种实践方式——手工构建简易Web服务器,以此加深对Web服务器运作原理的认识。文章还详细介绍了HTTP协议的工作流程,包括请求与响应的具体格式,并通过Socket编程在Java中的应用实例,展示了客户端与服务器间的数据交换过程。最后,通过一个简单的Java Web服务器实现案例,说明了如何处理HTTP请求及响应,强调虽然构建基本的Web服务器相对直接,但诸如Tomcat这样的成熟框架提供了更为丰富和必要的功能。
|
29天前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
37 0
|
2月前
|
Java 应用服务中间件 Apache
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
本文介绍了在IntelliJ IDEA中修改Web项目访问路径的步骤,包括修改项目、模块、Artifacts的配置,编辑Tomcat服务器设置,以及解决Apache Tomcat控制台中文乱码问题的方法。
58 0
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
|
2月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
62 3
|
3月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
46 1
|
2月前
|
应用服务中间件
2022年最新最详细在IDEA中配置Tomcat(含有详细图解过程)、建立使用IEDA建立一个Web项目的案例
这篇文章提供了在IntelliJ IDEA中配置Tomcat服务器的详细步骤,包括添加Tomcat Server、选择安装路径、添加项目Artifact,以及创建和展示Web项目的流程。
|
3月前
|
缓存 JavaScript 前端开发
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第4天】JavaScript的Web Workers和Service Worker增强了Web性能。Web Workers处理后台多线程,减轻主线程负担,但通信有开销,受同源策略限制。Service Worker则用于离线缓存和推送通知,需管理其生命周期、更新策略,并确保安全。两者都带来了挑战,但也极大提升了用户体验。通过理解和优化,开发者能构建更高效、安全的Web应用。
76 2
下一篇
无影云桌面