Tomcat配置与性能调优

一、Tomcat文件详解

日志文件logs

catalina.out

catalina.out其实是tomcat的标准输出(stdout)和标准出错(stderr),在tomcat的启动脚本里指定的,没有修改的话stdout和stderr会重定向到这里。

catalina.-.log

访问日志信息,访问的时间、IP、访问的资料等。

localhost.-.log

运行日志信息,运行异常、错误日志等。

配置文件conf

server.xml 主要配置文件。

web.xml 缺省的web app配置,WEB-INF/web.xml会覆盖该配置。

tomcat-users.xml 用户配置文件。

二、安全配置

修改shutdown命令

# vim server.xml
<Server port="8005" shutdown="SHUTDOWN">
SHUTDOWN修改为其他字符串

修改用户名、密码

# vim tomcat-users.xml

添加以下内容

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

屏蔽后台管理入口

方法1.控制用户和权限,废掉要管理权限的用户。
方法2.将conf/Catalina/localhost/manager.xml更名。

配置403,404,500错误页面

默认情况下,报出HTTP错误的时候会暴露tomcat版本号,需要重新定义错误跳转页面。

三、项目部署

第一种方法(直接放入 webapps 目录)

编写并编译好的web项目(如果是 eclipse,将项目打成 war 包),放入到 webapps 中

第二种方法(修改 conf/server.xml 文件 )

# vim server.xml

在<Host> </Host>标签之间输入项目配置信息

<Context path="/Web" docBase="/Wh_k/test" reloadable="true" />

path:浏览器访问时的路径名
docBase:web项目的WebRoot所在的路径,注意是WebRoot的路径,不是项目的路径,其实也就是编译后的项目。
reloadble:设定项目有改动时,tomcat是否重新加载该项目

第三种方法(conf\Catalina\localhost )

# touch test.xml

加入下面配置语句

<Context  docBase="/Wh_k/test" reloadable="true" />

总结

① 第一种方法我们需要将编译好的项目重新 copy 到 webapps 目录。

② 第二种方法直接在 server.xml 文件中配置,从 tomcat5.0版本后,server.xml 文件作为启动的主要配置文件,Tomcat 启动后便不会再读取这个文件,因此无法再 tomcat 服务启动后发布 web 项目。

③ 第三种方法是通常使用的方法,每个项目分开配置,tomcat 将以\conf\Catalina\localhost 目录下的 xml 文件的文件名作为 web 应用的上下文路径,而不再理会 <Context>中配置的 path 路径,在配置的时候,可以不用填写 path。

四、Tomcat性能调优

1、优化内存JDK(最直接优化方式)

主要是对 tomcat 启动参数优化,在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数

参数说明:

-server 启用jdk 的 server 版
-Xms java虚拟机初始化时的最小内存
-Xmx java虚拟机可使用的最大内存
-XX: PermSize 内存永久保留区域
-XX:MaxNewSize:新生代占整个堆内存的最大值。
-XX:MaxPermSize 内存最大永久保留区域

配置示例

# vim catalina.sh
添加以下内容:
JAVA_OPTS='-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'

错误提示

1)错误提示:java.lang.OutOfMemoryError:Java heap space

Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误,Outof Memory(系统内存不足)的异常,从而导致客户端显示500错误,一般调整Tomcat的-Xms和-Xmx即可解决问题,通常将-Xms和-Xmx设置成一样,堆的最大值设置为物理可用内存的最大值的80%。
set JAVA_OPTS=-Xms512m-Xmx512m

2)错误提示:java.lang.OutOfMemoryError: PermGenspace

PermGenspace的全称是Permanent Generationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行precompile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。解决方法:
setJAVA_OPTS=-XX:PermSize=128M

3)在使用-Xms和-Xmx调整tomcat的堆大小时,还需要考虑垃圾回收机制。如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过3-5 秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详细输出,研究垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的 80% 作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。

2、优化连接数

2.1.优化线程数

# vim server.xml 

增加maxThreads和acceptCount属性(使acceptCount大于等于maxThreads),如下:

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />

其中:

• maxThreads:tomcat可用于请求处理的最大线程数,默认是200
• minSpareThreads:tomcat初始线程数,即最小空闲线程数
• maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭
• acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理.默认100

2.2.使用线程池

# vim server.xml
增加executor节点,然后配置connector的executor属性

<Executor name="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/>
<Connector port="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>
其中:
• namePrefix:线程池中线程的命名前缀
• maxThreads:线程池的最大线程数
• minSpareThreads:线程池的最小空闲线程数
• maxIdleTime:超过最小空闲线程数时,多的线程会等待这个时间长度,然后关闭
• threadPriority:线程优先级

3、关闭DNS查询

enableLookups=”false”

4、配置gzip压缩(HTTP压缩)功能

# vim server.xml
●compression="on"   打开压缩功能
●compressionMinSize="2048"启用压缩的输出内容大小,默认为2KB
●noCompressionUserAgents="gozilla,traviata" 对于以下的浏览器,不启用压缩
●compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些资源类型需要压缩

配置示例如下:

<Connector port="9999" protocol="HTTP/1.1" connectionTimeout="20000"
    redirectPort="8443" acceptCount="500" maxThreads="400" enableLookups="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>

5、改变运行模式

tomcat的运行模式有3种:BIO NIO APR

bio

默认的模式,同步并阻塞,服务器实现模式为一个连接一个线程,性能非常低下,没有经过任何优化处理和支持。

nio

基于缓冲区、并能提供非阻塞I/O操作的Java API,同一个线程处理多个connection(多路复用),Tomcat 8.x默认情况下全部是运行在nio模式下

想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为

<Connector port=”9999″ protocol=”org.apache.coyote.http11.Http11NioProtocol” connectionTimeout=”20000″ URIEncoding=”UTF-8″ useBodyEncodingForURI=”true” enableLookups=”false” redirectPort=”8443″ />

启动后,就可以生效。

apr

apr的本质就是使用jni技术调用操作系统底层的IO接口,安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能。生产环境下用apr是非常必要的。

# yum -y install openssl-devel
# yum -y install apr-devel
# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-connectors/native/1.2.18/source/tomcat-native-1.2.18-src.tar.gz
# tar -xzf tomcat-native-1.2.18-src.tar.gz
# cd tomcat-native-1.2.18-src/native
# ./configure && make && make install

将默认的protocol="HTTP/1.1"修改为protocol="org.apache.coyote.http11.Http11AprProtocol"

引入apr:配置catalina.sh文件
在原有变量JAVA_OPTS后面追加一行新的配置即可:JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章