Tomcat 安全配置与性能优化
linux/centos解决Tomcat内存溢出
Tomcat配置SSL视频课程
JAVA技术和Tomcat入门及优化
tomcat配置ssl教程
Apache支持html等静态页面 tomcat支持jsp动态页面
不推荐编译安装 太麻烦
centos6.5 自带的如下
[root@zzx jvm]# yum list all |grep tomcat
apache-tomcat-apis.noarch 0.1-1.el6 base
glite-security-trustmanager-tomcat6.noarch 2.5.5-6.el6 epel
jakarta-commons-collections-tomcat5.noarch 3.2.1-3.5.el6_7 base
jakarta-commons-dbcp-tomcat5.noarch 1.2.1-13.9.el6 base
jakarta-commons-pool-tomcat5.x86_64 1.3-12.7.el6 base
jglobus-ssl-proxies-tomcat.noarch 2.1.0-2.el6 epel
tomcat.noarch 7.0.65-1.el6 epel
tomcat-admin-webapps.noarch 7.0.65-1.el6 epel
tomcat-docs-webapp.noarch 7.0.65-1.el6 epel
tomcat-el-2.2-api.noarch 7.0.65-1.el6 epel
tomcat-javadoc.noarch 7.0.65-1.el6 epel
tomcat-jsp-2.2-api.noarch 7.0.65-1.el6 epel
tomcat-jsvc.noarch 7.0.65-1.el6 epel
tomcat-lib.noarch 7.0.65-1.el6 epel
tomcat-native.x86_64 1.1.34-1.el6 epel
tomcat-servlet-3.0-api.noarch 7.0.65-1.el6 epel
tomcat-webapps.noarch 7.0.65-1.el6 epel
tomcat6.noarch 6.0.24-95.el6 base
tomcat6-admin-webapps.noarch 6.0.24-95.el6 base
tomcat6-docs-webapp.noarch 6.0.24-95.el6 base
tomcat6-el-2.1-api.noarch 6.0.24-95.el6 base
tomcat6-javadoc.noarch 6.0.24-95.el6 base
tomcat6-jsp-2.1-api.noarch 6.0.24-95.el6 base
tomcat6-lib.noarch 6.0.24-95.el6 base
tomcat6-servlet-2.5-api.noarch 6.0.24-95.el6 base
tomcat6-webapps.noarch 6.0.24-95.el6 base
tomcatjss.noarch 2.1.0-4.el6 base
documentation文档
Deployer部署器
extras其他组件
官网下载core核心包
解压 再ln tomcat9要配jdk1.8 用jdk1.7tomcat启动后无法监听端口
tar xf apache-tomcat-9.0.0.M9.tar.gz -C /usr/local
cd /usr/local
ln -sv apache-tomcat-9.0.0.M9 tomcat
cd tomcat bin下的catalina.sh 是核心脚本 tomcat就是catalina
conf下的server.xml是核心配置文件 tomcat-users.xml用户配置文件 管理账号密码 web.xml应用程序部署描述符(部署:讲一个web应用程序所依赖到的类装载进JVM)
catalina.properties 是catalina的属性配置文件 catalina.policy定义安全策略的(哪些能访问哪些不能访问的授权文件)
一般修改xml文件 其他文件不用修改
[root@zzx conf]# vim /etc/profile.d/tomcat.sh添加如下
[root@zzx conf]# . /etc/profile.d/tomcat.sh
[root@zzx ~]# catalina.sh version 其实就是执行/usr/local/tomcat/bin/version.sh 显示一些配置文件路径等
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/lib/jvm/jdk1.8.0_102/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
启动tomcat 或者 [root@zzx ~]# /usr/local/tomcat/bin/startup.sh
[root@zzx ~]# catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/lib/jvm/jdk1.8.0_102/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@zzx ~]# jps
5082 Jps
5052 Bootstrap
[root@zzx ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1911/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1801/cupsd
tcp 0 0 :::8080 :::* LISTEN 5052/java
tcp 0 0 :::22 :::* LISTEN 1911/sshd
tcp 0 0 ::1:631 :::* LISTEN 1801/cupsd
tcp 0 0 ::1:25 :::* LISTEN 2036/master
tcp 0 0 ::1:8005 :::* LISTEN 5052/java
tcp 0 0 :::8009 :::* LISTEN 5052/java
启动后查看日志
[root@zzx logs]# ls /usr/local/tomcat/logs/
catalina.2016-08-08.log
index.html
manager.2016-08-08.log
catalina.out
localhost.2016-08-08.log
host-manager.2016-08-08.log
localhost_access_log.2016-08-08.txt
[root@zzx logs]# cat catalina.2016-08-08.log
webapps/ROOT 是默认访问的位置
[root@zzx webapps]# ls
docs examples host-manager manager ROOT
每个文件夹下都有WEB-INF WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录(存放放应用程序的私有资源信息)。
[root@zzx WEB-INF]# ls
web.xml 应用程序的部署描述服务文件
[root@zzx tomcat]# cd work/Catalina/localhost/
docs/ examples/ host-manager/ manager/ ROOT/ work目录 jsp转java再编译成.class就在这个“车间”进行
第一次访问页面会比较慢 java转成class 后面用户再访问就比较快了 直接访问class
添加service启动功能
vi /etc/rc.d/init.d/tomcat 内容如下
#!/bin/sh
CATALINA_HOME=/usr/local/tomcat
JAVA_HOME=/usr/lib/jvm/jdk1.8.0_102
export CATALINA_HOME JAVA_HOME
#export CATALINA_OPTS="-Xms128m -Xmx256m" #设置堆内存最小最大值 根据实际内存可以设置更大>一些
exec $CATALINA_HOME/bin/catalina.sh $*
[root@zzx init.d]# chmod +x tomcat 添加执行权限
service tomcat stop
进程配置文件测试 要先stop
service tomcat configtest
tomcat服务器web访问 http://localhost:8080/manager/html提示输入账号密码 这个账号密码设置如下
在<tomcat-users> </tomcat-users>之间添加代码
<role rolename="manager-gui"/>
<user username="admin" password="admin" roles="manager-gui"/>
当前空闲内存、当前总内存、最大可使用内存三个数据 内存修改看下面
优化
1修改内存
在catalina.sh文件中,找到cygwin=false,在这一行的前面加入参数,具体如下(一般最大堆 最小堆设置的最好一样。)
# vi TOMCAT_HOME/bin/catalina.sh
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"
堆内存越大,垃圾回收频率就低,但是一旦垃圾回收,需要的时间就越多。
打个比方,桌上一堆食物,你是吃完一个,然后把袋子扔到垃圾桶;还是全部吃完,再收拾桌面。2个比较,把袋子扔到垃圾桶就一丁点时间,但是次数多;一次过收拾桌面就一次,但是你得慢慢收拾。
另外需要考虑的是Java提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾可以接受的速度与应用有关,应该通过分析实际的垃圾收集的时间和频率来调整。如果堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低。如果你把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。在基准测试的时候,为保证最好的性能,要把堆的大小设大,保证垃圾收集不在整个基准测试的过程中出现。 如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过 3-5 秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详细输出,研究 垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的 80% 作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。
一个要注意的地方:建议把内存的最高值跟最低值的差值缩小,不然会浪费很多内存的, 最低值加大 ,最高值可以随便设,但是要根据实际的物理内存 ,如果内存设置太大了,比如设置了512M最大内存,但如果没有512M可用内存,Tomcat就不能启动,还有可能存在内存被系统回收,终止进程的情况。
再补充一个,JVM还有个32G现象,也就是当堆内存设置为大于32-37G的时候,性能会小于设置成32G,35G内存不如32G内存。也是同样说明,堆内存不是越大越好。
2开启gzip 修改server.xml添加如下粗体字的内容 然后重启tomcat,server tomcat stop/start 然后检测用代码 curl -I -H "Accept-Encoding: gzip,deflate" http://192.168.1.112:8080/
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
executor="tomcatThreadPool"
URIEncoding="utf-8"
compression="on"
compressionMinSize="50"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />
配置SSL
[root@zzx jdk1.8.0_102]# cd $JAVA_HOME/bin
[root@zzx bin]# ./keytool -genkey -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/conf/.keystore
Enter keystore password:
correct?
[no]: y 这里注意用y就行
后面还有一个密码
Enter key password for <tomcat>
(RETURN if same as keystore password): 直接回车让密码和前面的一样
修改tomcat配置文件
[root@zzx jdk1.8.0_102]# cd /usr/local/tomcat/conf/
[root@zzx conf]# pwd
/usr/local/tomcat/conf
[root@zzx conf]# vi server.xml 下面这个8443去掉注释 修改如下 不同版本可能略有差别 这里搞了半天 人品!!
<Connector port="8443" protocol="HTTP/1.1"
maxThreads="150" SSLEnabled="true"
scheme="https" secure="true" clientAuth="false"
keystoreFile="/usr/local/tomcat/conf/.keystore" keystorePass="mima" sslProtocol="TLS"/>
重启tomcat
打开浏览器输入 https://192.168.1.112:8443/ 就可以访问了
多版本共存
安装了tomcat6和tomcat9要想共存就把端口分开不要都用8080就可以了,就是修改其中一个的端口号,比如8080改成8089 keystore可以共用 8443改9443 8005改9005 8009 改 9009 整个配置文件中的端口号都要改