JVM虚拟机详解+Tomcat性能优化
1.JVM(java virtual mechinal)
()JVM有完善的硬件架构,如处理器、堆栈、寄存器当,还具有相应的指令系统。 ()JVM的主要工作时解释自己的指令集(即字节码),并映射到本地的cpu的指令集或OS系统调用。
2.JVM虚拟机主要有堆、栈、本地方法栈、方法区组成
注:()堆和栈都是一种数据项按序排列的数据结构,只能在一端对数据项进行插入和删除。 ()在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护端点和现场。 ()堆、队列,先进先出。 ()栈,先进后出。(1)堆
)所有通过new新建的对象,其内存在堆中分配,堆的大小可以通多-Xmx和-Xms来控制。 )堆被划分为新生代和旧生代。 )新生代又被进一步划分为Eden和Survivor区。 )Survivor由From Space和To Space组成。)新生代,新建的对象都是用新生代分配内存。 )Eden空间不足的时候,会把存活的对象转移到Survivor中。 )新生代大小可以由-Xmn来控制,也可以用-XX:SurvivorRatio来控制Eden和Survivor的比例。)旧生代,用于存放新生代中经过多次垃圾回收仍然存活的对象。)持久带,(Permanent Space)实现方法区,主要存放所有已加载的类信息、方法信息、常量池等。 )可以通过-XX:PermSize和-XX:MaxPermSize来指定持久带初始化值和最大值。 )Permanent Space并不等同于方法区,只不过是Hostspot JVM用Permanent Space来实现方法区而已。 )有些虚拟机没有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)栈
)每个线程执行每个方法的时候,都会在栈中申请一个栈帧。 )每个栈帧包括局部变量区和操作数栈,用于存放此方法调用过程中的临时变量参数和中间结果。 )-xss:设置每个线程堆栈大写.JDK1.+ ,每个线程堆栈大写为1M,如果栈不是很深,1M是够用的。(3)本地方法栈
)用于支持native方法的执行,存储了每个native方法调用的状态。(4)方法区
)存放要加载的类信息、静态变量、final类型的常量、属性和方法信息。 )JVM用持久带来存放方法区,可以通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值。
)一个普通的java对象A出生在新生代的Eden区,当Eden区新生对象太多时,对象A会被调去Survivor区。 )Survivor区又分from区和to区; )对象A有时会在from区,有时会在to区。 )一定时间后,对象A会被调到老年代。 )对象A在老年代达到一定时间时,就会被java回收。
3.tomcat性能优化
)Linux内核的优化 )服务器资源配置的优化 )tomcat参数优化 )配置负载集群优化配置文件参数优化
()关闭DNS查询,配置最大并发;
()maxThreads:tomcat启动的最大线程数,即同时处理的任务个数,默认为200;
()acceptCount:当tomcat启动的线程数达到最大时,接受排队的请求个数,默认为100;
()这些值不是越大越好,需根据实际情况调整。<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= -DLOCALE=UTF-16LE -DRAMDISK=/ -DUSE_RAM_DISK=ture
-DRAM_DISK=true -Djava.rmi.server.hostname=192.168.111.128 -Dcom.sun.management.jmxremote.port
= -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的内存。
JVM虚拟机详解+Tomcat性能优化的更多相关文章
- 详解MySQL性能优化(二)
http://www.jb51.net/article/70530.htm 七.MySQL数据库Schema设计的性能优化高效的模型设计 适度冗余-让Query尽两减少Join 大字段垂直分拆-sum ...
- MapReduce过程详解及其性能优化
http://blog.csdn.net/aijiudu/article/details/72353510 废话不说直接来一张图如下: 从JVM的角度看Map和Reduce Map阶段包括: 第一读数 ...
- 高手详解SQL性能优化十条经验
1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用. 解决办法: 其实只需要对该脚本略做改进,查询速度便会 ...
- 高手详解SQL性能优化十条建议
1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用. 解决办法: 其实只需要对该脚本略做改进,查询速度便 ...
- MYSQL ini 配置文件详解及性能优化方案
my.ini分为两块:Client Section和Server Section. Client Section用来配置MySQL客户端参数. 要查看配置参数可以用下面的命令: show va ...
- JVM虚拟机详解
1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来 ...
- Java中JVM虚拟机详解
1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来 ...
- Java虚拟机详解----JVM常见问题总结
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Java性能分析之线程栈详解与性能分析
Java性能分析之线程栈详解 Java性能分析迈不过去的一个关键点是线程栈,新的性能班级也讲到了JVM这一块,所以本篇文章对线程栈进行基础知识普及以及如何对线程栈进行性能分析. 基本概念 线程堆栈也称 ...
随机推荐
- python学习之【第十六篇】:Python中的常用模块之OS模块、sys模块、random模块
1. OS模块 OS模块是与操作系统交互的一个接口.内部提供了以下方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname& ...
- go语言教程之浅谈数组和切片的异同
Hello ,各位小伙伴大家好,我是小栈君,上次分享我们讲到了Go语言关于项目工程结构的管理,本期的分享我们来讲解一下关于go语言的数组和切片的概念.用法和区别. 在go语言的程序开发过程中,我们避免 ...
- 关于vue ui组件
一.vue ui 组件 1: vue 当前很火前端框架vue 针对PC用户 pc 端与移动端区别 (1)屏幕宽度:992px > (2)操作方式:鼠标 事件 手指:触碰操作 -饿了么:基于 ...
- Pandas进阶笔记 (一) Groupby 重难点总结
如果Pandas只是能把一些数据变成 dataframe 这样优美的格式,那么Pandas绝不会成为叱咤风云的数据分析中心组件.因为在数据分析过程中,描述数据是通过一些列的统计指标实现的,分析结果也需 ...
- Javascript模块化开发2——Gruntfile.js详解
一.grunt模块简介 grunt插件,是一种npm环境下的自动化工具.对于需要反复重复的任务,例如压缩.编译.单元测试.linting等,自动化工具可以减轻你的劳动,简化你的工作.grunt模块根据 ...
- PHP Openssl 生成公钥私钥
<?php //配置信息 $dn = array( "countryName" => "GB", "stateOrProvinceName ...
- [springboot 开发单体web shop] 6. 商品分类和轮播广告展示
商品分类&轮播广告 因最近又被困在了OSGI技术POC,更新进度有点慢,希望大家不要怪罪哦. 上节 我们实现了登录之后前端的展示,如: 接着,我们来实现左侧分类栏目的功能. ## 商品分类|P ...
- T-SQL Part X: UNION, EXCEPT and INTERSECT
MSDN上关于EXCEPT和INTERSECT的文档.MSDN上关于UNION的文档. 值得注意的是,UNION其实有两种,一种是普通的UNION,另外一种是UNION ALL.加上EXCEPT和IN ...
- lufylegend.js教程(1)
1.图片元素如何缩小? 在LSprite类中,有两个属性:{scaleX,scaleY},这两个属性属于按比例缩放精灵对象,可以放大,可以缩小,注意这两个属性是在图片中心点位置开始缩放. 代码: Bo ...
- 自学python的高效学习方法【python秘籍】
随着互联网的发展,数据科学概念的普及,Python火得一塌糊涂,为此很多小伙伴想学这门语言,苦于没有正确的学习方法,大部分都放弃了,所以我想总结下经验来帮助大家高效学完python技术!第一.首先学习 ...
