tomcat

基础

j2ee是一个平台,是一堆技术体的总称;
j2ee是集成多个技术解决思路(标准),并没有全部实现具体代码
具体实现的是服务器,根据对j2ee支持的能力分为两大类

1.JavaEE服务器(应用服务器)
将几乎所有j2ee的技术都实现了,除了jdbc(是数据库需要实现的);
几乎都是收费的;

2.web容器(servlet/jsp容器)
部分实现j2ee的标准(servlet/jsp)
tomcat
jetty

大部分互联网公司,选择开源框架的技术,而不是直接用j2ee标准,一方面原因是j2ee服务器成本;

tomcat 版本

不同版本的tomcat依赖:
JDK:tomcat用jave写的
JavaEE:支持javaee版本的标准
Servlet:支持javaee中servlet版本的标准
Jsp:支持javaee中jsp版本的标准

tomcat:9.x
jdk:8及更改版本
javaee:javaee8
servlet:4.0
jsp:2.47

安装

解压

[root@iZbp14eey5dlgt99xx7qptZ data]# tar -zxvf apache-tomcat-7.0.105.tar.gz -C /usr/local/

配置环境变量

[root@iZbp14eey5dlgt99xx7qptZ apache-tomcat-7.0.105]# vim /etc/profile //export PATH=$PATH:/usr/local/apache-tomcat-7.0.105/bin
source /etc/profile //刷新环境变量

测试

[root@iZbp14eey5dlgt99xx7qptZ conf]# vim server.xml //默认8080端口,修改为80

[root@iZbp14eey5dlgt99xx7qptZ /]# ps -ef|grep tomcat
root        2165    1199  0 16:21 pts/0    00:00:00 grep --color=auto tomcat
[root@iZbp14eey5dlgt99xx7qptZ /]# startup.sh //启动
Using CATALINA_BASE:   /usr/local/apache-tomcat-7.0.105
Using CATALINA_HOME:   /usr/local/apache-tomcat-7.0.105
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.105/temp
Using JRE_HOME:        /usr/local/java/jdk1.8.0_251/jre
Using CLASSPATH:       /usr/local/apache-tomcat-7.0.105/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.105/bin/tomcat-juli.jar
Tomcat started.
[root@iZbp14eey5dlgt99xx7qptZ /]# ps -ef|grep tomcat
root        2207       1 46 16:21 pts/0    00:00:02 /usr/local/java/jdk1.8.0_251/jre/bin/java -Djava.util.logging.config.file=/usr/local/apache-tomcat-7.0.105/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/apache-tomcat-7.0.105/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.105/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/apache-tomcat-7.0.105 -Dcatalina.home=/usr/local/apache-tomcat-7.0.105 -Djava.io.tmpdir=/usr/local/apache-tomcat-7.0.105/temp org.apache.catalina.startup.Bootstrap start
root        2267    1199  0 16:21 pts/0    00:00:00 grep --color=auto tomcat
[root@iZbp14eey5dlgt99xx7qptZ /]# shutdown.sh //关闭
Using CATALINA_BASE:   /usr/local/apache-tomcat-7.0.105
Using CATALINA_HOME:   /usr/local/apache-tomcat-7.0.105
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.105/temp
Using JRE_HOME:        /usr/local/java/jdk1.8.0_251/jre
Using CLASSPATH:       /usr/local/apache-tomcat-7.0.105/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.105/bin/tomcat-juli.jar
[root@iZbp14eey5dlgt99xx7qptZ /]# ps -ef|grep tomcat
root        2358    1199  0 16:22 pts/0    00:00:00 grep --color=auto tomcat

目录

bin

运行功能

conf

对tomcat修改的配置文件

lib

tomcat的jar包

logs

tomcat启动和运行时的日志

temp

临时存放文件,里面的内容可以删,目录不能删

webapps

web应用
ROOT:当url未指定具体目录时,则默认访问此目录下的站点

work

放jsp编译成class的目录

配置文件

tomcat 部署方式

静态部署(需要重启tomcat)

1.直接往webapps里放站点
2.修改host节点,添加几点
3.类似第2种,在conf/Catalina/localhost 新建一个xml,名称与path名称相同,如叫m.xml pc.xml,里面配置

