`

Tomcat的JVM设置和连接数设置

    博客分类:
  • JVM
阅读更多

 Tomcat的JVM设置和连接数设置 收藏
http://hi.baidu.com/dd_taiyangxue/blog/item/fa7fe7db40667cd6b7fd4813.html

一、Tomcat的JVM提示内存溢出

查看%TOMCAT_HOME%\logs文件夹下,日志文件是否有内存溢出错误

二、修改Tomcat的JVM

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

Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误,Out of Memory(系统内存不足)的异常,从而导致客户端显示500错误,一般调整Tomcat的使用内存即可解决此问题。

Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m -Xmx512m

Linux环境下修改“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件开头增加如下设置:JAVA_OPTS=’-Xms256m -Xmx512m’

其中,-Xms设置初始化内存大小,-Xmx设置可以使用的最大内存。

2、错误提示:java.lang.OutOfMemoryError: PermGen space

原因:
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存
放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的
Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用
中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的
时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信
息了。
解决方法:

在catalina.bat的第一行增加:
set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -
XX:MaxPermSize=256m
在catalina.sh的第一行增加:
JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -
XX:MaxPermSize=256m

3、JVM设置

堆的尺寸
-Xmssize in bytes
    设定Java堆的初始尺寸,缺省尺寸是2097152 (2MB)。这个值必须是1024个字节(1KB)的倍数,且比它大。(-server选项把缺省尺寸增加到32M。)
-Xmnsize in bytes
    为Eden对象设定初始Java堆的大小,缺省值为640K。(-server选项把缺省尺寸增加到2M。)
-Xmxsize in bytes
    设定Java堆的最大尺寸,缺省值为64M,(-server选项把缺省尺寸增加到128M。) 最大的堆尺寸达到将近2GB(2048MB)。

请注意:很多垃圾收集器的选项依赖于堆大小的设定。请在微调垃圾收集器使用内存空间的方式之前,确认是否已经正确设定了堆的尺寸。

垃圾收集:内存的使用
-XX:MinHeapFreeRatio=percentage as a whole number
    修改垃圾回收之后堆中可用内存的最小百分比,缺省值是40。如果垃圾回收后至少还有40%的堆内存没有被释放,则系统将增加堆的尺寸。
-XX:MaxHeapFreeRatio=percentage as a whole number
    改变垃圾回收之后和堆内存缩小之前可用堆内存的最大百分比,缺省值为70。这意味着如果在垃圾回收之后还有大于70%的堆内存,则系统就会减少堆的尺寸。
-XX:NewSize=size in bytes
    为已分配内存的对象中的Eden代设置缺省的内存尺寸。它的缺省值是640K。(-server选项把缺省尺寸增加到2M。)
-XX:MaxNewSize =size in bytes
    允许您改变初期对象空间的上限,新建对象所需的内存就是从这个空间中分配来的,这个选项的缺省值是640K。(-server选项把缺省尺寸增加到 2M。)
-XX:NewRatio=value
    改变新旧空间的尺寸比例,这个比例的缺省值是8,意思是新空间的尺寸是旧空间的1/8。
-XX:SurvivorRatio=number
    改变Eden对象空间和残存空间的尺寸比例,这个比例的缺省值是10,意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍。
-XX:TargetSurvivorRatio=percentage
    设定您所期望的空间提取后被使用的残存空间的百分比,缺省值是50。
-XX:MaxPermSize=size in MB
    长久代(permanent generation)的尺寸,缺省值为32(32MB)。

三、查看Tomcat的JVM内存

1. Tomcat6中没有设置任何默认用户,因而需要手动往Tomcat6的conf文件夹下的tomcat-users.xml文件中添加用户。

    如:<role rolename="manager"/>
          <user username="tomcat" password="tomcat" roles="manager"/>

    注:添加完需要重启Tomcat6。

2. 访问http://localhost:8080/manager/status,输入上面添加的用户名和密码。

3. 然后在如下面的JVM下可以看到内存的使用情况。

JVM
    Free memory: 2.50 MB Total memory: 15.53 MB Max memory: 63.56 MB

四、Tomcat连接数设置

在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。


web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。Unix中如何设置这些参数,请参阅Unix常用监控和管理命令


--------------------------------------------------------------------------------

http://www.blogjava.net/george/archive/2009/08/18/291579.html

Tomcat内存溢出总结

在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。
这里根据平时遇到的情况和相关资料进行一个总结。常见的一般会有下面三种情况:
        1.OutOfMemoryError: Java heap space
        2.OutOfMemoryError: PermGen space
        3.OutOfMemoryError: unable to create new native thread.
对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。(-Xms -Xmx -XX:PermSize  -XX:MaxPermSize)
最后一种可能需要调整操作系统和tomcat jvm参数同时调整才能达到目的。

第一种:是堆溢出。
        在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。
        没有内存泄露的情况下,调整-Xms -Xmx参数可以解决。
        -Xms:初始堆大小
        -Xmx:最大堆大小
        但堆的大小受下面三方面影响:
        1.相关操作系统的数据模型(32-bt还是64-bit)限制;(32位系统下,一般限制在1.5G~2G;我在2003 server 系统下(物理内存:4G和6G,jdk:1.6)测试 1612M,64为操作系统对内存无限制。)
        2.系统的可用虚拟内存限制;
        3.系统的可用物理内存限制。
        堆的大小可以使用 java -Xmx***M  version 命令来测试。支持的话会出现jdk的版本号,不支持会报错。
         -Xms -Xmx一般配置成一样比较好比如set JAVA_OPTS= -Xms1024m -Xmx1024m

第二种:永久保存区域溢出
        PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。但目前的hibernate和spring项目中也很容易出现这样的问题。http://www.iteye.com/topic/80620?page=1  的帖子有讨论的这个问题。可能是由于这些框架会动态class,而且jvm的gc是不会清理PemGen space的,导致内存溢出。
        这一个一般是加大-XX:PermSize  -XX:MaxPermSize 来解决问题。
        -XX:PermSize 永久保存区域初始大小
        -XX:PermSize 永久保存区域初始最大值
        这一般结合第一条使用,比如 set JAVA_OPTS= -Xms1024m -Xmx1024m  -XX:PermSize=128M -XX:PermSize=256M
        有一点需要注意:java -Xmx***M  version 命令来测试的最大堆内存是 -Xmx与 -XX:PermSize的 和 比如系统支持最大的jvm堆大小事1.5G,那  -Xmx1024m  -XX:PermSize=768M 是无法运行的。
       
第三种:无法创建新的线程。
        这种现象比较少见,也比较奇怪,主要是和jvm与系统内存的比例有关。
        这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。有人发现,在线程个数很多的情况下,你分配给JVM的内存越多,那么,上述错误发生的可能性就越大。
       
        产生这种现象的原因如下(从这个blog中了解到原因:http://hi.baidu.com/hexiong/blog/item /16dc9e518fb10c2542a75b3c.html ):

        每一个32位的进程最多可以使用2G的可用内存,因为另外2G被操作系统保留。这里假设使用1.5G给JVM,那么还余下500M 可用内存。这500M内存中的一部分必须用于系统dll的加载,那么真正剩下的也许只有400M,现在关键的地方出现了:当你使用Java创建一个线程,在JVM的内存里也会创建一个Thread对象,但是同时也会在操作系统里创建一个真正的物理线程(参考JVM规范),操作系统会在余下的400兆内存里创建这个物理线程,而不是在JVM的1500M的内存堆里创建。在jdk1.4里头,默认的栈大小是256KB,但是在jdk1.5里头,默认的栈大小为 1M每线程,因此,在余下400M的可用内存里边我们最多也只能创建400个可用线程。

        这样结论就出来了,要想创建更多的线程,你必须减少分配给JVM的最大内存。还有一种做法是让JVM宿主在你的JNI代码里边。

给出一个有关能够创建线程的最大个数的估算公式:

        (MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads

        对于jdk1.5而言,假设操作系统保留120M内存:
        1.5GB JVM: (2GB-1.5Gb-120MB)/(1MB) = ~380 threads
        1.0GB JVM: (2GB-1.0Gb-120MB)/(1MB) = ~880 threads
        在2000/XP/2003的boot.ini里头有一个启动选项,好像是:/PAE /3G ,可以让用户进程最大内存扩充至3G,这时操作系统只能占用最多1G的虚存。那样应该可以让JVM创建更多的线程。
        因此这种情况需要结合操作系统进行相关调整。

因此:我们需要结合不同情况对tomcat内存分配进行不同的诊断才能从根本上解决问题。

 

--------------------------------------------------------------------------------
http://laoguo.blog.51cto.com/211591/85419

java.lang.OutOfMemoryError: Java heap space 解决方法
这个问题的根源是jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现.设置的方法主要是几个.
1.可以在windows 更改系统环境变量
加上JAVA_OPTS=-Xms64m -Xmx512m
2,如果用的tomcat,在windows下,可以在
C:\tomcat5.5.9\bin\catalina.bat  中加上:
set JAVA_OPTS=-Xms64m -Xmx256m
位置在: rem Guess CATALINA_HOME if not defined  这行的下面加合适.
3.如果是linux系统
Linux  在{tomcat_home}/bin/catalina.sh的前面,加
set JAVA_OPTS='-Xms64 -Xmx512'

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/f_zongjian/archive/2010/07/09/5723665.aspx

分享到:
评论

相关推荐

    tomcat7安装使用及jvm连接数参数调优

    Tomcat7 安装使用及 JVM 连接数参数调优 Tomcat7 是一个流行的 Java Web 服务器,主要用于部署和管理基于 Java 的 Web 应用程序。为了确保 Tomcat7 的稳定运行和高效性能,需要对其进行合理的安装、配置和优化。...

    tomcat配置 连接数(优化)

    标题中的“Tomcat配置连接数(优化)”指的是在Apache Tomcat服务器中调整与处理并发请求相关的设置,以提升服务器的性能和稳定性。这通常涉及到调整最大连接数、线程池大小、超时时间等核心参数。在高并发场景下,...

    linux下tomcat优化设置最大连接数内存jconsole监控.docx

    ### Linux 下 Tomcat 优化设置最大连接数及内存 JConsole 监控 #### 一、Tomcat 内存优化 ##### 1.1 基本原理 在启动 Java 应用程序时,JVM(Java 虚拟机)会为应用程序分配一定的初始内存和最大内存。这些设置对...

    关于tomcat乱码以及tomcat jvm 内存溢出问题的解决方案和理论

    它包含了MySQL服务器的启动参数和配置选项,如端口号、最大连接数、日志设置等。但在这里,由于没有提供具体的信息,我们无法深入讨论,只能将其作为一个可能的上下文背景。 综上所述,解决Tomcat的乱码问题需要...

    JBOSS\Tomcat最大连接数配置和jvm内存配置.docx

    【JBOSSTomcat最大连接数配置和JVM内存配置】 在JBOSSTomcat服务器的性能优化中,最大连接数配置和JVM内存配置是两个至关重要的环节,它们直接影响到服务器的响应速度和稳定性,尤其对于处理大量并发请求的场景。 ...

    Tomcat JVM调优-TomcatJVM.zip

    2. JConsole和VisualVM:这两款工具可以连接到JVM,实时查看和分析性能数据,帮助识别性能瓶颈。 3. GC日志:开启-XX:+PrintGCDetails和-XX:+PrintGCDateStamps,记录详细的垃圾回收信息,有助于分析GC行为。 五、...

    JVM-Tomcat线程-数据库连接池设置建议.docx

    ### JVM-Tomcat线程-数据库连接池设置建议 #### 一、JVM参数设置 在设置JVM参数时,我们需要遵循一定的原则以确保应用程序能够高效稳定地运行。以下是一些具体的设置指南: 1. **Java堆大小设置**: - `Xmx` 和 ...

    如何配置Tomcat的JVM虚拟机内存大小

    正确配置Tomcat的JVM内存和连接器参数,对于优化Web应用性能、提升用户体验至关重要。通过对`-Xms`、`-Xmx`等参数的细致调整,结合适当的垃圾回收策略,以及合理设置连接器参数,可以显著增强Tomcat服务器的稳定性和...

    如何设置Tomcat的JVM虚拟机内存大小

    ### 如何设置Tomcat的JVM虚拟机内存大小 在部署和运行基于Java的应用程序时,经常需要调整Tomcat服务器的JVM(Java虚拟机)内存配置以优化性能。合理设置JVM内存对于确保应用程序稳定运行至关重要。本文将详细介绍...

    jvm虚拟机参数调优,tomcat调优

    Tomcat作为流行的Java应用服务器,其性能优化也与JVM设置紧密相关。本篇文章将深入探讨JVM参数调优以及如何针对Tomcat进行优化。 首先,JVM调优主要包括堆内存分配、垃圾收集器选择、线程池配置、类加载机制调整等...

    tomcat-jvm优化

    本文将深入探讨如何通过调整JVM的设置来优化Tomcat服务器,尤其是关于内存管理和连接器优化的关键知识点。 #### 二、JVM内存优化 ##### 1. 初始化堆与最大堆设置 JVM启动时,可以通过-Xms和-Xmx参数来设置初始化...

    JVM优化3(Tomcat参数调优,JVM参数调优,jvm字节码,代码优化).pdf

    总结而言,该文档覆盖了Tomcat服务器优化、JVM参数调整、字节码级别的优化以及代码层面的优化等多个方面,旨在通过一系列配置和操作,提升Java应用以及Web服务器的性能和效率。同时,也提到了性能测试的重要性和在...

    tomcat-jvm调优

    通过合理设置上述参数,可以显著提升Tomcat服务器的并发处理能力和响应速度,进而改善整体应用性能。需要注意的是,最佳的参数配置往往依赖于具体的应用场景和业务需求,因此建议结合实际测试结果进行调整优化。

    Tomcat 调优及 JVM 参数优化

    为了确保这些应用高效、稳定地运行,调优Tomcat和JVM参数至关重要。这篇文章将深入探讨Tomcat调优与JVM参数优化的各个方面,帮助你提升服务器性能。 首先,我们来了解一下Tomcat调优的基础知识。Tomcat调优主要包括...

    Tomcat性能优化及JVM内存工作原理

    例如,调整最大连接数、工作模式、启用gzip压缩、调整JVM内存大小等。 Tomcat有三种工作模式:Bio、Nio和Apr。Bio是默认的工作模式,阻塞式I/O操作,没有任何优化技术处理,性能比较低。Nio是非阻塞式I/O操作,有...

    Tomcat6参数设置

    ### Tomcat6参数设置详解 #### 一、内存参数配置 Tomcat作为一款广泛使用的Java应用服务器和Web容器,其性能优化尤为重要。特别是在资源管理方面,合理地设置内存参数能够显著提升应用程序的运行效率和稳定性。 *...

    监控tomcat内存使用情况

    要启用这个功能,我们需要在Tomcat的配置文件`conf/tomcat-users.xml`中设置相应的角色和用户。在上述给出的XML片段中,我们看到了四个预定义的角色:`tomcat`、`role1`、`manager`和`admin`,以及与之关联的用户。...

    Tomcat和MySql和Jvm和Oracle性能监控和调优

    在IT行业中,性能监控和调优是至关重要的环节,尤其对于服务器端应用如Tomcat、数据库系统MySQL和Oracle,以及Java虚拟机(JVM)来说。这些组件在支撑大规模业务时,性能表现直接影响到系统的响应速度和用户体验。...

    redis集群jvm调优实战MySQL5.6性能优化&Tomcat7优化.rar

    文档可能讲解了如何调整连接器配置,如最大连接数、超时设置,以及线程池的管理。另外,可能还会介绍如何通过部署多实例、负载均衡来提高整体服务的可用性和性能。 总结来说,这个资料集合提供了全面的优化策略,...

    jvm优化参数配置

    - `-XX:+PrintFlagsFinal`打印所有默认和已设置的JVM选项,`-XX:+PrintGCDetails`和`-XX:+PrintGCDateStamps`用于输出详细的GC日志,便于分析。 10. **内存泄漏检测**: - 使用`-XX:+HeapDumpOnOutOfMemoryError`...

Global site tag (gtag.js) - Google Analytics