Tomcat使用基础

1.解压Tomcat压缩文件后需要在环境变量里配置 :

TOMCAT_HOME:D:apache-tomcat-7.0.65

2.startup.bat启动服务

将打好的项目war包放到tomcat安装目录的webapps文件夹下,启动bin目录下的startup.b启动bin目录下的startup.bat文件,可以将war包自动解压并发布到本地服务器上。shutdown.bat关闭服务。

3.重新部署项目配置时要清楚tomcat缓存。

4.在Eclipse中配置Tomcat Server

1)选择合适版本的Tomcat:要和自己安装的版本一致;

2)配置自己外部Tomcat

3)添加需要的工程,没有的时候可以先不添加;

4)查看服务是否可以正常启动

 5.端口修改

tomcat默认的端口是8080,还会占用8005,8009和8443端口。

如果已经启动了tomcat,再启动一个tomcat会发现这些端口已经被占用了,这个时候我们就需要修改端口号。

进入tomcat安装目录,编辑文件“安装目录apache-tomcat-7.0.6confserver.xml”(可以用记事本打开) 

方法/步骤3:

在server.xml文件中依次查找修改 
重新启动Tomcat,启动tomcat,访问http://localhost:8081/ ;能成功访问,说明修改成功(访问的端口跟据配置文件中设置的Connector 端口) 
 

修改默认配置

Spring Boot默认配置文件为CLASSPATH下的application.properties
在application.properties中添加server.port=8011,可将tomcat默认端口号修改为8011

 6.修改tomcat 使用的JVM的内存

为什么要设置tomcat是用的JVM的内存呢?

大家在平时的工作或者学习中,很有可能会遇到内存溢出的异常例如:OutOfMemoryError,StackOverflowError,这个时候除去代码编写错误外,很可能是真的要增大JVM内存了。

设置方法i

11).解压版本

1.linux 下调整tomcat的内存设置
修改bin目录下catalina.sh文件
在cygwin=false之上
添加以下语句
JAVA_OPTS="-Xms1024m -Xmx4096m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m"

其中-xms为jvm初始化堆的大小,-xmx为jvm堆的最大值

2. window 下调整tomcat的内存设置
修改bin目录下catalina.bat文件@echo off下追加
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m

3.eclipse下修改外置tomcat的内存设置
open launch configuration=>arguments=>vm arguments
追加-Xms1024M -Xmx4096M -XX:PermSize=512m -XX:MaxPermSize=2048m  JAVA_OPTS="-server -Xms256m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m"

2)、对于安装版的TOMCAT: 

进入TOMCAT的安装目录下的bin目录,双击tomcat6w.exe。点击Java选项卡,可设置初始化内存,最大内存,线程的内存大小。
初始化内存:如果机器的内存足够大,可以直接将初始化内存设置为512M,如果机器内存较小可适当调小,对于运行了EJB的应用,最好不要低于128M。
最大内存:最大内存目前设置为512M.
线程内存大小:目前配置为1024KB,这也是JDK5.0后的默认配置。
对于容器下运行了多个WEB应用时,尽量将相同的JAR包转移到TOMCAT的lib下,此外还需要在JAVA OPTIONS加上如下配置:
-XX:PermSize=16m
-XX:MaxPermSize=128m
此配置表示JAVA永久保存区域(即不会被虚拟机回收)初始大小为16M,最大为128M。

3).参数说明

-Xms 为jvm启动时分配的初始内存      比如-Xms200m,表示分配200M
-Xmx 为jvm运行分配的最大内存        比如-Xms500m,表示jvm进程最多只能够占用500M内存
-Xss 每个线程堆栈的大小             一般情况下256K是足够了。影响了此进程中并发线程数大小
-XX  PermSize=64M JVM初始分配的非堆内存
-XX  MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配

首先了解一下JVM内存管理的机制,然后再解释每个参数代表的含义。

1)堆(Heap)和非堆(Non-heap)内存

 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”

“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。
 简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的

 所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。  

堆内存分配

 JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;
JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。
默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;
 空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。
因此服务器一般设置-Xms、-Xmx 相等以避免在每次GC 后调整堆的大小。
 说明:如果-Xmx 不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM,不是Throwable的,无法用try...catch捕捉。 


非堆内存分配

 JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;
由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
XX:MaxPermSize设置过小会导致java.lang.OutOfMemoryError: PermGen space 就是内存益出。 
说说为什么会内存益出: 
(1)这一部分内存用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同。 
(2)GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS 的话,就很可能出现PermGen space错误。
  这种错误常见在web服务器对JSP进行pre compile的时候

4)具体设置

