`

windows环境独立运行tomcat常见问题

 
阅读更多

1、执行startup.bat后一闪而过

在startup.bat文件的首行加入相关环境变量:

SET JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_79

SET TOMCAT_HOME=D:\Program Files\apache-tomcat-7.0.12

 

2、内存溢出

在catalina.bat文件中设置,首行加入:

windows环境:

set JAVA_OPTS=-Xms128m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=512m -XX:MaxNewSize=128m

linux环境:

JAVA_OPTS='-Xms128m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=512m -XX:MaxNewSize=128m'

windows环境批处理语法和linux环境shell的语法不一样,需要注意

参数说明:

-Xms   Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;(最小堆内存)

-Xmx   Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;(最大堆内存)

-XX:PermSize   JVM初始分配的非堆内存
-XX:MaxPermSize   JVM最大允许分配的非堆内存,按需分配

-Xmn   Java Heap Young区大小,不熟悉最好保留默认值;

-Xss   每个线程的Stack大小,不熟悉最好保留默认值;

一般用到最多的是

-Xms512m  设置JVM促使内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

-Xmx512m ,设置JVM最大可用内存为512M。

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

-Xss128k:

设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内 存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

 

在JDK1.8中,取消了PermGen,取而代之的是Metaspace,所以PermSize和MaxPermSize参数失效,取而代之的是:-XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m

 

VM内存区域总体分两类,heap区 和 非heap 区 。 
- heap区: 堆区分为Young Gen(新生代),Tenured Gen(老年代-养老区)。其中新生代又分为Eden Space(伊甸园)、Survivor Space(幸存者区)。 
- 非heap区: Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java虚拟机栈)、Local Method Statck(本地方法栈)。

 

为什么要区分新生代和老生代? 
堆中区分的新生代和老年代是为了垃圾回收,新生代中的对象存活期一般不长,而老年代中的对象存活期较长,所以当垃圾回收器回收内存时,新生代中垃圾回收效果较好,会回收大量的内存,而老年代中回收效果较差,内存回收不会太多。

 

 

原理

JVM堆内存分为2块:Permanent Space 和 Heap Space。
  • Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。
  • Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation),New 即 年轻代(Young Generation)。年老代和年轻代的划分对垃圾收集影响比较大。

年轻代

所有新生成的对象首先都是放在年轻代。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代一般分3个区,1个Eden区,2个Survivor区(from 和 to)。

大部分对象在Eden区中生成。当Eden区满时,还存活的对象将被复制到Survivor区(两个中的一个),当一个Survivor区满时,此区的存活对象将被复制到另外一个Survivor区,当另一个Survivor区也满了的时候,从前一个Survivor区复制过来的并且此时还存活的对象,将可能被复制到年老代。

2个Survivor区是对称的,没有先后关系,所以同一个Survivor区中可能同时存在从Eden区复制过来对象,和从另一个Survivor区复制过来的对象;而复制到年老区的只有从另一个Survivor区过来的对象。而且,因为需要交换的原因,Survivor区至少有一个是空的。特殊的情况下,根据程序需要,Survivor区是可以配置为多个的(多于2个),这样可以增加对象在年轻代中的存在时间,减少被放到年老代的可能。

针对年轻代的垃圾回收即 Young GC。

年老代

在年轻代中经历了N次(可配置)垃圾回收后仍然存活的对象,就会被复制到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。

针对年老代的垃圾回收即 Full GC。

持久代

用于存放静态类型数据,如 Java Class, Method 等。持久代对垃圾回收没有显著影响。但是有些应用可能动态生成或调用一些Class,例如 Hibernate CGLib 等,在这种时候往往需要设置一个比较大的持久代空间来存放这些运行过程中动态增加的类型。

 

所以,当一组对象生成时,内存申请过程如下:

  1. JVM会试图为相关Java对象在年轻代的Eden区中初始化一块内存区域。
  2. 当Eden区空间足够时,内存申请结束。否则执行下一步。
  3. JVM试图释放在Eden区中所有不活跃的对象(Young GC)。释放后若Eden空间仍然不足以放入新对象,JVM则试图将部分Eden区中活跃对象放入Survivor区。
  4. Survivor区被用来作为Eden区及年老代的中间交换区域。当年老代空间足够时,Survivor区中存活了一定次数的对象会被移到年老代。
  5. 当年老代空间不够时,JVM会在年老代进行完全的垃圾回收(Full GC)。
  6. Full GC后,若Survivor区及年老代仍然无法存放从Eden区复制过来的对象,则会导致JVM无法在Eden区为新生成的对象申请内存,即出现“Out of Memory”。

OOM(“Out of Memory”)异常一般主要有如下2种原因

1. 年老代溢出,表现为:java.lang.OutOfMemoryError:Javaheapspace
这是最常见的情况,产生的原因可能是:设置的内存参数Xmx过小或程序的内存泄露及使用不当问题。
例如循环上万次的字符串处理、创建上千万个对象、在一段代码内申请上百M甚至上G的内存。还有的时候虽然不会报内存溢出,却会使系统不间断的垃圾回收,也无法处理其它请求。这种情况下除了检查程序、打印堆内存等方法排查,还可以借助一些内存分析工具,比如MAT就很不错。

2. 持久代溢出,表现为:java.lang.OutOfMemoryError:PermGenspace
通常由于持久代设置过小,动态加载了大量Java类而导致溢出,解决办法唯有将参数 -XX:MaxPermSize 调大(一般256m能满足绝大多数应用程序需求)。将部分Java类放到容器共享区(例如Tomcat share lib)去加载的办法也是一个思路,但前提是容器里部署了多个应用,且这些应用有大量的共享类库。

 

  • 大小: 36.3 KB
分享到:
评论

相关推荐

    Windows环境下的tomcat+apache配置

    在Windows环境下配置Tomcat与Apache是一项常见的Web服务器集成任务,主要目的是实现Apache作为前端服务器处理静态内容,而将动态请求转发到后端的Tomcat服务器处理。这种配置可以提高服务器性能,优化资源分配,并...

    tomcat在windows下部署

    这里解压了两次,分别创建了`C:\apache-tomcat-5.5.23-1`和`C:\apache-tomcat-5.5.23-2`两个目录,这样可以同时运行两个独立的Tomcat实例。 3. **配置Tomcat**:接下来,需要修改Tomcat的配置文件`server.xml`,...

    最新版windows apache-tomcat-10.0.0-M8-windows-x64.zip

    虽然Tomcat可以独立运行,但更常见的是作为Servlet和JSP容器,因为它不包含完整的应用服务器功能,如全面的事务管理、EJB支持等。然而,它与Java EE兼容的全功能应用服务器(如IBM WebSphere或Oracle WebLogic)集成...

    Tomcat7环境变量配置

    本文将围绕“Tomcat7环境变量配置”这一主题进行深入探讨,帮助读者理解配置过程中的注意事项及常见问题解决方法。 #### 二、JAVA_HOME环境变量配置 ##### 1. JAVA_HOME的作用 - **定义**:`JAVA_HOME`是Java开发...

    eclipse Tomcat配置

    本文将详细介绍如何在Windows操作系统下配置Eclipse与Tomcat的环境变量。 #### 二、环境变量概述 环境变量是操作系统提供的一种机制,用于存储应用程序运行所需的配置信息。常见的环境变量包括`JAVA_HOME`、`...

    Windows下Apache2.2+Tomcat6配置集群、负载均衡、session共享

    在Windows环境下,Apache2.2和Tomcat6的组合是一个常见的Web服务器架构,用于搭建集群、实现负载均衡和处理session共享。Apache作为前端反向代理服务器,负责分发请求到后端的多个Tomcat实例,以提高应用的可用性和...

    tomcat6+JDK1.6集成环境,服务、手动两种模式不好用我会放出来?

    分分钟启动一群服务器"表明这个集成环境支持快速地通过修改Tomcat的配置文件(如`server.xml`)来改变其监听的端口,从而能够启动多个独立的Tomcat实例,每个实例运行在不同的端口上,避免了端口冲突问题。...

    apache-tomcat-7.0.52.zip for mac os

    Tomcat可以独立运行,也可以与诸如Apache HTTP Server等其他Web服务器集成,实现更强大的功能。 2. **Tomcat 7**: 第7个主要版本的Tomcat引入了新的功能,如支持Java EE 6 Web Profile,增强了性能和稳定性,并且对...

    xp/win7上配置多个tomcat

    在IT领域,特别是对于Web应用开发与部署而言,配置多个Tomcat服务器实例是常见的需求,尤其是在Windows XP或Win7这样的操作系统环境下。本文将深入探讨如何在XP或Win7系统上成功配置并运行多个Apache Tomcat服务器,...

    Tomcat服务器配置 视频教程 Tomcat视频

    11. **故障排查**:学习如何通过日志、控制台输出以及服务器状态检查来诊断和解决常见的运行问题。 12. **更新与升级Tomcat**:了解如何安全地升级到新版本的Tomcat,以保持最新特性和安全补丁。 通过这个视频教程...

    tomcat8.0及配置

    4. **CATALINA_BASE与CATALINA_HOME**: `CATALINA_BASE`用于存放特定实例的配置和运行时文件,而`CATALINA_HOME`是Tomcat的安装位置,两者可以通过环境变量独立设置。 **三、在MyEclipse中集成Tomcat 8.0** 1. **...

    windows下配置两个或多个Tomcat启动的方法

    在Windows操作系统中,...通过以上步骤,你可以在Windows环境下成功地配置和启动多个独立的Tomcat实例,从而实现应用程序的隔离和多环境的测试。记得每次创建新实例时都要修改端口,以防止不同Tomcat实例之间的冲突。

    JDK和tomcat环境配置

    - 进入Tomcat的`bin`目录,运行`startup.bat`(Windows)或`startup.sh`(Linux/MacOS)来启动Tomcat服务。 - 使用浏览器访问`http://localhost:8080`,如果能看到Tomcat的欢迎页面,则表示安装配置成功。 #### ...

    tomcat服务参数配置

    Tomcat可以独立运行,也可以作为其他应用服务器的一部分。 ##### 安装步骤: 1. **下载Tomcat**: - 访问[Tomcat官方网站](http://tomcat.apache.org/)进行下载。 - 选择Binary Distributions下的.zip或.tar.gz...

    Jakarta-Tomcat简明中文版用户指南

    无论是作为独立的Servlet容器还是与其他Web服务器结合使用,Tomcat都能提供高效稳定的运行环境。希望本文能帮助读者快速入门并熟练掌握Tomcat的使用技巧。如果遇到问题,可以通过官方文档、社区论坛等途径寻求帮助。

    Java 服务器软件apache-tomcat.zip

    标签"apache-tomcat服务器"进一步强调了这个压缩包的用途,即提供一个用于运行Java Web应用的服务器环境。在部署应用时,开发者需要将打包好的WAR文件(Web Application Archive)放入Tomcat的webapps目录下,服务器...

    Tomcat部署笔记

    对于初学者或者经验不足的开发者来说,正确地在本地环境中部署并运行Tomcat可能会遇到一些常见的问题。本文将以“Tomcat部署笔记”为引子,深入探讨在Windows环境下使用Eclipse IDE进行Tomcat部署的具体步骤及常见...

    Tomcat中文手册

    - **Windows环境下**:通过命令`set TOMCAT_HOME=foo/tomcat`。 - **Unix环境下**:在`bash/sh`中使用`export TOMCAT_HOME=foo/tomcat`;在`tcsh`中则使用`setenv TOMCAT_HOME foo/tomcat`。 - **启动与停止...

Global site tag (gtag.js) - Google Analytics