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参数配置相关推荐

  1. Tomcat 服务器server.xml,web.xml的关键参数配置

    Tomcat 服务器server.xml的关键参数配置 说明:以下文字均以tomcat5.0.30为例进行. 1,配置tomcat服务器访问端口,只需配置Connector的port端口即可.Tomc ...

  2. RHEL5(CentOS)下nginx+php+mysql+tomcat+memchached配置全过程(转)

    RHEL5(CentOS)下nginx+php+mysql+tomcat+memchached配置全过程 一.准备工作:SSH,telnet终端中文显示乱码解决办法vi /etc/sysconfig/ ...

  3. idea中tomcat环境配置及web项目创建的问题

    tomcat环境配置 1.打开Run,进入 Edit Configurations 找到tomcat Server后 配置右侧application server的路径 看到以上效果 说明配置成功. ...

  4. tomcat 内存配置学习总结

    修改 tomcat 内存 http://www.cnblogs.com/quietwalk/archive/2012/11/05/2755199.html 在Jetty 的VM参数中设置:  -Xms ...

  5. Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交

    在Java EE应用编程中Servlet是基础,JSP是建立在Servlet基础之上的,其他Web框架如Struts.WebWork和Spring MVC都是基于Servlet的.本文主要讲述MyEc ...

  6. tomcat +apache 配置集群

    2019独角兽企业重金招聘Python工程师标准>>> APACHE2.2.25+TOMCAT6.0.37配置负载均衡 目标: 使用 apache 和 tomcat 配置一个可以应用 ...

  7. Tomcat - 常用配置

    2019独角兽企业重金招聘Python工程师标准>>> Tomcat JNDI 配置 JNDI:Java Naming and Directory Interface Java命名和 ...

  8. Tomcat的配置和优化

    转自:http://www.sysopen.cn/20165012/ 作者:yangc tomcat的内存使用配置,最大连接数配置. 如何修改配置呢,在/tomcat的/bin/下面有个脚本文件cat ...

  9. tomcat最大连接数_SpringBoot内嵌Tomcat自定义配置用法

    针对框架内嵌的Tomcat,实现自定义配置用法: 1. 可以通过application.yml文件实现 2. 可以通过代码,实现自定义配置 技术点 1. .yml文件格式用法:配置Tomcat参数,框 ...

最新文章

  1. fzu 1901 next+脑洞
  2. CSS 特效 (教程还是英文的好)
  3. java非递归方式实现快速排序
  4. iOS面试用到的知识点和技术点--第二章
  5. shields 徽标_所有徽标看起来都一样
  6. IOS UITableView的点击展开隐藏功能的思路
  7. 移动语义-右值引用-完美转发-万字长文让你一探究竟
  8. hash和history两种模式的区别+SpringBoot的特定配置
  9. Node.js + Express + handlebars搭建个人网站(1)
  10. mongodb可视化工具 linux,Linux中安装启动MongoDB与可视化工具
  11. 图像相似度(信息学奥赛一本通-T1123)
  12. 经历了px、em之后,用 rem 适配屏幕
  13. 帝国CMS二次元COS漫展信息分享网站模板
  14. 禁用ios7 手势滑动返回功能
  15. 2018ICPC焦作D(几何)---Keiichi Tsuchiya the Drift King
  16. Word排版艺术—读书笔记
  17. 【数据挖掘】电商数据合集
  18. Linux入门学习(二) —— 怎么创建文件?怎么复制、剪切、删除文件?
  19. 优学院大学计算机基础课程答案,标准答案2020优学院形势与政策(全国版)2019-2020学年第一学期...
  20. Virtualbox上openSUSE 15.2 Leap安装guest additions

热门文章

  1. java两人猜数字游戏,java之猜数字游戏
  2. php怎么将表格导出到excel表格,php怎么将excel表格数据-php 怎么把数据导出到excel表格...
  3. android omx,android OMX相关4:编码输入线程和输出线程
  4. js获取浏览器高和宽的基本信息:屏幕信息
  5. 我的世界java版不会玩_我的世界:五张MC趣图,Java版玩家永远不懂基岩版玩家的痛...
  6. flutter图标按钮_Flutter开发第一个项目android studio 开发工具的使用说明
  7. 不间断电源ups标准_UPS不间断电源全套基础知识
  8. php 删除xls文件,使用PHPExcel将xls文件转换为xlsx时出错
  9. python开发应用程序错误怎么办_编程中遇到的Python错误和解决方法汇总整理
  10. 接近开关的初步测试 : DF-11N