zoukankan      html  css  js  c++  java
  • JVM虚拟机详解+Tomcat性能优化

    1.JVM(java virtual mechinal)

    1)JVM有完善的硬件架构,如处理器、堆栈、寄存器当,还具有相应的指令系统。
    
    (2)JVM的主要工作时解释自己的指令集(即字节码),并映射到本地的cpu的指令集或OS系统调用。

    2.JVM虚拟机主要有堆、栈、本地方法栈、方法区组成

    注:(1)堆和栈都是一种数据项按序排列的数据结构,只能在一端对数据项进行插入和删除。
    
      (2)在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护端点和现场。
    
      (3)堆、队列,先进先出。
    
      (4)栈,先进后出。

    (1)堆

    1)所有通过new新建的对象,其内存在堆中分配,堆的大小可以通多-Xmx和-Xms来控制。
    
    2)堆被划分为新生代和旧生代。
    
    3)新生代又被进一步划分为Eden和Survivor区。
    
    4)Survivor由From Space和To Space组成。
    1)新生代,新建的对象都是用新生代分配内存。
    
    2)Eden空间不足的时候,会把存活的对象转移到Survivor中。
    
    3)新生代大小可以由-Xmn来控制,也可以用-XX:SurvivorRatio来控制Eden和Survivor的比例。
    1)旧生代,用于存放新生代中经过多次垃圾回收仍然存活的对象。
    1)持久带,(Permanent Space)实现方法区,主要存放所有已加载的类信息、方法信息、常量池等。
    
    2)可以通过-XX:PermSize和-XX:MaxPermSize来指定持久带初始化值和最大值。
    
    3)Permanent Space并不等同于方法区,只不过是Hostspot JVM用Permanent Space来实现方法区而已。
    
    4)有些虚拟机没有Permanent Space而用其他机制来实现方法区。
    -Xmx    #最大堆内存
    -Xms    #初始时堆内存
    -XX:MaxNewSize    #最大年轻区内存
    -XX:NewSize    #初始时年轻区内存,通常为Xmx的1/3或1/4。
    #新生代=Eden+2两个Survivor空间。
    #实际可用空间=Eden+1个Survivor,即90%。
    -XX:MaxPermSize    #最大持久带内存
    -XX:PermSize        #初始时持久带内存
    -XX:+PrintGCDetails    #打印GC信息
    -XX:NewRation     #新生代与老年代比例
    #例:-XX:NewRetio=2,则新生代占整个堆空间的1/3,老年带占2/3 ;
    -XX:SurvivorRatio    #新生代中Eden与Survivor的比值。默认为8,即Eden占新生代空间8/10,另外两个Survivor各占1/10;

    (2)栈

    1)每个线程执行每个方法的时候,都会在栈中申请一个栈帧。
    
    2)每个栈帧包括局部变量区和操作数栈,用于存放此方法调用过程中的临时变量参数和中间结果。
    
    3)-xss:设置每个线程堆栈大写.JDK1.5+ ,每个线程堆栈大写为1M,如果栈不是很深,1M是够用的。

    (3)本地方法栈

    1)用于支持native方法的执行,存储了每个native方法调用的状态。

    (4)方法区

    1)存放要加载的类信息、静态变量、final类型的常量、属性和方法信息。
    
    2)JVM用持久带来存放方法区,可以通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值。
    1)一个普通的java对象A出生在新生代的Eden区,当Eden区新生对象太多时,对象A会被调去Survivor区。
    
    2)Survivor区又分from区和to区;
    
    3)对象A有时会在from区,有时会在to区。
    
    4)一定时间后,对象A会被调到老年代。
    
    5)对象A在老年代达到一定时间时,就会被java回收。

      3.tomcat性能优化

    1)Linux内核的优化
    
    2)服务器资源配置的优化
    
    3)tomcat参数优化
    
    4)配置负载集群优化
    配置文件参数优化
    (1)关闭DNS查询,配置最大并发;
    (2)maxThreads:tomcat启动的最大线程数,即同时处理的任务个数,默认为200;
    (3)acceptCount:当tomcat启动的线程数达到最大时,接受排队的请求个数,默认为100;
    (4)这些值不是越大越好,需根据实际情况调整。
    <Connector port="8080"   
            protocol="org.apache.coyote.http11.Http11NioProtocol"  
               connectionTimeout="20000"  
               redirectPort="443"   
               maxThreads="5000" 
               minSpareThreads="20"  
               acceptCount="10000" 
               disableUploadTimeout="true" 
               enableLookups="false"   
               URIEncoding="UTF-8" />
    #以上配置 适用于128G 内存服务器
    #参数注解:
    protocol=“org.apache.coyote.http11.Http11NioProtocol”  #调整工作模式为Nio
    connectionTimeout=“20000”  #连接超时,单位毫秒,0代表不限制,当前调整为20s。
    redirectPort=“443”  #当用户用http请求某个资源,而该资源本身又被设置了必须要https方式访问,此时Tomcat会自动重定向到这个redirectPort设置的https端口。
    maxThreads=“5000”  #最大线程数量,线程数量占用越多,内存和CPU占用会越多
    minSpareThreads=“20”  #最小空闲的线程数量
    acceptCount=“10000”  #请求最大值,超过10000,会接受客户的请求,但是会将请求放置到队列中。
    disableUploadTimeout=“true”  #禁用上传超时
    enableLookups=“false”  #关闭dns解析,提高响应时间
    URIEncoding=“UTF-8”  #设定字符集为UTF-8

      4.JVM参数调整  vim bin/catalina.sh或 vim /etc/profile,在profile环境中配置需加export

    CATALINA_OPTS="$CATALINA_OPTS -Xms512M -Xmx1024M -Xmn100M -XX:SurvivorRatio=4 -XX:+UseConcMarkS
    weepGC -XX:CMSInitiatingOccupancyFraction=82 -DLOCALE=UTF-16LE  -DRAMDISK=/ -DUSE_RAM_DISK=ture
     -DRAM_DISK=true -Djava.rmi.server.hostname=192.168.111.128 -Dcom.sun.management.jmxremote.port
    =10000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
    -Xms<size> #表示JVM初始化堆的大小:开启java程序最初开启占用的内存
    -Xmx<size> #表示JVM堆的最大值 : 开启程序之后占用最大的内存
           #以上2个参数需要根据应用程序的需要的进行调整,如果使用的内存超出了最大值xmx,通常会提示内存溢出,也会导致程序崩溃。
           #建议-xmx 这个值通常会设置为当前内存的80%;
    -xmn       #表示年轻带的内存大小,推荐设置整个堆3/8的内存。
  • 相关阅读:
    完成了一次子网站向顶级网站的迁移
    Sharepoint中子网站迁移到顶级网站的方法
    Chain Of Responsibility——设计模式学习笔记
    短信PDU编码解析
    Decorator模式——设计模式学习笔记
    adb常用命令和logcat使用
    Explicit——谨慎定义隐式类型转换函数
    FlyWeight模式——设计模式学习笔记
    Facade模式——设计模式学习笔记
    宏——#define与#undef
  • 原文地址:https://www.cnblogs.com/IMSCZ/p/11058393.html
Copyright © 2011-2022 走看看