• 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就可以了。

  • 相关阅读:
    继承 接口 多态
    组合(补充)和 继承
    面向对象初级
    模块和包
    time,random,os,sys,序列化模块
    inline详解
    C++静态数据成员与静态成员函数
    OpenCV Mat数据类型及位数总结(转载)
    拼搏奋斗类
    c++虚函数实现机制(转)
  • 原文地址:https://www.cnblogs.com/lukelook/p/8031339.html
Copyright © 2020-2023  润新知