Tomcat必会的企业级配置调优
Tomcat服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
======== 完美的分割线 ========
1.什么是Tomcat?
1)Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP2.0 规范。
2)因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
3)Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
4)应用:
对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。当配置正确时,Apache为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。
5)Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为9.0。
6)Apache软件基金会:http://apache.org/index.html#projects-list
2.Tomcat版本及其区别介绍
TOMCAT版本的区别主要反映在两个方面:
1)Tomcat本身的技术演进,包括性能的不断提高,功能的增加增强,甚至于重构
2)因为Tomcat本身是块Servlet容器的试验田,所以他的版本是跟Servlet和JSP的规范一起发展
3)参考文档:http://tomcat.apache.org/whichversion.html
3.Tomcat的安装和使用
3.1.环境准备
1)关闭防火墙和selinux等软件
/etc/init.d/iptables stop
getenforce
3.2.安装jdk支持
# tomcat运行需要jdk的Java环境,且版本最好对应,防止不兼容
# jdk下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
1)进入安装目录,下载jdk包到服务器(jdk-8u181-linux-x64.rpm)
mkdir -p /server/tools
cd /server/tools/
2)查看已安装的jdk,卸载已安装的jdk
rpm -qa | grep jdk
rpm -e --nodeps jdk
3)安装新下载的jdk
rpm -ivh jdk-8u181-linux-x64.rpm
java -version
4)配置环境变量脚本
echo '#!/bin/sh' >>/etc/profile.d/java.sh
echo "# This is JAVA profile by zhaoshuai in $(date +%F)." >>/etc/profile.d/java.sh
echo 'export JAVA_HOME=/usr/java/latest' >>/etc/profile.d/java.sh
echo 'export PATH=$JAVA_HOME/bin:$PATH' >>/etc/profile.d/java.sh
cat /etc/profile.d/java.sh
# 应用变量
source /etc/profile.d/java.sh
echo $JAVA_HOME
echo $PATH
# 检查确认安装结果
[root@tomcat-srv ~]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
3.3.安装tomcat
# jdk1.8对应tomcat可以选择tomcat8的版本,以下为下载地址:
http://mirrors.hust.edu.cn/apache/tomcat/
# 目前tomcat8有两个在维护的最新版本:8.0和8.5,我这里使用8.5的
1)下载解压安装tomcat8
wget http://124.202.164.6/files/404800000C94EC02/mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.34/bin/apache-tomcat-8.5.34.tar.gz
tar xf apache-tomcat-8.5.34.tar.gz
mv apache-tomcat-8.5.34 /usr/local/tomcat1
2)启动tomcat8
/usr/local/tomcat1/bin/startup.sh # 启动tomcat
tail -f /usr/local/tomcat1/logs/catalina.out # 查看tomcat日志
3)检查启动是否成功
[root@tomcat-srv tools]# netstat -anptl |grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 21798/java
# 也可以通过浏览器访问:http://ip:8080,可以看到以下页面
# tomcat自带的启动和停止脚本
/usr/local/tomcat1/bin/ # 脚本目录
startup.sh # 启动tomcat
shutdown.sh # 停止tomcat
# 查看tomcat启动日志
# 出现“Server startup in 1128 ms”等字眼表示启动成功
----------------------------------------
[root@tomcat-srv tools]# tail -f /usr/local/tomcat1/logs/catalina.out
14-Sep-2018 03:41:01.727 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat1/webapps/docs]
14-Sep-2018 03:41:01.751 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat1/webapps/docs] has finished in [23] ms
14-Sep-2018 03:41:01.751 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat1/webapps/examples]
14-Sep-2018 03:41:02.107 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat1/webapps/examples] has finished in [356] ms
14-Sep-2018 03:41:02.107 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat1/webapps/host-manager]
14-Sep-2018 03:41:02.136 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat1/webapps/host-manager] has finished in [29] ms
14-Sep-2018 03:41:02.136 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat1/webapps/manager]
14-Sep-2018 03:41:02.193 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat1/webapps/manager] has finished in [57] ms
14-Sep-2018 03:41:02.213 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
14-Sep-2018 03:41:02.278 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 1128 ms
# 实际测试生产环境中shutdown.是脚本可能无法正常停掉tomcat进程,可以自己定义一些脚本用于启动停止和更新tomcat项目
4.tomcat的配置和优化
# tomcat主配置文件/usr/local/tomcat1/conf/server.xml
4.1.修改tomcat默认的项目根目录
# 默认的项目根目录为tomcat目录下的"webapps/ROOT",为了使用方便一般会修改为其他目录
# 在150行左右,Host标签里
vim /usr/local/tomcat1/conf/server.xml
--------------------------------------
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="false">
</Host>
--------------------------------------
# 在后面添加以下内容,修改为需要的目录
<Context path="" docBase="/usr/local/tomcat1/www.web.com" workDir="/usr/local/tomcat1/work/" reloadable="false"/>
# 之后将Java项目放到/usr/local/tomcat1/www.web.com里面启动tomcat即可
4.2.修改tomcat默认端口
# 如果希望在同一台服务器运行多个项目且不希望各个tomcat互相影响,就需要修改tomcat的默认端口,防止复制后的tomcat出现端口冲突的问题
# 在Service标签里,大约69行的Connector标签里
vim /usr/local/tomcat1/conf/server.xml
--------------------------------------
<Connector port="" protocol="HTTP/1.1"
connectionTimeout="" # connectionTimeout指定超时的时间数(单位毫秒)
redirectPort="" />
--------------------------------------
# 将8080修改为需要的端口,例如:
tomcat1:8081
tomcat2:8082
tomcat3:8083
......
# 该Connector字段可以使用的其他的一些配置参数
maxThreads="" # tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
minSpareThreads="" # 初始化时创建的线程数
acceptCount="" # 当所有可以使用的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
maxKeepAliveRequests="" # 表示该连接最大支持的请求数。超过该请求数的连接将被关闭(此时就会返回一个Connection: close头给客户端)。
URIEncoding="UTF-8" # 指定字符集
redirectPort="" # 服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
# 其他可能引起冲突的端口8005和8009:
8005端口:tomcat1可以修改为8071
shutdown.sh在终止Tomcat服务器运行时,发给Tomcat服务器的shutdown监听端口的字符串.该属性必须设置,
8009端口:tomcat1可以修改为8091
4.3.tomcat开启调试端口
# 编辑catalina.sh文件,在第98行,增加配置开启调试端口(注意端口不要大于65535,否则无法启动)
vim /usr/local/tomcat1/bin/catalina.sh
-----------------------------------
# made for debug port by zhaoshuai
declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081"
-----------------------------------
4.4.tomcat开启jvm监控端口
# tomcat性能调试可以用到
vim /usr/local/tomcat1/bin/catalina.sh
-----------------------------------
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=60001" # 远程监控端口
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
-----------------------------------
4.5.tomcat初始化内存配置
vim /usr/local/tomcat1/bin/catalina.sh
-----------------------------------
# made for memory by zhaoshuai
JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m" # 初始化调用内存
-----------------------------------
# 常用内存分配参数简介:
-server:一定要作为第一个参数,在多个CPU时性能佳
-Xms:初始堆内存Heap大小,tomcat启动时使用的最小内存,cpu性能高时此值应设的大一些
-Xmx:初始堆内存heap最大值,tomcat启动时可以使用的最大内存
# 上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小
-XX:PermSize:设定内存的永久保存区域,全称为permanent size(持久化内存)
-XX:MaxPermSize:设定最大内存的永久保存区域
-XX:newSize:表示新生代初始内存的大小,应该小于-Xms的值;
-XX:MaxnewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值;
-Xmn:这个参数是对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn,很方便,但是这个参数是在JDK1.4版本以后才使用的。
-Xss:每个线程的Stack大小
-Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认512k
+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
-XX:+UseParNewGC :缩短minor收集的时间
-XX:+UseConcMarkSweepGC :缩短major收集的时间
4.6.tomcat开启崩溃日志
# 可以与上面的调试端口,性能监控端口一起使用,会消耗一定的系统资源
vim /usr/local/tomcat1/bin/catalina.sh
-----------------------------------
declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=80811 -XX:+PrintFlagsFinal -XX:+PrintConcurrentLocks -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat1/logs/heap.bin -Xloggc:/usr/local/tomcat1/logs/gc.log -XX:ErrorFile=/usr/local/tomcat1/logs/error.log -Dcom.sun.management.jmxremote.port=60001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
-----------------------------------
4.7.tomcat获取用户IP地址
# 160行左右,Host标签,前面有负载均衡的时候,获取真实IP可以修改为下面的配置
vim /usr/local/tomcat1/conf/server.xml
-----------------------------------
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%{X-Forwarded-For}i %h %l %u %t %r %s %b" />
-----------------------------------
======== 完毕,呵呵呵呵 ========
Tomcat必会的企业级配置调优的更多相关文章
- tomcat配置调优与安全总结
http://vekergu.blog.51cto.com/9966832/1672931 tomcat配置调优与安全总结 作为运维,避免不了与tomcat打交道,然而作者发现网络上关于tomcat配 ...
- (转)Tomcat配置调优与安全总结
tomcat配置调优与安全总结 作为运维,避免不了与tomcat打交道,然而作者发现网络上关于tomcat配置和调优安全的文章非常散,通过参考各位大神的相关技术文档,根据作者对tomcat的运维经验, ...
- Linux下jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案
Linux下的jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案问题linux的jetty下发布程序后再启动jetty服务时 ...
- Spark面试题(八)——Spark的Shuffle配置调优
Spark系列面试题 Spark面试题(一) Spark面试题(二) Spark面试题(三) Spark面试题(四) Spark面试题(五)--数据倾斜调优 Spark面试题(六)--Spark资源调 ...
- 【 Tomcat 】tomcat8.0 基本参数调优配置-----(2)
Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒你.对于操作系统优化来说,是尽可能的增大可使用的内存容量.提高CPU 的频率,保证文件 ...
- 【 Tomcat 】tomcat8.0 基本参数调优配置-----(1)
Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒你.对于操作系统优化来说,是尽可能的增大可使用的内存容量.提高CPU 的频率,保证文件 ...
- eclipse定制化配置调优、初始化配置指南、可以解决启动慢等问题
配置eclipse的jvm参数 打开eclipse根目录下的eclipse.ini在最后面加上如下的jvm参数 -Xms400m -Xmx1400m -XX:NewSize=128m -XX:MaxN ...
- Elasticsearch 基础理论 & 配置调优
一.简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为 ...
- ES 基础理论 配置调优
一.简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为 ...
随机推荐
- ubuntu16.04上安装tomcat7
sudo apt-get update sudo apt-get install tomcat7 启动:sudo service tomcat7 start 访问http://127.0.0.1:80 ...
- ubuntu16.04中开启和关闭防火墙
开启防火墙 ufw enable 关闭防火墙 ufw disable
- Qt5.3.2_CentOS6.4_基本编程环境__20160306【勿删,繁琐】
20160306 全程没有f/q ZC:使用的虚拟机环境是:博客园VMwareSkill 的 “CentOS6.4_x86_120g__20160306.rar” 1. 执行命令“gcc -v”,显示 ...
- SpringBoot中的数据库连接池
内置的连接池 目前Spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池. 数据库连接可以使用DataSource池进行自动配置. 由于Tomcat数 ...
- checklistbox的用法
一般认为:foreach (object obj in checkedListBox1.SelectedItems)即可遍历选中的值.其实这里遍历的只是高亮的值并不是打勾的值.遍历打勾的值要用下面的代 ...
- 雷林鹏分享:Ruby 循环
Ruby 循环 Ruby 中的循环用于执行相同的代码块若干次.本章节将详细介绍 Ruby 支持的所有循环语句. Ruby while 语句 语法 while conditional [do] code ...
- XAML中格式化日期
要求被格式化数据的类型是DateTime StringFormat='yyyy-MM-dd' StringFormat={}{0:yyyy-MM-dd}
- HDU-3480 Division (四边形不等式优化DP)
题目大意:将n个数分成m组,将每组的最大值与最小值的平方差加起来,求最小和. 题目分析:先对数排序.定义状态dp(i,j)表示前 j 个数分成 i 组得到的最小和,则状态转移方程为dp(i,j)=mi ...
- ORACLE中使用DBMS_SQL获取动态SQL执行结果中的列名和值
1.获取动态SQL中的列名及类型 DECLARE l_curid INTEGER; l_cnt NUMBER; l_desctab dbms_sql.desc_tab; l_sqltext ); BE ...
- 处理Oracle EBS R12登录首页跳转出现unexpected error问题(转)
原文地址: 处理Oracle EBS R12登录首页跳转出现unexpected error问题 经上网搜索,造成此问题的问题有很多,如内存不足.系统参数配置不当.程序代码.系统表空间不足等原因.查询 ...