Tomcat企业应用实战

一:安装Tomcat

1.软件下载

JDK地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Tomcat地址: http://tomcat.apache.org/

2.安装JAVA

[  ! -d /app/tools ]  && mkdir  /app/tools  -p

[[email protected]]# tar xf jdk-8u40-linux-x64.tar.gz  -C  /app/

[[email protected]]# ln -sv  /app/jdk1.8.0_40/  /app/jdk

app/jdk->app/jdk1.8.0_40/

[[email protected]]#

[[email protected]]# sed -i ‘$a export JAVA_HOME=/app/jdk\nexportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin\nexportCLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar‘/etc/profile

[[email protected]]# source  /etc/profile

[[email protected]]# java  -version

java version"1.8.0_40"

Java(TM) SERuntime Environment (build 1.8.0_40-b26)

Java HotSpot(TM)64-Bit Server VM (build 25.40-b25, mixed mode)

3.安装Tomcat多实例

[[email protected]]# tar xf apache-tomcat-7.0.55.tar.gz  -C  /app/

[[email protected]]# cp   -a  apache-tomcat-7.0.55/  tomcat7_1

[[email protected]]# cp   -a  apache-tomcat-7.0.55/  tomcat7_2

二.Tomcat管理界面

管理页面,可以查看tomcat自身的参数和部署在tomcat下的应用.默认该状态处于禁用状态.要想使用必须更改tomcat-user.xml文件进行开启.

[[email protected] app]# sed  -i "36i <rolerolename="manager-gui"/>\n<rolerolename="admin-gui"/>\n<user username="tomcat" password="tomcat"roles="manager-gui,admin-gui"/>"   tomcat7_1/conf/tomcat-users.xml

[[email protected] app]# tail -n 4  tomcat7_1/conf/tomcat-users.xml

<role rolename=manager-gui/>

<role rolename=admin-gui/>

<user username=tomcat password=tomcatroles=manager-gui,admin-gui/>

</tomcat-users>

5.启动Tomcat

/app/tomcat7_1/bin/startup.sh

6.登录http://IP:8080

三.Tomcat主配置文件结构和参数解释

<server>
 <service>
 <Connector port="8080" address="0.0.0.0"protocol="HTTP/1.1" minProcessors="300"maxProcessors="2000" enableLookups="false"redirectPort="8443" acceptCount="3000"connectionTimeout="2000"/>
 <engine>
 <Host name="localhost"appBase="webapps" unpackWARs="true"autoDeloy="true">
 <Context path=""docBase="/app/tomcat7_1/webapps/virtual-platform" reloadable="true"crossContext="true"/>
 </Host>
 </engine>
 </service>
</server>

port   指定服务器端HTTP端口号

address:指定连接器监听的地址,默认为所有地址(即0.0.0.0)

protocol连接器使用的协议,支持HTTP和AJP。AJP是apache和tomcat的连接协议

minProcessors服务器启动时创建的处理请求的线程数

maxProcessors最大可以创建的处理请求的线程数

enableLookups是否查询客户端主机名.线上不开启,性能消耗严重

redirectPort在处理http请求时,遇到一个SSL请求,将要转发的端口

acceptCount排队数,超过此数值,不处理

connectionTimeout指定超时的时间数

name:  主机名

appBase: 网站根目录

unpackWARS:是否自动解压war包.若为false,则tomcat就在war内加载项目

autoDeloy:tomcat启动时自动部署项目

docBase: 应用程序的路径或者是WAR包项目的路径.

path:表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****

reloadable:该参数为true表示.当WEB-INF/lib或者WEB-INF/classes目录中的文件发生变化的时候,会自动加载新的项目.不需要重新启动Tomcat.

四.Tomcat容器优化

URIEncoding=”UTF-8”

Tomcat可以解析中文名的文件的url
maxSpareThreads

最大空闲线程

minSpareThreads

最小空闲线程

maxThreads