热部署(不需要重启tomcat)

需要在tomcat的管理界面下部署
1.在tomcat-user.xml 配置用户名 密码,开启gui/script权限 并配置用户名 密码
2.在那个默认猫的界面,点manage

tomcat原理

1.客户端向服务器发送请求
2.连接器Connector,默认8080端口,连接器一般有http、ajp
3.连接器将请求发给引擎Engine
4.将访问的资源解析到虚拟主机host
5.匹配虚拟主机
6.通过maaping table找到相应的servlet

tomcat监控

status

通过默认地址(带猫的界面)打开状态管理界面

probe 探针

需要提前安装

tomcat 优化

###jvm 优化

//查看进程 可以看到jvm的配置
[shtermuser@172-17-12-111 ~]$ ps -ef|grep tomcat

linux 修改catalinna.sh文件
windows 修改catalina.bat文件
jvm设置,就是设置某个依赖java运行环境的进程的jvm参数

参数设置

export JAVA_OPTS="-server -Xms4096M -Xmx4096M -Xmn1536M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=15 -XX:+UseConcMarkSweepGC
-XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "

-server:启用jdk的server版本。
-Xms:虚拟机初始化时的最小堆内存。
-Xmx:虚拟机可使用的最大堆内存。 #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
-Xmn:年轻带堆内存,sun官方推荐为整个堆的3/8
-Xss: 为jvm启动的每个线程分配的内存大小
-XX:+AggressiveOpts 加快编译
-XX:+UseBiasedLocking 锁机制的性能改善
-XX:+DisableExplicitGC 关闭System.gc()–避免程序误写 影响性能
-XX:MaxTenuringThreshold 垃圾最大年龄
-XX:+UseConcMarkSweepGC 使用CMS内存收集
-XX:+UseParNewGC 设置年轻代为并行收集
-XX:+CMSParallelRemarkEnabled 降低标记停顿
-XX:LargePageSizeInBytes 内存页的大小不可设置过大, 会影响Perm的大小
-XX:+UseFastAccessorMethods 原始类型的快速优化
-XX:+UseCMSInitiatingOccupancyOnly 使用手动定义初始化定义开始CMS收集

-XX:PermSize:设置非堆内存初始值,默认是物理内存的1/64。
-XX:MaxPermSize:Perm(俗称方法区)占整个堆内存的最大值,也称内存最大永久保留区域。
-XX:MaxNewSize:新生代占整个堆内存的最大值。

常见的错误及对应调整参数方案

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

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

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

连接数优化

conf/server.xml配置文件中进行修改

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

线程池

<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:线程优先级
注:当tomcat并发用户量大的时候,单个jvm进程确实可能打开过多的文件句柄,这时会报java.net.SocketException:Too many open files错误。可使用下面步骤检查:

• ps -ef |grep tomcat 查看tomcat的进程ID,记录ID号,假设进程ID为10001
• lsof -p 10001|wc -l 查看当前进程id为10001的 文件操作数
• 使用命令:ulimit -a 查看每个用户允许打开的最大文件数

运行模式

BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下在Linux系统中默认使用这种方式。
NIO:利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7必须修改Connector配置来启动(conf/server.xml配置文件):

APR:从操作系统层面解决io阻塞问题。Linux如果安装了apr和native,Tomcat直接启动就支持apr。

日志文件

logging.properties 设置日志级别,默认FINE

1.catalina.日期
记录tomcat服务器启动、停止等相关的线程信息

2.catalina.out
与1的内容相似,记录后台线程或守护进程的相关

3.host-manage.日期
记录管理服务相关的信息,一般为空

4.localhost.日期
记录主要相关线程运行时调用的方法或属性,以及java线程号

5.localhsot_access_log.日期
记录客户端访问服务器的相关信息
访问的ip/用户名/邮箱/日期时间/http请求方式/请求url地址/协议类型/http返回状态码/发送的字节数

6.manager.日志
记录管理相关日志,与host-manage类似

开机自启动

1.修改/etc/rc.d/rc.local
2.添加路径
export JAVA_HOME=/usr/local/java/jdk1.8.0_251
/usr/local/apache-tomcat-7.0.105/bin/startup.sh start
3.添加执行权限 chmod +x /etc/rc.d/rc.local

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值