一、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"
五、一般生产环境简化配置说明
<Connector port="8080" protocol="HTTP/1.1"
maxHttpHeaderSize="8192" useBodyEncodingForURI="true"
maxThreads="1000" # maxThreads:tomcat可用于请求处理的最大线程数,默认是200
redirectPort="8443"
URIEncoding="utf-8"
enableLookups="false" # 关闭DNS查询
compression="on" # 打开gzip压缩功能
compressionMinSize="2048" # 启用压缩的输出内容大小,默认为2KB
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 哪些资源需要压缩
connectionTimeout="20000"
disableUploadTimeout="true"
/>
<Connector executor="tomcatThreadPool" # 配置线程池
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Host name="access1.net" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/record" docBase="/home/ecs/var/data/record/" debug="0" reloadable="true" crossContext="true"/>
# 部署项目 path:浏览器访问时的路径名
# docBase:web项目的WebRoot所在的路径,注意是WebRoot的路径,不是项目的路径,其实也就是编译后的项目。
# reloadble:设定项目有改动时,tomcat是否重新加载该项目
</Host>
转载于:https://blog.51cto.com/13689359/2324197