上图中也对Xms,Xmx等参数进行了解释说明。

  这里再多说一句,为什么要讲-Xms和-Xmx设置为一样呢?因为虚拟机在向系统申请内存的时候是需要额外的消耗的,这里为了避免这些额外的消耗,将-Xms和-Xmx设置为一样。

set JAVA_OPTS=-Xms2048m -Xmx2048m -Xss1024k -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m

  -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m也是同样的道理。

  接下来重启tomcat,在jvisualvm中重新双击tomcat虚拟机进程,观察概述JVM参数部分:

5)如何验证是否设置成功

jvisualvm简单使用

jvisualvm.exe就在JDK的bin目录中

双击即可启动。在启动jvisualvm之前,我先启动在文章让tomcat使用指定JDK中配置了JDK1.8的tomcat。

然后双击启动jvisualvm,如果你是第一次启动jvisualvm,需要做一些检查,不用配置任何东西,按指导点击即可。

 从上图中可以看到,本地中存在三个JVM进程,也就是说我现在的电脑中有三个JVM进程。

  第1个是jvisualvm自己的JVM进程。

  第2个是我现在电脑上启动的eclipse使用的JVM进程。

  第3个就是我在启动jvisualvm之前启动的tomcat使用的JVM进程了。

  双击第3个tomcat使用的JVM进程,就会进入JVM概述页面

   可以看到,我们在catalina.bat中设置的参数都在这里体现了。那么到底有没有效果呢?

  我们来看一下监视页面中的堆内存部分

7.让tomcat使用指定JDK

我们都知道,tomcat启动前需要配置JDK环境变量,如果没有配置JDK的环境变量,那么tomcat启动的时候就会报错,也就是无法启动。

但是在我们的工作或者学习过程中,有的时候会出现tomcat需要使用不同的JDK版本。

这个时候要怎么办呢?似乎唯一的办法就是在使用不同版本的JDK的时候,去更改环境变量中的JAVA_HOME变量。

这样做也确实可行,但是频繁的更改JAVA_HOME变量,不仅操作起来略显繁琐,每一次都要改来改去的,而且假如使用结束后忘记将JAVA_HOME改回来,那么将会造成一系列的不可预料的问题,例如eclipse启动不了了。

那么有没有一种方法可以在不更改环境变量的情况下,让tomcat使用我们指定的JDK呢?

要在tomcat中添加相关配置即可,在公布答案之前我们先思考一下,为什么tomcat启动需要JDK或者是JRE?

因为tomcat启动的时候需要运行在java虚拟机(JVM)中,或者说要启动一个虚拟机进程,再简单一些就是我们的代码需要JVM来执行,自然需要启动一个JVM。

其实eclipse启动的时候也同样启动了一个JVM进程,在windows的任务管理器中我们可以看到:

因为我现在的电脑上正在运行一个eclipse所以这里有一个Java虚拟机进程。

那么如何让tomcat使用指定的JDK呢?首先来看一下不让tomcat使用指定JDK,即使用电脑的环境变量中配置的JDK的时候是什么样的。

三,让tomcat使用指定JDK

  其实特别简单,只需要在bin目录中的setclasspath.bat文件前面添加:   

    set JAVA_HOME=G: oolsJDK8_64
    set JRE_HOME=G: oolsJDK8_64jre

  如下图

 这里,我指定tomcat使用JDK1.8来启动。双击startup.bat,访问localhost:8080,出现了tomcat的默认欢迎页,说明tomcat启动成功。

  那么到底有没有使用JDK1.8呢?看启动日志

没有错了,就是使用我在setclasspath.bat中配置的JDK1.8。

8.timeout

web工程部署时需要加载很多类和文件,需要的时间比较长。如果时间超过了45秒,tomcat就会自动退出并且报错

默认开启时间为45s,关闭时间为15s,

ecilipse 双击可以修改;

当启动tomcat时候出现 Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor. 的错误,那表示你的tomcat启动超时了,有时候你重新启动下就好了,但有时需要重新启动很多次,如果你不想这样的话,你只需修改下tomcat的启动 时间就行了,步骤如下:

修改 workspace.metadata.pluginsorg.eclipse.wst.server.coreservers.xml文件。

<servers>

<server hostname="localhost" id="JBoss v5.0 at localhost" name="JBoss v5.0 at localhost" runtime-id="JBoss v5.0" server-type="org.eclipse.jst.server.generic.jboss5" server-type-id="org.eclipse.jst.server.generic.jboss5" start-timeout="1000" stop- timeout="15" timestamp="0">

<map jndiPort="1099" key="generic_server_instance_properties" port="8090" serverAddress="127.0.0.1" serverConfig="default"/>

</server>

</servers>

把 start-timeout="45" 改为 start-timeout="1000" 或者更长 重启eclipse就可以了。

原文地址:https://www.cnblogs.com/lukelook/p/8031339.html