• jvm架构以及Tomcat优化


     

    JVM栈

    JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址。

    堆内存用于存放由new创建的对象和数组

    方法区域(Method Area)

    (1)在Sun JDK中这块区域对应的为PermanetGeneration,又称为持久代。

    (2)方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。

    运行时常量池(Runtime Constant Pool)

    存放的为类中的固定的常量信息、方法和Field的引用信息等,其空间从方法区域中分配。

    程序计数器

    程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看

    做是当前线程所执行的字节码的行号指示器

    tomcat服务器优化

    1、JDK内存优化

       根据服务器物理内容情况配置相关参数优化tomcat性能。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。 Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大.

    Tomcat默认可以使用的内存为128MB,Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下设置: JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】 -XX:PermSize=64M -XX:MaxPermSize=128m' 需要把几个参数值调大。例如: JAVA_OPTS='-Xms256m -Xmx512m' 表示初始化内存为256MB,可以使用的最大内存为512MB。

      参数详解  

       -server  启用jdk的 server版;

       -Xms    java虚拟机初始化时的最小内存;

       -Xmx    java虚拟机可使用的最大内存;

       -XX:PermSize    内存永久保留区域

       -XX:MaxPermSize   内存最大永久保留区域

       -Xmn    jvm最小内存

    32G 内存配置示例:

    JAVA_OPTS="$JAVA_OPTS  -Xms10g -Xmx10g -XX:PermSize=1g -XX:MaxPermSize=2g -Xshare:off -Xmn1024m

    2、tomcat线程优化

    在tomcat配置文件server.xml中的配置中,和连接数相关的参数有:

    maxThreads:Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值150。

    acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。

    minSpareThreads: Tomcat初始化时创建的线程数。默认值25。

    maxSpareThreads:一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值75。

    enableLookups:是否反查域名,默认值为true。为了提高处理能力,应设置为false

    connnectionTimeout:网络连接超时,默认值60000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

    maxKeepAliveRequests:保持请求数量,默认值100。 bufferSize: 输入流缓冲大小,默认值2048 bytes。

    compression:压缩传输,取值on/off/force,默认值off。 其中和最大连接数相关的参数为maxThreads和acceptCount。如果要加大并发连接数,应同时加大这两个参数。

    32G 内存配置示例:

    <Connectorport="8080" protocol="HTTP/1.1"

                   connectionTimeout="20000" maxThreads="1000" minSpareThreads="60" maxSpareThreads="600"  acceptCount="120"  

                   redirectPort="8443" URIEncoding="utf-8"/>

  • 相关阅读:
    Java理论-Java高级
    Java理论-Java基础
    Java理论-JVM
    Nginx的使用总结
    修改tomcat端口号
    测试目录
    常用的设计模式汇总,超详细!
    Java高级程序员(5年左右)面试的题目集
    集合类--最详细的面试宝典--看这篇就够用了(java 1.8)
    Java面试宝典(2020版)
  • 原文地址:https://www.cnblogs.com/chen1-kerr/p/6900097.html
Copyright © 2020-2023  润新知