tomcat优化

tomcat内存优化

Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数。在 配置文件中的102行添加就行

注意:堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。
JAVA_OPTS参数说明
   -server 启用jdk 的 server 版;
  -Xms java虚拟机初始化时的最小内存;
   -Xmx java虚拟机可使用的最大内存;
   -XX: PermSize 内存永久保留区域
   -XX:MaxPermSize 内存最大永久保留区域

一般设置-Xms,-Xmx相等以避免在每次GC后调整堆的大小,因为默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制

现公司服务器内存一般都可以加到最大2G ,所以可以采取以下配置:
  JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’
  配置完成后可重启Tomcat
  首先查看Tomcat 进程号:
  ps aux | grep tomcat #查看tomcat的主进程号
  查看参数是否生效
  jmap -heap 12222 #12222是主进程号

堆(Heap)和非堆(Non-heap)内存解释

https://www.cnblogs.com/centos2017/p/9956432.html




## tomcat运行模式的优化

`Tomcat Connector(连接器)有三种运行模式:BIO NIO APR`

**BIO(blocking I/O)**

是基于JAVA的HTTP/1.1连接器,Tomcat7以下版本在默认情况下是以bio模式运行的。一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。(**Tomcat7** 或以下,在 **Linux** 系统中默认使用这种方式)一个线程处理一个请求,缺点:并发量高时,线程数较多,浪费资源
<Connector port="9090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

#### **NIO(new I/O)**

是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcat以nio模式来运行只需要在Tomcat安装目录/conf/server.xml 中将对应的中protocol的属性值改为 org.apache.coyote.http11.Http11NioProtocol即可利用 Java 的异步请求 IO 处理,可以通过少量的线程处理大量的请求。

**Tomcat8**: 以上版本在 **Linux** 系统中,默认使用的就是NIO模式,不需要额外修改,**Tomcat7**必须修改Connector配置来启动
<Connector port="9090" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />

APR (Apache Portable Runtime/Apache可移植运行时) ( 安装配置过程相对复杂)

APR(Apache Portable Run-time libraries)简单理解,就是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和响应性能, 也是Tomcat运行高并发应用的首选模式。APR是使用原生C语言编写的非堵塞I/O,利用了操作系统的网络连接功能,速度很快。但是需先安装apr和native,能大幅度提升性能,不亚于魔兽开局爆高科技兵种,威力强大

wget http://mirror.bit.edu.cn/apache//apr/apr-1.7.0.tar.gz wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
wget http://mirror.bit.edu.cn/apache//apr/apr-iconv-1.2.2.tar.gz yum install expat-devel openssl gcc

具体安装部署: https://my.oschina.net/boonya/blog/3019704




### tomcat执行器(线程池)的优化
开启线程池:打开server.xml中关于线程池的配置
#一般情况下我们不使用Executor开启线程池,我们在Connector上直接配置
$ vim /usr/local/tomcat/conf/server.xml
<Connector executor="tomcatThreadPool"   
    port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"   #使用NIO
    connectionTimeout="40000" 
    keepAliveTimeout="30000"
    maxKeepAliveRequests="8000"
    maxHttpHeaderSize="8192"
    URIEncoding="UTF-8"
    enableLookups="false"
    acceptCount="1000"
    disableUploadTimeout="true"
    redirectPort="8443" 
    compression="on"
    compressionMinSize="1024"
    noCompressionUserAgents="gozilla,traviata"              
    compressableMimeType="text/html,image/gif,image/jpeg,text/css,application/" />

参数解释:
port:服务端口TCP端口,默认值为8089;


connectionTimeout:设置连接的超时值,单位毫秒,默认值为60000;

keepAliveTimeout:当http使用keep-alive时在tcp的一个连接中可以接收多个request,意思就是两个request间的时间限定最大保持时间,超过这个时间,连接将断开,单位毫秒,默认使用的是connectionTimeout的时间;

maxKeepAliveRequests:在服务器关闭前,该连接最大支持的请求数,超过该请求数的连接也将被关闭,设置为1表示禁用,设置为-1表示不限个数,默认值为100;

maxHttpHeaderSize:HTTP请求和响应头的最大量,单位字节,默认值为4096字节;

URIEncoding:指定tomcat的url编码格式;

enableLookups:调用request、getRemoteHost()执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址,DNS反查很耗时间

acceptCount:当所以可以处理的线程正在使用的时候,在队列中排队请求的最大连接数,当队列已满,所有请求都将被拒绝,默认值为100;

disableUploadTimeout:上传时是否使用超时机制,以是servlet有较长时间来完成它的执行,默认值为false;

redirectPort:如连接器不支持SSL请求,如收到SSL请求,Catalina容器将会自动重定向指定的端口号,让其进行处理;

compression:是否对响应的数据进行压缩,off:禁止压缩,on:允许压缩(文本将被压缩),force:表示所有情况下都进行压缩,默认值为off;

compressionMinSize:启用压缩的输出内容大小,默认为2KB

noCompressionUserAgents:不启用压缩的浏览器;