Tomcat使用线程来处理每个请求.这个值表示Tomcat可创建的最大的线程数,即最大并发数。

enableLoopups="false"

取消DNS查询

acceptCount

当达到maxThreads时,后续会这个请求放到队列中去.队列满后,直接refuse connections.

compression="on"

打开压缩功能

compressionMinSize="2048"

启用压缩的输出内容大小,这里面默认为2KB

compressableMimeType="text/html,text/xml" 

压缩类型

五:jvm优化

例子:

export JAVA_OPTS="-server-Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31-XX:+UseConcMarkSweepGC  -XX:+CMSParallelRemarkEnabled-XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"

参考: http://blog.csdn.net/lifetragedy/article/details/7708724

-server

生产环境下必须打开,多CPU服务器,效果极好

-Xms与-Xmx

参考: http://blog.oldboyedu.com/java-tomcat/

老男孩老师建议:上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。

即JVM内存设置了,把Xms与Xmx两个值设成一样是最优的做法,不要误以为初始化值配小点,最大值配大点,就完美无瑕了.那样就大错特错了.因为内存全部达到Xmx时会回落.回落时cpu进行高速运转进行垃圾回收.造成负载增加.Xms和Xmx设置为相同时,就无需进行内存回落.无法造成负载高的情况.配置Xmx时需要按照下面执行以下.分配太大,可能无法正常使用.

–Xmn

设置年轻代大小为512m。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。一般设置为Xmx的3、4分之一

-Xss

每个线程的堆栈大小.这个就要依据你的程序,看一个线程大约需要占用多少内存,可能会有多少线程同时运行等。一般不易设置超过1M,要不然容易出现out ofmemory。而最佳值应该是128K,默认值好像是512k.

-XX:+AggressiveOpts

作用如其名(aggressive),启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术(如果有的话)

-XX:+UseBiasedLocking

启用一个优化了的线程锁,我们知道在我们的appserver,每个http请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配

-XX:PermSize=128M-XX:MaxPermSize=256M

JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;Tomcat8不在支持.

在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误。

由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。

那么,如果是物理内存4GB,那么64分之一就是64MB,这就是PermSize默认值,也就是永生代内存初始大小;

四分之一是1024MB,这就是MaxPermSize默认大小。

-XX:+DisableExplicitGC

在程序代码中不允许有显示的调用”System.gc()”。看到过有两个极品工程中每次在DAO操作结束时手动调用System.gc()一下,觉得这样做好像能够解决它们的out ofmemory问题一样,付出的代价就是系统响应时间严重降低,就和我在关于Xms,Xmx里的解释的原理一样,这样去调用GC导致系统的JVM大起大落,性能不到什么地方去哟!

-XX:+UseParNewGC

对年轻代采用多线程并行回收,这样收得快。Tomcat8不在支持.

-XX:+UseConcMarkSweepGC

即CMS gc,这一特性只有jdk1.5即后续版本才具有的功能,它使用的是gc估算触发和heap占用触发。

我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMS GC后可以在GC次数增多的情况下,每次GC的响应时间却很短,比如说使用了CMS GC后经过jprofiler的观察,GC被触发次数非常多,而每次GC耗时仅为几毫秒。

-XX:MaxTenuringThreshold

设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。

这个值的设置是根据本地的jprofiler监控后得到的一个理想的值,不能一概而论原搬照抄。

-XX:+CMSParallelRemarkEnabled

在使用UseParNewGC 的情况下, 尽量减少 mark 的时间

-XX:+UseCMSCompactAtFullCollection

在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少。

-XX:LargePageSizeInBytes

指定 Java heap的分页页面大小

-XX:+UseFastAccessorMethods

get,set方法转成本地代码

-XX:+UseCMSInitiatingOccupancyOnly

指示只有在 oldgeneration 在使用了初始化的比例后concurrentcollector 启动收集

-XX:CMSInitiatingOccupancyFraction=70

