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的内存。

原文地址:https://www.cnblogs.com/shitou-st/p/11058393.html

时间: 2024-10-09 11:21:23

JVM虚拟机详解+Tomcat性能优化的相关文章

1.SQL优化系列--&gt;高手详解SQL性能优化十条经验

1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用. 解决办法: 其实只需要对该脚本略做改进,查询速度便会提高近百倍.改进方法如下: a.修改前台程序——把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台就帮忙定位到具体的供应商,这样在调用后台程序时,这列就可以直接用等于来关联了. b.直接修改后台——根据输入条件,先查出符合条件的供应商,并把相关记录保存在一个

详解 Android 性能优化

为什么关注性能 对于一款APP,用户首先关注的是 app的性能,而不是APP本身的属性功能,用户不关心你是否是搞社交,是否搞电商,是否是一款强大的美图滤镜app,用户首先关注的是 性能--性能不好,用户会直接卸载,在应用市场给一个恶狠狠得差评,小则影响产品口碑,大则影响公司的品牌和声誉,作为程序员,app的性能更应该作为我们关注的一个功能,而不是出了问题 才去门头苦恼加班加点的负担. 老实说,提高app性能的确非常难,处理这些问题 你必须知道: 应用速度慢的原因 还必须正确使用分析工具来分析数据

Google官方 详解 Android 性能优化【史诗巨著之内存篇】

尊重博主原创,如需转载,请附上本文链接http://blog.csdn.net/chivalrousman/article/details/51553114#t16 为什么关注性能 对于一款APP,用户首先关注的是 app的性能,而不是APP本身的属性功能,用户不关心你是否是搞社交,是否搞电商,是否是一款强大的美图滤镜app,用户首先关注的是 性能--性能不好,用户会直接卸载,在应用市场给一个恶狠狠得差评,小则影响产品口碑,大则影响公司的品牌和声誉,作为程序员,app的性能更应该作为我们关注的一

高手详解SQL性能优化十条经验

1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用. 解决办法: 其实只需要对该脚本略做改进,查询速度便会提高近百倍.改进方法如下: a.修改前台程序——把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台就帮忙定位到具体的供应商,这样在调用后台程序时,这列就可以直接用等于来关联了. b.直接修改后台——根据输入条件,先查出符合条件的供应商,并把相关记录保存在一个

JVM虚拟机详解

1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收堆和一个存储方法域. JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行.JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上

Java虚拟机详解——JVM常见问题总结

[正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考之前的系列文章,尤其是那篇:Java虚拟机详解04--GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾回收.类加载机制. 先把本文的目录画一个思维导图:(图的源文件在本文末尾) 一.Java引用的四种状态: 强引用:  用的最广.我们平时写代码时,new一个Object存放在堆内存,然后用一个引用指向它,这就是强引用. * 如果一个对象具有强引用,那垃圾回收器绝不会回收它*.当内存空间不足,Java虚拟机宁

Java虚拟机详解-JVM常见问题总结

[正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾回收.类加载机制. 先把本文的目录画一个思维导图:(图的源文件在本文末尾) 一.Java引用的四种状态: 强引用: 用的最广.我们平时写代码时,new一个Object存放在堆内存,然后用一个引用指向它,这就是强引用. 如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁

JVM 参数详解

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步. PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance.GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可

详解Tomcat 配置文件server.xml

前言 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛.server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的一个组件:通过对xml文件中元素的配置,可以实现对Tomcat中各个组件的控制.因此,学习server.xml文件的配置,对于了解和使用Tomcat至关重要. 本文将通过实例,介绍server.xml中各个组件的配置,并详细说明Tomcat各个核心组件的作用以及各个组件之间的相互关系. 说明:由于s