其实,前面有些文章已经涉及到相关的内容了,比如:

  1. 快速学会Linux安装jdk和tomcat
  2. tomcat部署应用的三种方法

本文会详细介绍一下在tomcat安装完成之后一般需要更改及优化的参数,主要包括一下几点

  • 修改端口号
  • 为tomcat指定jdk
  • 优化tomcat启动内存等JVM参数
  • 添加管理员账号
  • 修改http端口的参数配置,启用线程池,启动new IO
  • 禁止tomcat输出日志到catalina.out

(1)端口号

一般情况下,一台linux机器上会部署不止一个tomcat,所以每个tomcat需要使用不同的端口,那么在默认安装完tomcat后,都需要修改哪些端口呢。其实只需要修改4个(如果不需要https则修改3个)

  1. shutdown端口,默认是8005
  2. http端口,默认是8080
  3. AJP端口,默认是8009
  4. 如果有https的需要,可以修改https端口,默认是8443,这个端口默认是注释掉的,如果需要修改,请取消注释

请保证修改的端口号唯一,即不与其他tomcat的端口重复,否则启动会报错的,具体修改过程可以参考前面的文章           快速学会Linux安装jdk和tomcat

(2)指定jdk

很多情况下,目标linux机器上的jdk并不一定合适我们的 tomcat,需要重新安装一个jdk,这样的话,linux系统上就存在不止一个jdk,但是只有一个默认的jdk,如果我们的tomcat需要使用默认的jdk的话,则不需要修改,否则的话,需要指定一个jdk,具体可以修改bin目录下的catalina.sh这个文件,在文件头部,添加指定的jdk,比如:


export JAVA_HOME=/usr/local/install/jdk1.6.0_45
export JRE_HOME=/usr/local/install/jdk1.6.0_45/jre

如图:

jdk

(3)优化启动内存

由于tomcat默认的启动内存很低为128M,是无法支撑很多大型项目,所以需要优化这个参数,主要是修改catalina.sh这个文件,在如下位置 添加内容:

JAVA_OPTS="-server -Xms4096m -Xmx4096m -XX:PermSize=256m -XX:MaxPermSize=256m -Xmn1024m -XX:SurvivorRatio=4  -XX:+DisableExplicitGC "

其中:
-server:启用jdk的server版本,默认为client模式,server模式会对代码做一些优化
-Xms:虚拟机初始化时的最小堆内存,上面设置的是4个G,具体根据机器配置 来配置
-Xmx:虚拟机可使用的最大堆内存。 #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
-XX:PermSize:设置非堆内存初始值,默认是物理内存的1/64。
-XX:MaxNewSize:新生代占整个堆内存的最大值。
-XX:MaxPermSize:Perm(俗称方法区)占整个堆内存的最大值,也称内存最大永久保留区域。
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6。
-XX:+DisableExplicitGC:表示禁用System.gc(),避免程序员误调用gc方法影响性能。

如图所示:
java_opts

其实,jvm的参数很多,这里都可以配置就不一一列举了,其实主要还是初始化的最小 堆内存和最大堆内存,这里有一个从网上找到的图,可以 参考一下:

jvm%e7%9a%84%e4%b8%80%e4%ba%9b%e9%85%8d%e7%bd%ae%e5%8f%82%e6%95%b0

 

(4)添加管理员账号

编辑/conf/tomcat-users.xml 文件,在文件最后</tomcat-users>内容之前添加如下内容:


<role rolename="manager-gui"/>
<user username="admin" password="admin" roles="manager-gui"/>

该内容表示:Tomcat 页面管理员的用户名为admin,密码为admin,有了这个管理员账号后,就可以在tomcat的启动内面内登陆到管理页面中

(5)修改http端口的参数配置,启用线程池,启动new IO

默认的情况下,http端口的线程池配置是注释掉的,如图:

threadPool

所以,当优化时,可以使用http端口的线程池,所以需要把原始的打开的http的Connector的标签注释掉,然后启动下面的那个

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="50"/>
<Connector port="10080" protocol="org.apache.coyote.http11.Http11NioProtocol"
 connectionTimeout="20000"
 redirectPort="8443"
 maxHttpHeaderSize="8192"
 enableLookups="false"
 acceptCount="800"
 maxKeepAliveRequests="-1"
 keepAliveTimeout="60000"/>

 

执行器Executor 线程池里面的参数:

maxThreads:tomcat可用于请求处理的最大线程数

minSpareThreads:tomcat初始线程数,即最小空闲线程数

 

连接器Connector里面参数:

executor:执行器的名字tomcatThreadPool,即上面的定义的Executor

port:http端口号,默认为8080,这里修改成了10080

protocol:协议,默认为HTTP/1.1,优化时,可以改成nio,即org.apache.coyote.http11.Http11NioProtocol

connectionTimeout:Connector接受一个连接后等待的时间(milliseconds),默认值是60000。

redirectPort:如果Connector的配置是支持非SSL的请求,当一个SSL请求到来时,服务器会自动的将请求重定位到redirectPort

maxHttpHeaderSize:HTTP请求、响应头信息的最大大小,默认是8192bytes

enableLookups:如果需要在调用request.getRemoteHost()方法时获取到客户端的机器名,则需要配置为true,如果配置为false,将会跳过DNS查询直接返回客户端机器的IP地址,通常为了提高性能,将此值设置为false,默认值是true;

acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数

maxKeepAliveRequests:maxKeepAliveRequests=”-1″,这个配置主要是保证tomcat一直启用http长连接,以提高REST调用性能。但是请注意,如果REST消费端不是持续的调用REST服务,则一直启用长连接未必是最好的做法。另外,一直启用长连接的方式一般不适合针对普通webapp,更适合这种类似rpc的场景。所以为了高性能,在tomcat中,dubbo REST应用和普通web应用最好不要混合部署,而应该用单独的实例。如果不是类似于dubbo这种提供rest风格的远程调用rpc,则这项配置默认就好,不用配置,否则最好设置为-1,启动http长连接。

keepAliveTimeout:在Connector关闭连接前,Connector为另外一个请求Keep Alive所等待的毫秒,默认值和 connectionTimeout 一样。

 

(6)禁止tomcat输出日志到catalina.out

在很多生产环境中,tomcat的logs目录中会产生大量的日志信息,日积月累就会造成存储的压力,因为毕竟大部分 应用程序都是用log4j或者logback等开源日志工作在单独的目录存储了自己的工程日志,所以tomcat里的日志就是另一份,而这一份 日志是可以清理的,并且不会造成日志丢失等情况,在真实线上,很多都是采用把tomcat的日志关掉来节省存储空间。具体操作方法就是修改   bin/catalina.sh,将CATALINA_OUT的输出目录换成黑洞目录/dev/null即可,具体如图

nocatalina

tomcat部署应用的三种方法

在JavaWeb的开发中,tomcat是最常用的web容器,使用tomcat部署web应用,常见的有三种方式,下面以我们在前面开发过的一个WebService的服务端为例(具体服务开...

阅读全文

JavaWeb开发(四)CXF webService 客户端开发(动态调用与wsdl2java生成)

前面三章分别介绍了: JavaWeb开发(一)框架搭建(使用Maven搭建JavaWeb工程) JavaWeb开发(二)框架搭建(给工程添加spring支持) JavaWeb开发(三)CXF ...

阅读全文

JavaWeb开发(三)CXF webService 服务端与客户端开发

前面两章分别介绍了: JavaWeb开发(一)框架搭建(使用Maven搭建JavaWeb工程) JavaWeb开发(二)框架搭建(给工程添加spring支持) 其中在第二章最后,我们...

阅读全文

欢迎留言