首页 > 代码库 > jvm架构以及Tomcat优化

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"/>

 

jvm架构以及Tomcat优化