compressableMineType:MIME的列表,默认以逗号分隔,默认值为text/html,text/xml,text/plain;




## tomcat版本隐藏
为了避免黑客针对某些版本进行攻击,因此我们需要隐藏或者伪装 Tomcat 的版本信息。默认 Tomcat 的版本信息如下:

针对该信息的显示是由一个jar包控制的,该jar包存放在 Tomcat 安装目录下的lib目录下,名称为catalina.jar。

我们可以通过 jar xf 命令解压这个 jar 包会得到两个目录 META-INF 和 org ,通过修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo 字段来实现来更改我们tomcat的版本信息。

设置session失效时长

我们都知道,HTTP协议本身是无状态的(Stateless),这对于一些简单的页面展示来说,功能足够,不受影响。而对于日渐复杂的动态页面、应用,各种需要登录认证等场景,就力不从心了。试想对于一个已经登录的用户仍然一次次的提示登录,会是什么感受呢?而为了保持客户端和服务端交互状态,可以采取session失效时长

Tomcat的可以在以下几个地方设置会话超时:

web级别:

在conf /web.xml文件中
< session-config >
< session-timeout > 30 </ session-timeout > #默认就是30分钟,以分为单位
</ session-config >

webapp级别:

在webapp中的WEB-INF /web.xm
   < session-config >  
       < session-timeout > 30 </ session-timeout >   #以分为单位
   </ session-config > 

应用程序代码中:硬编码

  session.setMaxInactiveInterval(30 * 60 ); //以秒为单位  

优先级,越细粒度优先级越高,也就是3> 2> 1

还要一种配置,但现在比较少见了,因为需要将上下文配置在server.xml里:

这就是修改 conf /server.xml配置文件钟,是以秒为单位
< Context path = “/ test” docBase = “/ home / httpd / html / test”
defaultSessionTimeOut = “3600” isWARExpanded = “true”
isWARValidated = “false” isInvokerEnabled = “true”
isWorkDirPersistent = “false” />




## 禁用AJP连接器实现动静分离
#Tomcat 服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客 户。默认情况下,Tomcat在server.xml中配置了两种连接器,一种使用ajp,要和apache结合使用,一种使用http。当使用http 时,可以限制ajp端口访问,在于防止线下测试流量被mod_jk转发至线上tomcat服务器。可以通过iptables规则限制ajp端口的访问,或 者直接将改行注释。

$ vim conf/server.xml
    <!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->
    
# Apache基金下的服务器来做静态资源处理的,而这部分需要花费大量时间,当用nginx和tomcat做企业级集群的时候,需要禁用掉AJP协议。

#nginx加tomcat实现动静分离
web客户1访问tomcat服务器的 资源index.jsp 是可以直接访问的,如果我们访问的是静态资源,tomcat是不方便处理的它会把这些静态资源返回给Apache服务器,由他们返回给用户,所以tomcat服务器相对于nginx服务器在处理静态资源上效率较低。因此我们的网站服务器一般是Nginx+tomcat,nginx负责处理静态资源,因此AJP 协议我们在使用nginx+tomcat架构时可以关闭它来进行效率的优化。

文件列表访问控制

conf/web.xml文件中的default部分listings的配置必须为false,false为不列出目录文件,true为允许列出,默认为false。

<init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>



### 访问日志格式规范
# 开启Referer和User-Agetn是为了一旦出现安全问题能够更好的根据日志进行排查
 $ vim conf/server.xml
  <Host name="23.83.xx.xx"  appBase="webapps"
         unpackWARs="true" autoDeploy="true">
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
              prefix="localhost_access_log" suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b %{Referer}i %{User-Agent}i %D" />
       <Context docBase="/usr/local/tomcat/webapps/FWYsWeb" path=""  reloadable="true"/>
       <Context docBase="/usr/local/tomcat/webapps/FWYsWeb" path="/FWYsWeb"  reloadable="true"/>
  </Host>

配置管理员账户

进入conf目录下,打开tomcat-users.xml,在首尾元素中间加入:

<role rolename="manager"/>
<role rolename="manager-gui"/> #允许访问html接口(即URL路径为/manager/html/*)
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>

还有很多权限配置可以百度

访问:http://ip地址:8080/manager/status 就会出现监控页面




























©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 常见的http服务器有apache,nginx,iis,tomcat等。HTTP服务器本质上也是一种应用程序——它...
    可乐爱上咖啡阅读 3,971评论 1 49
  • 文章针对linux操作系统。 图片中,html页面,在tomcat安装目录下。 一、内存优化 linux系...
    撒啊啊啊空间阅读 675评论 0 1
  • 本文档是身边一些朋友、技术大佬之前分享的一些笔记,记录了 Tomcat 优化方法,笔记较多而且比较杂乱,经过整理、...
    zwb_jianshu阅读 736评论 0 1
  • http://blog.csdn.net/wuliu_forever/article/details/526071...
    鱼仔_1625阅读 961评论 0 1
  • 钟意了一个女仔,以前从未试过有呢种感觉,居然好想见到距
    斯_395d阅读 146评论 0 0