`

tomcat参数设置

阅读更多

set JAVA_OPTS=-server -Xms1024m -Xmx1236m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -verbose:gc -Xloggc:..\logs\gc.log -XX:+HeapDumpOnOutOfMemoryError -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="9004" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"

Tomcat优化
2009年03月04日 星期三 下午 03:21

内存由 Perm 和 Heap 组成. 其中

Heap = {Old + young = { Eden , from, to } }


? Young及Old区域用来存放由Java类而生成的内存对象;
? Perm区域用来存放Java类及其他虚拟机自己的静态数据

垃圾回收描述:

垃圾回收分多级,0级为全部(Full)的垃圾回收,会回收OLD段中的垃圾;1级或以上为部分垃圾回收,只会回收Young中的垃圾,内存溢出通常发生于OLD段或Perm段垃圾回收后,仍然无内存空间容纳新的Java对象的情况。

当一个URL被访问时,内存申请过程如下:
A. JVM会试图为相关Java对象在Eden中初始化一块内存区域
B. 当Eden空间足够时,内存申请结束。否则到下一步
C. JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的垃圾回收);释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区/OLD区
D. Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区
E. 当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级)
F. 完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现”out of memory错误”

Java堆相关参数:

ms/mx:定义YOUNG+OLD段的总尺寸,ms为JVM启动时YOUNG+OLD的内存大小;mx为最大可占用的YOUNG+OLD内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

NewSize/MaxNewSize:定义YOUNG段的尺寸,NewSize为JVM启动时YOUNG的内存大小;MaxNewSize为最大可占用的YOUNG内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

PermSize/MaxPermSize:定义Perm段的尺寸,PermSize为JVM启动时Perm的内存大小;MaxPermSize为最大可占用的Perm内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。

SurvivorRatio:设置Survivor空间和Eden空间的比例

例:
MEM_ARGS="-Xms512m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:SurvivorRatio=6"
一般xmx设置为内存一半,newsize设置为xmx的一半permsize设置为xmx的1/4
在上面的例子中:
YOUNG+OLD: 512M
YOUNG: 256M
Perm: 128M
Eden: YOUNG*6/(6+1+1)=192M
Survivor: YOUNG/(6+1+1)=32M

Java堆的总尺寸=YOUNG+OLD+Perm=640M

-XX
基于 Sun 的 Java 2 Standard Edition(J2SE)5 有生成垃圾回收功能,这允许分隔内存池以包含不同时效的对象。垃圾回收循环根据时效收集与其他对象彼此独立的对象。使用其他参数,您可以单独设置内存池的 大小。为了实现更好的性能,您应该对包含短期存活对象的池的大小进行设置,以使该池中的对象的存活时间不会超过一个垃圾回收循环。新生成的池的大小由 NewSize 和 MaxNewSize 参数确定。

第一次垃圾回收循环中存活下来的对象转移到另一个池中。生还者池的大小由参数 SurvivorRatio 确定。 如果垃圾回收变成了瓶颈,您可以尝试定制生成池设置。要监控垃圾回收统计信息,使用 Tivoli Performance Viewer 中的对象统计信息或 verbose:gc 配置设置。 输入下列值:
-XX:NewSize (lower bound)-XX:MaxNewSize (upper bound) -XX:SurvivorRatio=NewRatioSize -XX:NewSize 320m 此值设大可调大新对象区,减少Full GC次数-XX:userParNewGC 可用来设置并行收集【多CPU】-XX:ParallelGCThreads 可用来增加并行度【多CPU】-XXUseParallelGC 设置后可以使用并行清除收集器【多CPU】下面的命令把整个堆设置成128m,新域比率设置成3,即新域与旧域比例为1:3,新域为堆的1/4或 32M:java –Xms128m –Xmx128m –XX:NewRatio =3

缺省值为:NewSize=2m MaxNewSize=32m SurvivorRatio=2。但是,如果 JVM 的堆大小大于 1GB,则应该使用值:-XX:newSize=640m -XX:MaxNewSize=640m -XX:SurvivorRatio=16,或者将堆的总大小的 50% 到 60% 分配给新生成的池。



2. JVM内存分析工具

可以使用HPjmeter来进行分析,需要将JDK的GC日志打开(-verbose:gc),可定期用HPjmeter对GC日志进行分析,Demo工具可提供Java Heap内存变化图,以及垃圾回收图,这样就很容易分析内存溢出时是哪个段产生问题

3. 内存溢出的可能性

1. OLD段溢出

这种内存溢出是最常见的情况之一,产生的原因可能是:
1) 设置的内存参数过小(ms/mx, NewSize/MaxNewSize)
2) 程序问题
? 单个程序持续进行消耗内存的处理,如循环几千次的字符串处理,对字符串处理应建议使用StringBuffer。此时不会报内存溢出错,却会使系统持续垃圾收集,无法处理其它请求,相关问题程序可通过Thread Dump获取(见系统问题诊断一章)

? 单个程序所申请内存过大,有的程序会申请几十乃至几百兆内存,此时JVM也会因无法申请到资源而出现内存溢出,对此首先要找到相关功能,然后交予程序员修改,要找到相关程序,必须在Apache日志中寻找。

? 当Java对象使用完毕后,其所引用的对象却没有销毁,使得JVM认为他还是活跃的对象而不进行回收,这样累计占用了大量内存而无法释放。由于目前市面上还没有对系统影响小的内存分析工具,故此时只能和程序员一起定位。

2. Perm段溢出

通常由于Perm段装载了大量的Servlet类而导致溢出,目前的解决办法:
1) 将PermSize扩大,一般256M能够满足要求
2) 若别无选择,则只能将servlet的路径加到CLASSPATH中,但一般不建议这么处理

3. C Heap溢出

系统对C Heap没有限制,故C Heap发生问题时,Java进程所占内存会持续增长,直到占用所有可用系统内存。以下是一个案例,发生在INCOME:

假如项目的生产环境为HPUX,使用的数据库连接池为OCI模式,在应用服务器所安装的Oracle客户端版本为Oracle 9201

症状:Java进程所占内存不断增长,直到使用完系统所有内存而崩溃。

寻找问题方法:

对UNIX操作系统来说,Java Heap在进程的数据段、C Heap在进程的堆栈段,我们持续分析Java进程的数据段及堆栈段的增长情况(系统有相关的内存分析的系统调用),结果发现其堆栈段持续增长,说明问题不在Java相关的部分,而是在其它部分。

  • 堆(Heap)和非堆(Non-heap)内存
    按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。
  • 堆内存分配
    JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、 -Xmx相等以避免在每次GC 后调整堆的大小。
  • 非堆内存分配
    JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
  • JVM内存限制(最大值)
    首先JVM内存限制于实际的最大物理内存(废话!呵呵),假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽 然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系 统下为2G-3G),而64bit以上的处理器就不会有限制了。
  •  

    1.连接池:
    第一步,打开共享的线程池

    <Service name="Catalina">
    <!--The connectors can use a shared executor, you can define one or more named thread pools-->

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/>
    默认前后是注释<!-- -->掉的,去掉就可以了。其中

    name
    The name used to reference this pool in other places in server.xml. The name is required and must be unique.
    这个是线程池的名字,必须唯一,我们在后面的配置里要用到这个东西

    namePrefix
    (String) The name prefix for each thread created by the executor. The thread name for an individual thread will be namePrefix+threadNumber
    线程的名字前缀,用来标记线程名字的,这样每个线程就用这个前缀加上线程编号了,比如
    catalina-exec-1
    catalina-exec-2

    maxThreads
    (int) The max number of active threads in this pool, default is 200
    允许的最大线程池里的线程数量,默认是200,大的并发应该设置的高一些,反正只是限制而已,不占用资源

    minSpareThreads
    (int) The minimum number of threads always kept alive, default is 25
    最小的保持活跃的线程数量,默认是25.这个要根据负载情况自行调整了。太小了就影响反应速度,太大了白白占用资源。

    maxIdleTime
    (int) The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less or equal to minSpareThreads. Default value is 60000(1 minute)
    超过最小活跃线程数量的线程,如果空闲时间超过这个设置后,会被关别。默认是1分钟。

    threadPriority
    (int) The thread priority for threads in the executor, the default is Thread.NORM_PRIORITY
    线程的等级。默认是Thread.NORM_PRIORITY


    第二步
    在 Connector里指定使用共享线程池

    <Connector executor="tomcatThreadPool"
                   port="9100" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />

    <Connector port="9100" protocol="HTTP/1.1"
    connectionTimeout="2000"
    redirectPort="8443" URIEncoding="UTF-8" acceptCount="5000" maxThreads="2000"/>

    注意,一旦使用了线程池,则其它的线程属性,比如 maxThreads等将被忽略

    ————————————————————————————————————

    tomcat优化:

    JAVA_OPTS="-Xms2048m -Xmx4096m -XX:MaxNewSize=512m -XX:MaxPermSize=512M"
    JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=gbk -Ddefault.client.encoding=gbk -Duser.language=zh -Duser.rigin=cn"

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

    相关推荐

      白色简洁风格的软件UI界面后台管理系统模板.zip

      白色简洁风格的软件UI界面后台管理系统模板.zip

      自动软包电芯极耳短路测试精切一体机sw17可编辑全套技术资料100%好用.zip

      自动软包电芯极耳短路测试精切一体机sw17可编辑全套技术资料100%好用.zip

      RuntimeException如何解决.md

      RuntimeException如何解决.md

      云链客服需要注意的事项

      定期分析系统的投资回报率(ROI)是确保企业在实施云链客服系统后获得实际效益的关键步骤。以下是一个系统的框架和方法,帮助您有效地进行投资回报率分析。 投资回报率(ROI)分析框架 一、定义投资回报率 投资回报率(ROI)是衡量投资效率的指标,通常通过以下公式计算: ROI= 成本 收益−成本 ​ ×100% 收益:通过实施系统所带来的直接经济利益,例如收入增加、成本节省等。 成本:系统的实施和运营成本,包括初始投资和持续运营费用。 二、确定收益来源 直接收益 销售增长:由于客服系统提升了客户满意度和响应速度,导致客户购买量增加。 客户保留率提高:系统帮助降低客户流失率,保持长期客户关系。 跨卖和追加销售:通过更好的客户互动和数据分析,提升交叉销售和追加销售的机会。 间接收益 运营效率提升:客服人员的工作效率提高,能够处理更多客户请求,减少人力成本。 品牌形象增强:客户体验的改善有助于提升品牌形象,吸引新客户。 客户忠诚度提升:满意的客户更可能成为回头客,提升长期收益。

      白色简洁风格的室内设计案例源码下载.rar

      白色简洁风格的室内设计案例源码下载.rar

      (177373454)html+css+js学习代码.zip

      html+css+js学习代码html+css+js学习代码html+css+js学习代码 html+css+js学习代码html+css+js学习代码html+css+js学习代码 html+css+js学习代码html+css+js学习代码html+css+js学习代码 html+css+js学习代码html+css+js学习代码html+css+js学习代码 html+css+js学习代码html+css+js学习代码html+css+js学习代码 html+css+js学习代码html+css+js学习代码html+css+js学习代码 html+css+js学习代码html+css+js学习代码html+css+js学习代码 html+css+js学习代码html+css+js学习代码html+css+js学习代码 html+css+js学习代码html+css+js学习代码html+css+js学习代码 html+css+js学习代码html+css+js学习代码html+css+js学习代码 html+css+js学习代码html+css+js学习代码html+css+j

      三相逆变 单相 三相逆变器 SPWM -stm32主控(输入、输出具体可根据需要设定),本逆变器可以二次开发 本内容只包括 逆变程序,实现变频(0~100Hz)、变压调节,均有外接按键控制(使用

      三相逆变 单相 三相逆变器 SPWM ---stm32主控(输入、输出具体可根据需要设定),本逆变器可以二次开发。 本内容只包括 逆变程序,实现变频(0~100Hz)、变压调节,均有外接按键控制(使用C语言实现)。

      基于STM32单片机的激光雕刻机控制系统设计-含详细步骤和代码

      内容概要:本文详细介绍了基于STM32单片机的激光雕刻机控制系统的设计。系统包括硬件设计、软件设计和机械结构设计,主要功能有可调节激光功率大小、改变雕刻速率、手动定位、精确雕刻及切割。硬件部分包括STM32最小系统、步进电机驱动模块、激光发生器控制电路、人机交互电路和串口通信电路。软件部分涉及STM32CubeMX配置、G代码解析、步进电机控制、激光功率调节和手动定位功能的实现。 适合人群:对嵌入式系统和激光雕刻机感兴趣的工程师和技术人员。 使用场景及目标:① 适用于需要高精度激光雕刻的应用场合;② 为开发类似的激光雕刻控制系统提供设计参考。 阅读建议:本文提供了详细的硬件和软件设计方案,读者应结合实际应用场景进行理解,重点关注电路设计和代码实现。

      北航软件体系架构.7z

      北航软件体系架构.7z

      白色简洁风格的高端汽车预订企业网站源码下载.zip

      白色简洁风格的高端汽车预订企业网站源码下载.zip

      白色宽屏风格的时尚摄影图片网站模板下载.zip

      白色宽屏风格的时尚摄影图片网站模板下载.zip

      (31028834)大数据技术之Hadoop(入门).docx

      ### 大数据技术之Hadoop(入门)知识点详解 #### 第1章 大数据概论 ##### 1.1 大数据概念 大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。这些数据具有体量巨大、来源多样化、格式复杂等特点。 ##### 1.2 大数据特点(4V) **Volume(体量大)**:指的是数据量非常庞大。 **Velocity(速度快)**:指数据产生的速度极快。 **Variety(多样性)**:指数据类型多样,不仅限于结构化数据,还包括大量半结构化和非结构化数据。 **Value(价值密度低)**:尽管数据总量很大,但真正有价值的信息可能只占一小部分。 ##### 1.3 大数据应用场景 - **金融行业**:风险控制、精准营销、反欺诈等。 - **零售行业**:客户行为分析、库存管理优化等。 - **医疗健康**:疾病预测、个性化治疗方案制定等。 - **交通物流**:智能交通系统、物流路径优化等。 ##### 1.4 大数据发展前景 随着物联网、云计算等技术的发展,大数据的应用场景将会更加广泛。预计未来几年内,大数据技术将更加成熟,处理能力更强,为

      UnknownHostException(解决方案).md

      UnknownHostException(解决方案).md

      LP3_PLC程序培训_01.zip

      LP3_PLC程序培训_01.zip

      白色简洁风格的重型汽车销售企业网站源码下载.zip

      白色简洁风格的重型汽车销售企业网站源码下载.zip

      白色简洁风格的摄影图片模板下载.zip

      白色简洁风格的摄影图片模板下载.zip

      白色宽屏风格的农家乐有机蔬菜企业网站模板.rar

      白色宽屏风格的农家乐有机蔬菜企业网站模板.rar

      北航智能自主系统.7z

      北航智能自主系统.7z

      白色简洁风格的网络实验室CSS模板.zip

      白色简洁风格的网络实验室CSS模板.zip

      (175218226)利用仿真实现定时器设计的门铃

      门铃是日常生活中常见的一种设备,它通过发出声音来通知人们有访客或者有其他重要事件发生。在信息技术领域,特别是在嵌入式系统中,利用单片机设计定时器门铃是一项基础且实用的技术实践。单片机,即单片微型计算机,因其集成度高、成本低、应用广泛,常被用于各种控制系统的开发。本文将详细探讨如何使用单片机实现定时器门铃的设计。 我们需要了解单片机的基本结构。单片机通常包括CPU、存储器(ROM和RAM)、定时/计数器、输入/输出接口等组成部分。其中,定时/计数器是实现定时器功能的关键。它可以通过对内部时钟脉冲的计数来达到定时的效果,或者对外部事件的计数来实现计数功能。 在设计定时器门铃时,我们会用到单片机的定时器功能。定时器工作模式通常有多种,如自由运行模式、捕获模式、比较模式等。对于门铃应用,我们可能选择自由运行模式,设置一个预设的时间间隔,当定时器溢出时,触发中断,从而启动门铃音效。 实现门铃的代码主要包括以下几个部分: 1. 初始化定时器:这一步通常包括设置定时器的工作模式、初值、分频系数等。例如,我们可以选择定时器工作在自动重装载模式,并设定合适的初值,使得定时器在一定时间后溢出。 2. 中断

    Global site tag (gtag.js) - Google Analytics