Tomcat参数配置
2019独角兽企业重金招聘Python工程师标准>>>
1. JAVA_OPTS内存优化
Tomcat内存优化主要是对启动参数的优化,可以在Tomcat的启动脚本catalina.sh中设置JAVA_OPTS参数。
-server 启用jdk 的 server 版; -Xms java虚拟机初始化时的最小内存; -Xmx java虚拟机可使用的最大内存;
配置完成后重启Tomcat,通过以下命令查看配置是否生效。
1.首先查看Tomcat进程号
ps -ef|grep java;进程号22222
2.通过进程号查看配置是否生效
sudo jmap -heap 22222
2. server.xml优化
Tomcat的主要配置文件,该配置中包含很多元素service、host、connector等。
<Server><Listener /><GlobaNamingResources></GlobaNamingResources<Service><Connector /><Engine><Logger /><Realm /><host><Logger /><Context /></host></Engine></Service>
</Server>
maxThreads 客户请求最大线程数,默认200
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为 10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为 75
acceptCount:允许的最大连接数,应大于等于 maxProcessors ,默认值为 100
enableLookups:是否反查域名,取值为: true 或 false 。为了提高处理能力,应设置为 false
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout:网络连接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐患的。通常可设置为30000 毫秒。
URIEncoding URL统一编码
其中和最大连接数相关的参数为maxProcessors 和 acceptCount 。如果要加大并发连接数,应同时加大这两个参数。
<Connector port="9027" protocol="HTTP/1.1" maxHttpHeaderSize="8192" maxThreads="1000" minSpareThreads="100" maxSpareThreads="1000" minProcessors="100" maxProcessors="1000" enableLookups="false" URIEncoding="utf-8" acceptCount="1000" redirectPort="8443" disableUploadTimeout="true"/>
maxThreads 和acceptCount生效情况
maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。
情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。
情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="800" acceptCount="1000"/>
3. 多个虚拟机
强烈建议不要使用 Tomcat 的虚拟主机,推荐每个站点使用一个实例。即,可以启动多个 Tomcat,而不是启动一个 Tomcat 里面包含多个虚拟主机。因为 Tomcat是多线程,共享内存,任何一个虚拟主机中的应用崩溃,都会影响到所有应用程序。虽然采用多实例的方式会产生过多的开销,但至少保障了应用程序的隔离和安全。
4. 压缩传输
tomcat作为一个应用服务器,也是支持 gzip 压缩功能的。我们可以在 server.xml 配置文件中的 Connector 节点中配置如下参数,来实现对指定资源类型进行压缩。
compression="on" # 打开压缩功能 compressionMinSize="50" # 启用压缩的输出内容大小,默认为2KB noCompressionUserAgents="gozilla, traviata" # 对于以下的浏览器,不启用压缩 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 哪些资源类型需要压缩
Tomcat 的压缩是在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程 HTML、CSS、Javascript和Text,它可以节省40% 左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等输出的网页也能进行压缩,压缩效率也很高。但是, 压缩会增加 Tomcat 的负担,因此最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,将压缩的任务交由 Nginx/Apache 去做。
Tomcat是根据浏览器请求头中的accept-encoding来判断浏览器是否支持 压缩功能,如果这个值包含有gzip,就表明浏览器支持gzip压缩内容的浏览
5. 管理AJP端口
AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。由于我们公司前端是由nginx做的反向代理,因此不使用此连接器,因此需要注销掉该连接器。
<!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
6. 更改关闭 Tomcat 实例的指令
server.xml中定义了可以直接关闭 Tomcat 实例的管理端口。我们通过 telnet 连接上该端口之后,输入 SHUTDOWN (此为默认关闭指令)即可关闭 Tomcat 实例(注意,此时虽然实例关闭了,但是进程还是存在的)。由于默认关闭 Tomcat 的端口和指令都很简单。默认端口为8005,指令为SHUTDOWN 。因此我们需要将关闭指令修改复杂一点。
当然,在新版的 Tomcat 中该端口仅监听在127.0.0.1上,因此大家也不必担心。除非黑客登陆到tomcat本机去执行关闭操作。
<Server port="8005" shutdow n="9SDKJ29jksjf23sjf0LSDF92JKS9DKkjsd">
7. 更改 Tomcat 的服务监听端口
一般公司的 Tomcat 都是放在内网的,因此我们针对 Tomcat 服务的监听地址都是内网地址。
<Connector port="8080" address="172.16.100.1" />
8. 关闭war自动部署
默认 Tomcat 是开启了对war包的热部署的。为了防止被植入木马等恶意程序,因此我们要关闭自动部署。
<Host name="localhost" appBase=""unpackWARs="false" autoDeploy="false">
9. Tomcat性能优化
1.配置Tomcat运行内存;2.利用缓存和压缩《利用nginx加速web访问》;3.采用集群《利用nginx+tomcat+memcached组建web服务器负载均衡》4.Tomcat的参数优化;5.改用APR库
tomcat默认采用的BIO模型,在几百并发下性能会有很严重的下降。tomcat自带还有NIO的模型,另外也可以调用APR的库来实现操作系统级别控制。
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
修改为
<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol " connectionTimeout="20000" redirectPort="8443" />
NIO模型是内置的,调用很方便,只需要将上面配置文件中protocol修改成org.apache.coyote.http11.Http11NioProtocol,重启即可生效。上面配置我已经改过了,默认的是HTTP/1.1。
APR则需要安装第三方库,在高并发下会让性能有明显提升。
Tomcat的四种基于HTTP协议的Connector性能比较
<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443"/>
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443"/>
<Connector executor="tomcatThreadPool"port="8081" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
<Connector executor="tomcatThreadPool"port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"connectionTimeout="20000"redirectPort="8443" />
Connector按照顺序命名为 NIO, HTTP, POOL, NIOP
NIO HTTP POOL NIOP
281 | 65 | 208 | 365 |
666 | 66 | 110 | 398 |
692 | 65 | 66 | 263 |
256 | 63 | 94 | 459 |
440 | 67 | 145 | 363 |
10. 使用 Server JRE 替代JDK
服务器上不要安装JDK,请使用 Server JRE. 服务器上根本不需要编译器,代码应该在Release服务器上完成编译打包工作。
理由:一旦服务器被控制,可以防止在其服务器上编译其他恶意代码并植入到你的程序中。
11. Tomcat 安全配置
1. 禁用Tomcat管理页面,删除webapps下面的所有代码,删除conf/Catalina/localhost/下的host-manager.xml和manager.xml这两个文件。
rm -rf /srv/apache-tomcat/webapps/*
2. 注释或删除 tomcat-users.xml 所有用户权限
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
</tomcat-users>
3. 隐藏Tomcat版本信息
<Connector port="80" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxThreads="8192"minSpareThreads="64"maxSpareThreads="128"acceptCount="128"enableLookups="false"server="Neo App Srv 1.0"/>
4. 启动用户与端口
创建一个用户,这个用户只用于启动Tomcat
groupadd -g 80 daemon adduser -o --home /daemon --shell /sbin/nologin --uid 80 --gid 80 -c "Web Server" daemon
chown daemon:daemon -R /srv/* su - daemon -c "/srv/apache-tomcat/bin/startup.sh"
应用程序的部署和Tomcat启动不能使用同一用户(tomcat被植入web shell程序时,不能创建或编辑应用程序目录下任何内容)
5. 关闭自动部署
unpackWARs="false" autoDeploy="false";防止被植入木马等恶意程序
6. JSESSIONID
修改 Cookie 变量 JSESSIONID, 这个cookie 是用于维持Session关系。建议你改为PHPSESSID。
7. 超时自动退出
查看tomcat配置文件server.xml是否有设置connectionTimeout值,设置账户自动登出。
session超时失效设置
<session-config> <session-timeout>30</session-timeout>
</session-config>
8. 自定义错误页面
<error-page><error-code>404</error-code><location>/404.html</location>
</error-page>
<error-page><error-code>500</error-code><location>/500.html</location>
</error-page>
9. 禁止列目录(高版本默认已禁止)
编辑tomcat/conf/web.xml配置文件
<init-param><param-name>listings</param-name><param-value>false</param-value>
</init-param>
当WEB目录中没有默认首页如index.html,index.jsp等文件时,不会列出目录内容,直接访问http://ip:8800/webadd。
10. 配置httponly
可在conf/context.xml配置文件中配置
<Context useHttpOnly="true"></context>
并且修改tomcat/conf/web.xml配置文件
<session-config><session-timeout>30</session-timeout><cookie-config><http-only>true</http-only></cookie-config>
</session-config>
11. 配置cookie加密传输
在web.xml中sesion-config节点配置cookie-config中secure属性,此配置只允许cookie在加密方式下传输。只有当使用https协议连接时cookie才可以被页面访问.
<session-config><session-timeout>30</session-timeout><cookie-config><http-only>true</http-only><secure>true</secure></cookie-config>
</session-config>
12. HTTPS加密协议
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />
转载于:https://my.oschina.net/u/3100849/blog/895251
Tomcat参数配置相关推荐
- Tomcat 服务器server.xml,web.xml的关键参数配置
Tomcat 服务器server.xml的关键参数配置 说明:以下文字均以tomcat5.0.30为例进行. 1,配置tomcat服务器访问端口,只需配置Connector的port端口即可.Tomc ...
- RHEL5(CentOS)下nginx+php+mysql+tomcat+memchached配置全过程(转)
RHEL5(CentOS)下nginx+php+mysql+tomcat+memchached配置全过程 一.准备工作:SSH,telnet终端中文显示乱码解决办法vi /etc/sysconfig/ ...
- idea中tomcat环境配置及web项目创建的问题
tomcat环境配置 1.打开Run,进入 Edit Configurations 找到tomcat Server后 配置右侧application server的路径 看到以上效果 说明配置成功. ...
- tomcat 内存配置学习总结
修改 tomcat 内存 http://www.cnblogs.com/quietwalk/archive/2012/11/05/2755199.html 在Jetty 的VM参数中设置: -Xms ...
- Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交
在Java EE应用编程中Servlet是基础,JSP是建立在Servlet基础之上的,其他Web框架如Struts.WebWork和Spring MVC都是基于Servlet的.本文主要讲述MyEc ...
- tomcat +apache 配置集群
2019独角兽企业重金招聘Python工程师标准>>> APACHE2.2.25+TOMCAT6.0.37配置负载均衡 目标: 使用 apache 和 tomcat 配置一个可以应用 ...
- Tomcat - 常用配置
2019独角兽企业重金招聘Python工程师标准>>> Tomcat JNDI 配置 JNDI:Java Naming and Directory Interface Java命名和 ...
- Tomcat的配置和优化
转自:http://www.sysopen.cn/20165012/ 作者:yangc tomcat的内存使用配置,最大连接数配置. 如何修改配置呢,在/tomcat的/bin/下面有个脚本文件cat ...
- tomcat最大连接数_SpringBoot内嵌Tomcat自定义配置用法
针对框架内嵌的Tomcat,实现自定义配置用法: 1. 可以通过application.yml文件实现 2. 可以通过代码,实现自定义配置 技术点 1. .yml文件格式用法:配置Tomcat参数,框 ...
最新文章
- fzu 1901 next+脑洞
- CSS 特效 (教程还是英文的好)
- java非递归方式实现快速排序
- iOS面试用到的知识点和技术点--第二章
- shields 徽标_所有徽标看起来都一样
- IOS UITableView的点击展开隐藏功能的思路
- 移动语义-右值引用-完美转发-万字长文让你一探究竟
- hash和history两种模式的区别+SpringBoot的特定配置
- Node.js + Express + handlebars搭建个人网站(1)
- mongodb可视化工具 linux,Linux中安装启动MongoDB与可视化工具
- 图像相似度(信息学奥赛一本通-T1123)
- 经历了px、em之后,用 rem 适配屏幕
- 帝国CMS二次元COS漫展信息分享网站模板
- 禁用ios7 手势滑动返回功能
- 2018ICPC焦作D(几何)---Keiichi Tsuchiya the Drift King
- Word排版艺术—读书笔记
- 【数据挖掘】电商数据合集
- Linux入门学习(二) —— 怎么创建文件?怎么复制、剪切、删除文件?
- 优学院大学计算机基础课程答案,标准答案2020优学院形势与政策(全国版)2019-2020学年第一学期...
- Virtualbox上openSUSE 15.2 Leap安装guest additions
热门文章
- java两人猜数字游戏,java之猜数字游戏
- php怎么将表格导出到excel表格,php怎么将excel表格数据-php 怎么把数据导出到excel表格...
- android omx,android OMX相关4:编码输入线程和输出线程
- js获取浏览器高和宽的基本信息:屏幕信息
- 我的世界java版不会玩_我的世界:五张MC趣图,Java版玩家永远不懂基岩版玩家的痛...
- flutter图标按钮_Flutter开发第一个项目android studio 开发工具的使用说明
- 不间断电源ups标准_UPS不间断电源全套基础知识
- php 删除xls文件,使用PHPExcel将xls文件转换为xlsx时出错
- python开发应用程序错误怎么办_编程中遇到的Python错误和解决方法汇总整理
- 接近开关的初步测试 : DF-11N