当前位置: 首页 > news >正文

【Tomcat】部署及优化

一、Tomcat部署

在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。

1、关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下

jdk-8u391-linux-x64.tar.gz
apache-tomcat-9.0.16.tar.gz

systemctl stop ufw
systemctl disable ufw

2、安装JDK  

cd /opt
tar zxvf jdk-8u391-linux-x64.tar.gz -C /usr/local/

3、设置JDK环境变量  

vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/jdk1.8.0_391
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH

source /etc/profile.d/java.sh
java -version

 

4、安装启动Tomcat

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat ##
#后台启动
/usr/local/tomcat/bin/startup.sh 
或
/usr/local/tomcat/bin/catalina.sh start	

 

#前台启动
/usr/local/tomcat/bin/catalina.sh run		

ss -natp | grep 8080

 5、浏览器访问Tomcat的默认主页

http://本机地址:8080


6、systemd管理启动控制

vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk1.8.0_391"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

systemctl start tomcat    #启动
systemctl enable tomcat   #配置自启
systemctl stop tomcat     #停止服务
systemctl status tomcat   #检测状态

 

二、Tomcat优化

2.1  配置文件优化

        修改tomcat主配置文件 conf/server.xml 中的连接器配置  <Connector port="8080" ....  />

maxThreads             

最大线程数/并发连接数,参考值 500  800  1000
minSpareThreads最小空闲线程数/初始化线程数,参考值 100
protocol指定HTTP/1.1协议的工作模式为NIO,参考值  org.apache.coyote.http11.Http11NioProtocol
acceptCount  等待队列数,参考值 1000
enableLookups  

关闭DNS解析,参考值 false

URIEncoding

网页编码格式,参考值 UTF-8

connectionTimeout      连接保持超时时间,参考值 20000  30000
maxKeepAliveRequests  连接保持最大请求数,参考值 100,为1时表示关闭连接保持,为-1时表示不限制请求数
compression            网页压缩,参考值 on
disableUploadTimeout   关闭上传超时,参考值 true

2.2  内核优化

2.2.1  系统内核优化

1、临时配置

ulimit -n  65535   #设置用户级别进程打开的文件数  
ulimit -u  65535   #设置用户级别能够打开的进程/线程总数

2、永久配置

vim  /etc/security/limits.conf

*  soft  nofile  65535             #设置用户级别进程打开的文件数

*  hard  nofile  65535

*  soft  nproc  65535              #设置用户级别能够打开的进程/线程总数

*  hard  nproc  65535

 2.2.2  内核资源限制优化

vim /etc/sysctl.conf
#解决TIME_WAIT数量过多问题
net.ipv4.tcp_tw_reuse=1            #开启TIME_WAIT连接重用于新的TCP连接,默认值为0
net.ipv4.tcp_max_tw_buckets=5000   #减少系统可以保持的TIME_WAIT连接的最大数量,如果超过该值就不需要等待2MSL直接关闭TIME_WAIT连接,默认值为16384
net.ipv4.tcp_fin_timeout=30        #减少处于TIME_WAIT状态的超时时间(MSL时间),尽快释放系统的连接资源,默认值为60

#进一步优化,提升服务器的并发能力,还能预防一些攻击
net.ipv4.ip_local_port_range=1024 65535      #增加用于向外连接的本地端口范围,默认为32768 60999
net.ipv4.tcp_keepalive_time=1200             #减少TCP连接保活时间,设置TCP连接在没用数据传输时多久发送一次保活探测包来确认客户端是否断网,默认值为7200

net.ipv4.tcp_max_syn_backlog=65535           #增加TCP半连接队列容量,设置TCP三次握手建立阶段接收SYN请求队列的最大长度,默认为128
net.core.netdev_max_backlog=65535            #增加网络接口队列长度,可以避免在高负债情况下丢包,默认值为1000
net.core.somaxconn=65535                     #增加系统中每个TCP端口监听队列的最大长度,默认值为128

net.ipv4.tcp_syncookies=1                    #开启SYN Cookies功能,可以用于预防SYN Flood攻击
net.ipv4.tcp_synack_retries=2                #减少发起syn+ack的最大重试次数,可以适当预防syn flood攻击,默认为5

2.3  JVM优化

        修改 bin/catalina.sh 文件,在 cygwin=false 位置前面添加 JAVA_OPTS 参数配置。

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:ParallelGCThreads=2"

-server                                     #开启服务器模式,提升性能

-Xms2048m -Xmx2048m                         #设置JVM堆内存初始值和最大值,要设置为相同大小,一般为物理内存的1/2。Xms和Xmx设置相同大小的目的是为了减少GC(垃圾回收)次数,以及在GC后不需要JVM重新分配内存而浪费资源

-XX:PermSize=512m -XX:MaxPermSize=512m      #设置非堆内存(永久代)的初始值和最大值,一般不超过物理内存的1/4注:堆内存和非堆内存的和不能超过总可用内存

-Xmn768m                                    #设置JVM堆内存新生代的大小,一般为堆内存的1/3或3/8

-XX:ParallelGCThreads=2                     #设置并行GC的线程数,提高垃圾回收效率,一般为与CPU数量相同(不超过8)

相关文章:

  • 阿里云国际站代理商:怎样针对4G/5G网络优化CDN参数?
  • Pyserial库使用
  • 蓝桥杯学习-14子集枚举,二进制枚举
  • 高速电路设计之电源分类及其应用要点
  • netplan是如何操控systemd-networkd的? 笔记250324
  • 深入理解Spring框架:核心概念与组成剖析
  • Android第六次面试总结(okhttp篇)
  • Proteus8打开Proteus7文件(.DSN格式)的方法
  • Ceph集群2025(Squid版)导出高可用NFS集群(下集 )
  • 如何在多个GPU中训练非常大的模型?
  • 【编程】面向对象编程和函数式编程
  • 手撕C++ STL list容器:从指针缠绕到迭代器封装的实践笔记
  • 【大模型】DeepSeek攻击原理和效果解析
  • dify0.15.3升级至dify1.1.2操作步骤
  • 【DFS】羌笛何须怨杨柳,春风不度玉门关 - 4. 二叉树中的深搜
  • 高效PDF翻译解决方案:多引擎支持+格式零丢失
  • Android第六次面试总结(Java设计模式篇一)
  • Harbor镜像仓库迁移与高可用集群搭建实战指南
  • 在Centos 7环境下安装MySQL
  • C++11 auto decltype
  • 创历史同期新高!“五一”假期全国快递揽投超48亿件
  • 媒体:西安62岁男子当街殴打妻子,警方称打人者已被行拘
  • 江西省文化和旅游厅厅长梅亦已任省委宣传部副部长
  • 无畏契约新王诞生:属于电竞世界的凯泽斯劳滕奇迹
  • 抚州一原副县长拉拢公职人员组建“吃喝圈”,长期接受打牌掼蛋等“保姆式”服务
  • 社区来电催生?多地回应:系为居民提供卫生健康服务