新闻类网站怎么做百度推广,临沧市网站建设,长沙网页设计培训班在哪里,怎么利用网站上的图片目录 一.Tomcat的基本介绍
1.1.Tomcat是什么#xff1f;
1.2.Tomcat的组件构成
1.3.Tomcat功能组件结构的核心功能
1.4.Tomcat的顶层架构
1.5.Tomcat的请求过程
1.6.Tomcat的配置文件
二.Tomcat服务部署
2.1.搭建Tomcat运行环境
2.2.安装启动Tomcat
三.Tomcat服务优…目录 一.Tomcat的基本介绍
1.1.Tomcat是什么
1.2.Tomcat的组件构成
1.3.Tomcat功能组件结构的核心功能
1.4.Tomcat的顶层架构
1.5.Tomcat的请求过程
1.6.Tomcat的配置文件
二.Tomcat服务部署
2.1.搭建Tomcat运行环境
2.2.安装启动Tomcat
三.Tomcat服务优化与虚拟主机配置
3.1.Tomcat的优化
3.1.1.内核优化
3.1.2.Tomcat配置文件参数优化
3.1.3.Tomcat 配置 JVM 参数
3.2.tomcat虚拟机配置 一.Tomcat的基本介绍
1.1.Tomcat是什么
Tomcat服务器是一个免费的开放源代码的Web应用服务器属于轻量级应用服务器在中小型系统和并发访问用户不是很多的场合下被普遍使用是开发和调试JSP程序的首选。一般来说Tomcat虽然和Apache或者Nginx这些Web服务器一样具有处理HTML页面的功能然而由于其处理静态HTML的能力远不及Apache或者Nginx所以Tomcat通常是作为 一个Servlet和JSP容器单独运行在后端。官网地址Apache Tomcat® - Welcome! Tomcat 是 Java 语言开发的Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器是 Apache 软件基金会的 Jakarta 项目中的一个核心项目由 Apache、Sun 和其他一些公司及个人共同开发而成。 1.2.Tomcat的组件构成
Tomcat 是 Web 应用服务器也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器负责处理客户的.jsp动态页面的请求把请求传送给 Servlet并将 Servlet 的响应传送回给客户。
Tomcat 由一系列的组件构成其中核心的组件有三个
1Web 容器完成 Web 服务器的功能。 2Servlet 容器名字为 catalina用于处理 Servlet 代码。 Servlet 是Java Servlet 的简称可以理解为是一个服务连接器是用 Java 编写的服务器端程序具有独立于平台和协议的特性 简单的理解servlet 就是一个中间件包含了接口和方法将客户端和数据库连接从而实现动态网页的创建 3JSP 容器用于将 JSP 动态网页翻译成 Servlet 代码。 JSP 全称 Java Server Pages是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 % 开头以 % 结束。 JSP 是一种 Java servlet主要用于实现 Java web 应用程序的用户界面部分。 JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源然后动态地创建网页。 因此 Tomcat 是 Web 应用服务器也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器负责处理客户请求把请求传送给 Servlet并将 Servlet 的响应传送回给客户。 1.3.Tomcat功能组件结构的核心功能
Tomcat 的核心功能有两个分别是负责接收和反馈外部请求的连接器 Connector和负责处理请求的容器 Container。 其中连接器和容器相辅相成一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。 Service对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件以及其他功能组件。Tomcat 可以管理多个 Service且各 Service 之间相互独立。
●Connector负责对外接收和响应请求。它是Tomcat与外界的交通枢纽监听端口接收外界请求并将请求处理后传递给容器做业务处理最后将容器处理后的结果响应给外界。 ●Container负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成用于管理和调用 Servlet 相关逻辑。
Container 结构分析 每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器4个子容器的作用分别是 1Engine引擎用来管理多个虚拟主机一个 Service 最多只能有一个 Engine 2Host代表一个虚拟主机也可以叫站点通过配置 Host 就可以添加站点 3Context代表一个 Web 应用包含多个 Servlet 封装器 4Wrapper封装器容器的最底层。每一 Wrapper 封装着一个 Servlet负责对象实例的创建、执行和销毁功能。
Engine、Host、Context 和 Wrapper这四个容器之间属于层层递进的父子关系。 容器 由一个引擎Engine可以管理多个虚拟主机Host。每个虚拟主机Host可以管理多个 Web 应用Context。每个 Web 应用会有多个 Servlet 封装器Wrapper。
1.4.Tomcat的顶层架构 1、Tomcat中最顶层的容器是Server代表着整个服务器一个Server可以包含至少一个Service用于具体提供服务。 2、Service主要包含两个部分:Connector和Container。Tomcat的心脏就是这两个组件这两个组件的作用:Connector用于处理连接相关的事情并提供Socket与Request和Response相关的转化; Conta iner用于封装和管理Servlet以及具体处理Request请求。 3、一个Tomcat中只有一个Server一个Server可以包含多个Service一个Service只有一个Container,但是可以有多个Connectors因为一个服务可以有多个连接如同时提供Http和Https链接也可以提供向相同协议不同端口的连接。 4、多个Connector和一个Container就形成了一个Service有了Service就可以对外提供服务了但是Service还要一个生存的环境必须要有人能够给它生命、掌握其生死大权那就非Server莫属了!所以整个Tomcat的生命周期由Server控制。另外上述的包含关系或者说是父子关系都可以在tomcat的conf目录下的server .xml配置文件中看出。 5、server.xm1中定义Server port8005 shutdownSHUTDOWN这会让Tomcat6启动一个server实例(即一个JVM)它监听在8005端口以接收“SHUTDOWN”命令如果接收到了就会关闭Tomcat。各Server的定义不能使用同一个端口这意味着如果在同一个物理机上启动了多个Server实例必须配置它们使用不同的端口。
1.5.Tomcat的请求过程 1用户在浏览器中输入该网址请求被发送到本机端口8080被在那里监听的Coyote HTTP/1.1 Connector获得; 2Connector把该请求交给它所在的Service的Engine (Container) 来处理并等待Engine的回应; 3Engine获得请求localhost/test/index.jsp匹配所有的虚拟主机Host; 4Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理因为该Host被定义为该Engine的默认主机)名为localhostHost获得请求/test/index.jsp匹配它所拥有的所有Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“”的Context去处理); 5path/test的Context获得请求/ index. jsp在它的mapping table中寻找出对应的Servlet。Context 匹配到URLPattern为* .jsp的Servlet对应于JspServlet类; 6构造HttpServletRequest对象和HttpServletResponse对象作为参数调用JspServlet的doGet()或doPost(),执行业务逻辑、数据存储等 7Context把执行完之后的HttpServletResponse对象返回给Host; . 8Host把HttpServletResponse对象返回给Engine; 9Engine把HttpServletResponse对象返回Connector; 10Connector把HttpServletResponse对象返回给客户Browser
1.6.Tomcat的配置文件
安装目录下 文件介绍
ls /usr/local/tomcat/
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
目录名字功能bin存放启动和关闭 Tomcat 的脚本文件比较常用的是 catalina.sh、startup.sh、shutdown.sh 三个文件conf存放 Tomcat 服务器的各种配置文件比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。lib存放 Tomcat 服务器的 jar 包一般不作任何改动除非连接第三方服务比如 redis那就需要添加相对应的 jar 包logs存放 Tomcat 日志temp存放 Tomcat 运行时产生的文件webapps 存放项目资源的目录workTomcat 工作目录一般清除 Tomcat 缓存的时候会使用到
conf子目录
注意配置文件对于大小写敏感文件名说明server.xml主配置文件web.xml每个webapp只有“部署后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件context.xml用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件tomcat-users.xml用户认证的账号和密码文件catalina.policy当使用security选项启动omcat时,用于为tomcat设置安全策略catalina.propertiesTomcat环境变量的配置,用于设定类加载器路径以及一些与JVM调优相关参数logging.propertiesTomcat日志系统相关的配置可以修改日志级别和日志路径等 二.Tomcat服务部署
本次部署准备的版本安装包版本根据需求 jdk-8u201-linux-x64.rpmjdk环境包是tomcat的运行环境
apache-tomcat-9.0.16.tar.gztomcat服务软件包
2.1.搭建Tomcat运行环境
1在部署 Tomcat 之前必须安装好 jdk因为 jdk 是 Tomcat 运行的必要环境。 1. #关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 2. #将安装 Tomcat 所需软件包传到/opt目录下 apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm 3. #切换至/opt下安装JDK cd /opt rpm -ivh jdk-8u201-linux-x64.rpm #安装并以#显示安装进度以及显示详细过程 java -version #查看jdk环境java版本 安装后进行版本查看此时版本并没有发生改变是因为环境变量还没进行新版本jdk的设置因此我们还有为idk做环境变量的改变 2设置jdk环境变量 1. #修改配置文件 vim /etc/profile.d/java.sh export JAVA_HOME/usr/java/jdk1.8.0_201-amd64 export JRE_HOME$JAVA_HOME/jre export CLASSPATH.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH$JAVA_HOME/bin:$JRE_HOME/bin:$PATH 拓展知识 CLASSPATH编译、运行Java程序时JRE会去该变量指定的路径中搜索所需的类.class文件。 JDK java development kit java开发工具 JRE java runtime environment java运行时环境 JVM java virtuak machine java虚拟机使java程序可以在多种平台上运行class文件。 2. #刷新配置文件 java -version #查看之前的版本 source /etc/profile.d/java.sh #执行脚本 java -version #查看刷新后的版本 3编写一个java 简易的源代码进行环境测试 vim Zr.java #类名、接口名命令英文大小写字母、数字字符、$和_不能使用关键字和数字开头 一个单词命名时第一个单词的首字母要大写多单词组成时所有单词的首字母大写XxxYyyZzz大驼峰命名法 public class Zr { public static void main(String[] args){ System.out.println(Hello world!); } } javac Zr.java #编译源代码 java Zr #运行源代码 2.2.安装启动Tomcat
1解压安装tomcat程序 1. #切换至/opt下解压tomcat包 cd /opt tar -zxf apache-tomcat-9.0.16.tar.gz 2. #将解压后的包拷贝至/usr/local/下并重命名 cp -r apache-tomcat-9.0.16 /usr/local/tomcat 2启动Tomcat 注意Tomcat服务启动时会占用8080端口 1. #切换至拷贝的目录下启动tomcat cd /usr/local/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看不到pid号 2. #看是否启动成功 ss -natp |grep 8080 3. #在网页测试是否可以成功登录 192.168.47.104:8080本机IP地址 4. #关闭tomcat记得再次打开 /usr/local/tomcat/bin/shutdown.sh #关闭后台运行的tomcat Tomcat的主要目录说明 bin存放启动和关闭 Tomcat 的脚本文件如 catalina.sh、startup.sh、shutdown.sh conf存放 Tomcat 服务器的各种配置文件如主配置文件 server.xml 和 应用默认的部署描述文件 web.xml lib存放 Tomcat 运行需要的库文件的 jar 包一般不作任何改动 logs存放 Tomcat 执行时的日志 temp存放 Tomcat 运行时产生的文件 webapps存放 Tomcat 默认的 Web 应用项目资源的目录 workTomcat 的工作目录存放 Web 应用代码生成和编译文件 3Tomcat服务使用拓展优化启动速度
第一次启动tomcat可能会发现 Tomcat 启动很慢默认情况下可能会需要几十秒可以修改jdk参数进行更改 1. #修改jdk参数 vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security --117行--修改 securerandom.sourcefile:/dev/urandom 2.重启服务 /usr/local/tomcat/bin/shutdown.sh #关闭 /usr/local/tomcat/bin/startup.sh #开启 /dev/urandom是/dev/random的非阻塞版本即当熵池中没有可取的随机数时读取/dev/urandom设备仍然会返回一个随机数只是该随机数的安全性理论上不高。如果应用对安全性要求很高那么应该使用/dev/random 该方法的原理说明 ●tomcat 启动慢的原因是随机数产生随机数的函数 random产生遭到阻塞遭到阻塞的原因是 熵池大小 。 ●/dev/random阻塞型读取它就会产生随机数据但该数据取决于熵池噪声当熵池空了对/dev/random 的读操作也将会被阻塞。 ●/dev/urandom非阻塞的随机数产生器它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器不建议用于生成高强度长期密码。 拓展 Linux中的熵 Linux内核采用熵来描述数据的随机性。熵entropy是描述系统混乱无序程度的物理量一个系统的熵越大则说明该系统的有序性越差即不确定性越大。在信息学中熵被用来表征一个符号或系统的不确定性熵越大表明系统所含有用信息量越少不确定度越大。计算机本身是可预测的系统因此用计算机算法不可能产生真正的随机数。但是机器的环境中充满了各种各样的噪声如硬件设备发生中断的时间用户点击鼠标的时间间隔等是完全随机的事先无法预测。Linux内核实现的随机数产生器正是利用系统中的这些随机噪声来产生高质量随机数序列。内核维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。理论上熵池中的数据是完全随机的可以实现产生真随机数序列。为跟踪熵池中数据的随机性内核在将数据加入池的时候将估算数据的随机性这个过程称作熵估算。熵估算值描述池中包含的随机数位数其值越大表示池中数据的随机性越好。 4将Tomcat添加至服务 1. #先关闭服务 /usr/local/tomcat/bin/shutdown.sh 2. #添加用户设置属主属组 useradd -s /sbin/nologin tomcat chown tomcat:tomcat /usr/local/tomcat/ -R 3. #新建服务文件 vim /etc/systemd/system/tomcat.service [Unit] DescriptionTomcat #Aftersyslog.target network.target remote-fs.target nss-lookup.target Aftersyslog.target network.target [Service] Typeforking ExecStart/usr/local/tomcat/bin/startup.sh ExecStop/usr/local/tomcat/bin/shutdown.sh RestartSec3 PrivateTmptrue Usertomcat Grouptomcat [Install] WantedBymulti-user.target 4. #重新加载服务并开启查看是否成功启动 systemctl daemon-reload systemctl start tomcat ss -ntap |grep 8080 三.Tomcat服务优化与虚拟主机配置
3.1.Tomcat的优化 Tomcat默认安装下的缺省配置并不适合生产环境它可能会频繁出现假死现象需要重启只有通过不断压测优化才能让它最高效率稳定的运行。常用的网站压测工具 Apache-abwebbenchApache-Jemeter
优化主要包括三方面分别为操作系统优化内核参数优化Tomcat配置文件参数优化Java虚拟机JVM调优。
3.1.1.内核优化
Linux内核优化中主要针对两个配置文件 /etc/security/limits.conf 和/etc/sysctl.conf
通常是利用调用内核参数的程序sysctl -a 查询出最优内核参数然后写入 /etc/sysctl.conf 文件内的。 例如 sysctl -a |grep fs.file-max 在得到该数据后我们可以将此 添加到 /etc/sysctl.conf 的配置文件中从而改变最大的文件打开数。但是file-max 表示系统级别的能够打开的文件句柄的数量。是对整个系统的限制并不是针对用户的。 ulimit -n 临时设置控制进程级别能够打开的文件句柄的数量。提供对shell及其启动的进程的可用文件句柄的控制。这是进程级别的。通过 ulimit -a 可以查看到打开的文件句柄数量 永久配置
注意设置保存后需要重新ssh连接才会看到配置更改的变化 vim /etc/security/limits.conf # 65535 为Linux系统最大打开文件数 * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 其他调试内核参数的查看 sysctl -a
kernel.sysrq 0
kernel.core_uses_pid 1
kernel.msgmnb 65536#默认为16384调高
kernel.msgmax 65536#默认为16384调高
kernel.shmmax 68719476736#以sctl -a实际查询出的为准
kernel.shmall 4294967296#以sctl -a实际查询出的为准
net.ipv4.ip_forward 0#0是关闭路由转发。VPN告别了也是系统默认的值。所谓转发即当主机拥有多于一块的网卡时其中一块收到数据包根据数据包的目的ip地址将数据包发往本机另一块网卡该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能现在如果改成1内核就可以做路由器的这个事了。
net.ipv4.conf.default.rp_filter 0#和下面这一条一对的开启网卡多播功能0不是特别安全。
net.ipv4.conf.all.rp_filter 0#reverse-path filtering反向过滤技术系统在接收到一个IP包后检查该IP是否是合乎要求不合要求的IP包会被系统丢弃。该技术就称为rp filter。0表示不启用该技术
net.ipv4.icmp_echo_ignore_all 0 #忽略ICMP请求。出于安全考虑建议开启此项当前默认值为0开启将值设为1。但开启后会忽略所有接收到的icmp echo请求的包(会导致机器无法ping通)建议用户根据实际组网场景决定是否开启此项。也就是0可以被ping1禁止被ping
net.ipv4.icmp_echo_ignore_broadcasts#和上一条一对的 系统忽略所有广播和多播地址的ICMP回显和时间戳记请求
net.ipv4.conf.default.accept_source_route 0#
net.ipv4.tcp_syncookies 1
net.ipv4.tcp_max_tw_buckets 6000
net.ipv4.tcp_sack 1#是否启用有选择的应答Selective Acknowledgment这可以通过有选择地应答乱序接收到的报文来提高性能这样可以让发送者只发送丢失的报文段对于广域网通信来说这个选项应该启用但是这会增加对 CPU 的占用一般是1如果CPU扛不住那就0吧
net.ipv4.tcp_window_scaling 1
net.ipv4.tcp_rmem 10240 87380 12582912#默认值的两倍TCP读取缓冲区单位为字节查看默认值
net.ipv4.tcp_wmem 10240 87380 12582912#默认值的两倍发送缓冲区和本机内存大小有关谨慎修改
net.ipv4.tcp_mem 94500000 915000000 927000000
net.core.wmem_default 8388608#照着改
net.core.rmem_default 8388608
net.core.rmem_max 16777216
net.core.wmem_max 16777216
net.core.netdev_max_backlog 262144
net.core.somaxconn 40960
net.ipv4.tcp_max_orphans 3276800
net.ipv4.tcp_max_syn_backlog 262144
net.ipv4.tcp_timestamps 0
net.ipv4.tcp_synack_retries 1 #可适当提高到2
net.ipv4.tcp_syn_retries 1 #可适当提高到2
net.ipv4.tcp_tw_recycle 1
net.ipv4.tcp_tw_reuse 1
net.ipv4.tcp_fin_timeout 1
net.ipv4.tcp_keepalive_time 30
net.ipv4.ip_local_port_range 1024 65000#不默认也可以
net.ipv6.conf.all.disable_ipv6 1
net.ipv6.conf.default.disable_ipv6 1
net.netfilter.nf_conntrack_max 6553500
net.netfilter.nf_conntrack_tcp_timeout_close_wait 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait 120
net.netfilter.nf_conntrack_tcp_timeout_established 3600
net.nf_conntrack_max 6553500
vm.overcommit_memory 0#当linux发现内存不足时会发生OOM killer(OOMout-of-memory)。它会选择杀死一些进程(用户态进程不是内核线程)以便释放内存。0是安全稳定如果是1表示即使内存耗尽也不杀死任何进程如果是2表示即使物理内存和swap都用完了服务器也死战到底。
vm.swappiness 0fs.file-max 999999这个参数表示进程比如一个worker进程可以同时打开的最大句柄数这个参数直线限制最大并发连接数需根据实际情况配置。net.ipv4.tcp_max_tw_buckets 6000 #这个参数表示操作系统允许TIME_WAIT套接字数量的最大值如果超过这个数字TIME_WAIT套接字将立刻被清除并打印警告信息。该参数默认为180000过多的TIME_WAIT套接字会使Web服务器变慢。注意主动关闭连接的服务端会产生TIME_WAIT状态的连接net.ipv4.ip_local_port_range 1024 65000 #允许系统打开的端口范围。net.ipv4.tcp_tw_recycle 1 #启用timewait快速回收。和下面这个是一对net.ipv4.tcp_tw_reuse 1 #开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。这对于服务器来说很有意义因为服务器上总会有大量TIME-WAIT状态的连接。net.ipv4.tcp_keepalive_time 30这个参数表示当keepalive启用时TCP发送keepalive消息的频度。默认是2小时若将其设置的小一些可以更快地清理无效的连接不是说的软件keepalive是比如nginx的 keepalive参数。net.ipv4.tcp_syncookies 1 #开启SYN Cookies当出现SYN等待队列溢出时启用cookies来处理。net.core.somaxconn 40960 #web 应用中 listen 函数的 backlog 默认会给我们内核参数的 net.core.somaxconn 限制到128而nginx定义的NGX_LISTEN_BACKLOG 默认为511所以有必要调整这个值。注对于一个TCP连接Server与Client需要通过三次握手来建立网络连接.当三次握手成功后,我们可以看到端口的状态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了.每一个处于监听(Listen)状态的端口,都有自己的监听队列.监听队列的长度与如somaxconn参数和使用该端口的程序中listen()函数有关somaxconn参数:定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128对于一个经常处理新连接的高负载 web服务环境来说默认的 128 太小了。大多数环境这个值建议增加到 1024 或者更多。大的侦听队列对防止拒绝服务 DoS 攻击也会有所帮助。net.core.netdev_max_backlog 262144 #每个网络接口接收数据包的速率比内核处理这些包的速率快时允许送到队列的数据包的最大数目。net.ipv4.tcp_max_syn_backlog 262144#这个参数标示TCP三次握手建立阶段接受SYN请求队列的最大长度默认为1024将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时Linux不至于丢失客户端发起的连接请求。net.ipv4.tcp_rmem 10240 87380 12582912#这个参数定义了TCP接受缓存用于TCP接受滑动窗口的最小值、默认值、最大值。
net.ipv4.tcp_wmem 10240 87380 12582912这个参数定义了TCP发送缓存用于TCP发送滑动窗口的最小值、默认值、最大值。
net.core.rmem_default 6291456这个参数表示内核套接字接受缓存区默认的大小。
net.core.wmem_default 6291456这个参数表示内核套接字发送缓存区默认的大小。
net.core.rmem_max 12582912这个参数表示内核套接字接受缓存区的最大大小。
net.core.wmem_max 12582912这个参数表示内核套接字发送缓存区的最大大小。
net.ipv4.tcp_syncookies 1该参数与性能无关用于解决TCP的SYN攻击。 查看指定的进程方法 ps -T -p pid号 查看线程的方法 ps -aT 3.1.2.Tomcat配置文件参数优化
常用设置 vim /usr/local/tomcat/conf/server.xml ...... Connector port8080 protocolHTTP/11.1 connectionTimeout20000 redirectPort8443 --71行--插入 minSpareThreads50 enableLookupsfalse disableUploadTimeouttrue acceptCount300 maxThreads500 processorCache500 URIEncodingUTF-8 maxKeepAliveRequests100 compressionon compressionMinSize2048 compressableMimeTypetext/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png/ 常用的优化相关参数如下 【redirectPort】如果某连接器支持的协议是HTTP当接收客户端发来的HTTPS请求时则转发至此属性定义的 8443 端口。 【maxThreads】Tomcat使用线程来处理接收的每个请求这个值表示Tomcat可创建的最大的线程数即支持的最大并发连接数默认值是 200。 【minSpareThreads】最小空闲线程数Tomcat 启动时的初始化的线程数表示即使没有人使用也开这么多空线程等待默认值是 10。 【maxSpareThreads】最大备用线程数一旦创建的线程超过这个值Tomcat就会关闭不再需要的socket线程。默认值是-1无限制。一般不需要指定。 【processorCache】进程缓冲器可以提升并发请求。默认值是200如果不做限制的话可以设置为-1一般采用maxThreads的值或者-1。 【URIEncoding】指定 Tomcat 容器的 URL 编码格式网站一般采用UTF-8作为默认编码。 【connnectionTimeout】网络连接超时单位毫秒设置为 0 表示永不超时这样设置有隐患的。通常默认 20000 毫秒就可以。 【enableLookups】是否反查域名以返回远程主机的主机名取值为true 或 false如果设置为 false则直接返回 IP 地址为了提高处理能力应设置为 false。 【disableUploadTimeout】上传时是否使用超时机制。应设置为 true。 【connectionUploadTimeout】上传超时时间毕竟文件上传可能需要消耗更多的时间这个根据你自己的业务需要自己调以使Servlet有较长的时间来完成它的执行需要与上一个参数一起配合使用才会生效。 【acceptCount】指定当所有可以使用的处理请求的线程数都被使用时可传入连接请求的最大队列长度超过这个数的请求将不予处理默认为 100 个。 【maxKeepAliveRequests】指定一个长连接的最大请求数。默认长连接是打开的设置为1时代表关闭长连接为-1时代表请求数无限制 【compression】是否对响应的数据进行GZIP压缩off表示禁止压缩on表示允许压缩文本将被压缩、force表示所有情况下都进行压缩默认值为 off压缩数据后可以有效的减少页面的大小一般可以减小 1/3 左右节省带宽。 【compressionMinSize】表示压缩响应的最小值只有当响应报文大小大于这个值的时候才会对报文进行压缩如果开启了压缩功能默认值就是 2048。 【compressableMimeType】压缩类型指定对哪些类型的文件进行数据压缩。 【noCompressionUserAgentsgozilla, traviata】对于以下的浏览器不启用压缩 #如果已经进行了动静分离处理静态页面和图片等数据就不需做 Tomcat 处理也就不要在 Tomcat 中配置压缩了。 3.1.3.Tomcat 配置 JVM 参数
调优环境规格以 2C4G 为例 #配置添加在 Tomcat 的 bin 目录下 catalina.sh 里 vim /usr/local/tomcat/bin/catalina.sh ##在118-119行之间也就是 cygwinfalse 前添加以下内容## JAVA_OPTS$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads2 -XX:PermSize1024m -XX:MaxPermSize1024m -Djava.awt.headlesstrue -XX:DisableExplicitGC cygwinfalse 参数说明
参数使用说明-server一定要作为第一个参数在多个CPU时性能佳-Xms设置堆内存初始值一般为物理内存的1/2初始Java初始化堆的大小是分配JVM的最小内存cpu性能高时此值应设的大一些。-Xmx设置堆内存初始最大值最大Java堆的大小是分配JVM的最大内存取决于硬件物理内存的大小建议-Xms与-Xmx设成一样的值均设为物理内存的一半。其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。-Xmn新生代的内存大小官方推荐配置为整个堆的 3/8。
其他配置参数说明 ---------------------------------------------------- ●堆区进一步细化分为新生代、中生代、老生代。 ●java中每新new一个对象所占用的内存空间就是新生代的空间当java垃圾回收机制对堆区进行资源回收后那些新生代中没有被回收的资源将被转移到中生代中生代的被转移到老生代。 ●整个JVM堆大小 新生代大小 老生代大小 永久代大小 ---------------------------------------------------- -XX:ParallelGCThreads配置并行收集器的线程数即同时有多少个线程一起进行垃圾回收此值建议配置与 CPU 数目相等设置并行GC垃圾回收。 -XX:PermSize设置非堆内存初始值即持久代内存大小默认是物理内存的1/4 -XX:MaxPermSize设置非堆内存初始最大值即最大持久代内存大小默认是物理内存的1/4 ---------------------------------------------------- ●非堆区内存是不会被java垃圾回收机制进行处理的且最大堆内存与最大非堆内存的和不能超出操作系统的可用内存。 ●XMX和XMS设置一样大MaxPermSize和MinPermSize设置一样大这样可以减轻伸缩堆大小带来的压力。 ---------------------------------------------------- -Djava.awt.headlesstrue免避在 Linux/Unix 环境下 Web 网页不能正常显示图片 -XX:DisableExplicitGC禁止调用System.gc()防止误调用gc方法导致系统的 JVM 大起大落而使系统响应时间严重降低。 -XX:UseParNewGC对新生代采用多线程并行回收缩短垃圾收集的时间 -XX:UseConcMarkSweepGC并发标记清除收集器它是老年代的收集算法缩短垃圾收集的时间 -XX:CMSParallelRemarkEnabled启用并行标记降低标记停顿 -XX:UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction0这两个参数默认值就是这样的表示触发FullGC时压缩堆优化内存碎片 -XX:CMSInitiatingOccupancyFraction70在应用程序使用70完内存后开始CMS垃圾收集 3.2.tomcat虚拟机配置
使用环境很多时候公司会有多个项目需要运行那么肯定不可能是一台服务器上运行多个Tomcat服务这样会消耗太多的系统资源。此时就需要使用到 Tomcat 虚拟主机。例如现在新增两个域名 www.zhang.com 和 www.rui.com希望通过这两个域名访问到不同的项目内容。1创建 zhang 和 rui 项目目录和文件 1. #创建 liu 和 xu 项目目录与文件 cd /usr/local/tomcat/webapps mkdir liu xu 2. #创建文件内容 echo this is liu web liu/index.html echo this is xu web xu/index.html 2修改 Tomcat 主配置文件 #修改主配置文件 vim /usr/local/tomcat/conf/server.xml --165行前--插入 Host namewww.zhang.com appBasewebapps unpackWARstrue autoDeploytrue xmlValidationfalse xmlNamespaceAwarefalse Context docBase/usr/local/tomcat/webapps/zhang path reloadabletrue / /Host Host namewww.rui.com appBasewebapps unpackWARstrue autoDeploytrue xmlValidationfalse xmlNamespaceAwarefalse Context docBase/usr/local/tomcat/webapps/rui path reloadabletrue / /Host 虚拟主机中的配置标签说明
Host标签中的配置项作用Host name主机名appBaseWEB应用的目录。Tomcat程序工作目录即存放web应用程序的目录相对路径为webapps绝对路径为 /usr/local/tomcat/webappsunpackWARs是否解压war包在启用此webapps时是否对WAR格式的归档文件先进行展开默认为trueautoDeploy指示Tomcat运行时如有新的WEB应用是否允许自动部署在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy默认为truexmlValidation是否验证xml文件执行有效性检验的标志xmlNamespaceAware是否启用xml命名空间设置该值与xmlValidation为true表示对web.xml文件执行有效性检验
HTTP 请求过程
Context标签中的配置项作用docBase相应的Web应用程序的存放位置也可以使用相对路径起始路径为此Context所属Host中appBase定义的路径path设置访问的URI为WEB应用的根目录相对于Web服务器根路径而言的URI如果为空则表示为此webapp的根路径 / reloadable是否在程序有改动时重新载入是否允许重新加载此context相关的Web应用程序的类默认为false
3重启服务并验证 1.#本机关闭防火墙并重启服务 systemctl restart tomcat systemctl stop firewalld setenforce 0 2. #再开启一台centos虚拟机客户端更改/etc/hosts文件 echo 192.168.47.104 www.liu.com www.xu.com /etc/hosts 3. #进行本地域名IP映射导入 测试访问 www.liu.com:8080/liu www.xu.com:8080/xu