CMSInitiatingOccupancyFraction,这个参数设置有很大技巧,基本上满足(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion failed。在我的应用中Xmx是6000,Xmn是512,那么Xmx-Xmn是5488兆,也就是年老代有5488 兆,CMSInitiatingOccupancyFraction=90说明年老代到90%满的时候开始执行对年老代的并发垃圾回收(CMS),这时还 剩10%的空间是5488*10%=548兆,所以即使Xmn(也就是年轻代共512兆)里所有对象都搬到年老代里,548兆的空间也足够了,所以只要满 足上面的公式,就不会出现垃圾回收时的promotionfailed;

因此这个参数的设置必须与Xmn关联在一起。

-Dfile.encoding=utf-8

JAVA日志字符集

-Djava.awt.headless=true

这个参数一般我们都是放在最后使用的,这全参数的作用是这样的,有时我们会在我们的J2EE工程中使用一些图表工具如:jfreechart,用于在web网页输出GIF/JPG等流,在winodws环境下,一般我们的app server在输出图形时不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下图片显示的好好可是在linux/unix下却显示不出来,比如验证码.因此加上这个参数以免避这样的情况出现.

时间: 2024-08-08 13:56:55

Tomcat企业应用实战的相关文章

轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)

轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Java EE经典著作) 李刚 编著   ISBN 978-7-121-24253-3 2014年10月出版 定价:108.00元 824页 16开 编辑推荐 国内知名IT图书作家李刚老师基于曾荣获中国书刊发行业协会“年度全行业优秀畅销品种”大奖的<轻量级Java EE企业应用实战(第3版)>全新升级:

Spring+MYBatis企业应用实战pdf高清版免费下载

下载地址:网盘下载 备用地址:网盘下载 内容提要编辑<Spring+MyBatis企业应用实战>介绍了Java EE 领域的两个开源框架:Spring 的MVC 和MyBatis.其中Spring 的版本为4.2,MyBatis 的版本是3.4.本书的示例建议在Tomcat 8 上运行.<Spring+MyBatis企业应用实战>重点介绍如何整合Spring MVC 4+MyBatis 3 进行Java EE 开发,主要包括三个部分.第一部分详细介绍了Spring MVC 框架的用

Spring3.x企业开发应用实战读书笔记 —— 第三章IoC容器概述

声明:    本篇博客绝大多数内容为<Spring3.x企业开发应用实战>一书原内容,所有版权归原书作者所有!,仅供学习参考,勿作他用! 3.2 相关Java基础知识 Java语言允许通过程序化的方式间接对Class对象实例操作,Class文件由类装载器装在后,在JVM(Java虚拟机)中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息: 如构造函数.属性和方法等.Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能,这就为使用程

企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群:

【JavaEE企业应用实战学习记录】optiontransferselect实现两个列表选择框

1 <%@ page contentType="text/html; charset=GBK" language="java"%> 2 <%@taglib prefix="s" uri="/struts-tags"%> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="te

(转)企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群:

基于大数据技术之电视收视率企业项目实战(hadoop+Spark)张长志(项目实战)

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

手把手搭建企业IT实战环境第三季:快速搭建SCCM1902服务器

手把手搭建企业IT实战环境第三季:快速搭建SCCM1902服务器 ?Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者博客:https://blog.51cto.com/lander IT Helpdesk实战培训视频课程:https://edu.51cto.com/lecturer/733218.html2019/6/19 课程介绍 这是一门手把手指导你快速搭建SCCM1902服务器的视频教程,为你学习SCCM服务器的应用操作,客户端系统部署或在

Django企业开发实战 高效Python Web框架指南

高清PDF,带书签 Django企业开发实战 高效Python Web框架指南Django企业开发实战 高效Python Web框架指南Django企业开发实战 高效Python Web框架指南gACkM793118 粘贴链接到地址栏访问: https://fgk.pw/i/gACkM793118 原文地址:https://www.cnblogs.com/ziqang/p/11051134.html