什么是JVM调优-死磕JVM (什么是JVM)

教程大全 2025-07-14 16:18:42 浏览

【死磕JVM】什么是JVM调优?

2021-06-03 08:32:18虚拟机参数分为基本和扩展两类,在命令行中输入 JAVA_HOME\bin\java就可得到基本参数列表。在命令行输入 JAVA_HOME\bin\java–X就可得到扩展参数列表。

想要学习JVM调优,我们必须提前知道他们的一些参数,这样才方便我们更好的去使用他们

JVM常用命令行参数

JVM的命令行参数参考:

1. 查看参数列表

虚拟机参数分为基本和扩展两类,在命令行中输入 JAVA_HOME\bin\java就可得到基本参数列表。在命令行输入 JAVA_HOME\bin\java–X就可得到扩展参数列表。

2. 基本参数说明:

3. 扩展参数说明:

虚拟机参数分类

标准:- 开头,所有的HotSpot都支持 非标准:-X 开头,特定版本HotSpot支持特定命令 不稳定:-XX 开头,下个版本可能取消

例如:java -version、java -X

调优前的基础概念

1. 吞吐量: 用户代码时间 /(用户代码执行时间 + 垃圾回收时间)

2. 响应时间: STW(Stop The World)越短,响应时间越好

所谓的调优,首先自己要明确,想要的是什么,是吞吐量还是响应时间,还是在满足一定的响应时间的情况下,要求达到多大的吞吐量,一般来说根据业务类型去选择对应的调优方式,比如网站需要的是响应时间优先,JDK1.8尽量选G1,那如果是数据挖掘的需要使用的是吞吐量。

什么是调优

在没有接触过调优之前我们理解的JVM调优就是解决OOM问题,OOM只是JVM调优的一部分

首先的话,调优是从业务场景开始的,如果没有业务场景的JVM调优都是不靠谱的,比如有时间在实际项目中,有很多个类,成千上万个代码,你怎么知道具体是哪个代码有问题,就算我们知道有段代码频繁的full gc,但是可能过一段时间就OOM了。

调优步骤:

响应时间、停顿时间 [CMS G1 ZGC] (需要给用户作响应)

吞吐量 = 用户时间 /( 用户时间 + GC时间) [PS]

1.-Xloggc:/opt/xxx/logs/xxx-xxx-gc-%t.log –

XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 –

XX:GCLogFileSize=20M -XX:+PrintGCDetails –

XX:+PrintGCDateStamps -XX:+PrintGCCause

2.或者每天产生一个日志文件

在生产环境中日志文件,后面日志名字,按照系统时间产生,循环产生,日志个数五个,每个大小20M,这样的好处在于整体大小100M,能 控制整体文件大小

观察日志情况

调优案例

案例一

垂直电商,最高每日百万订单,处理订单系统需要什么样的 服务器 配置

这个问题比较鸡肋,因为很多不同的服务器配置都能够支撑

比如有一百万个订单,每个小时不会产生很高的并发量,我们寻找高峰时间,做一个假设100W订单有72W订单在高峰期产生,比如一个小时平均36W订单,所以我们内存选择大小是按照巅峰时间选择的,很多时间我们可能就是去做压测,实在不行就添加CPU和内存

案例二

12306遭遇春节大规模抢票应该如何支撑 订单信息每天固定,可以丢到缓存中,不同的业务逻辑有不同的业务设计,12306应该是中国并发量最大的秒杀网站,号称并发100W,就是说每秒进行百万次的业务逻辑的处理,估计淘宝一年最高的是54W并发。

如果解决这个问题呢,看下面所示:

CDN -》 LVS -》 NGINX -》 业务系统 -》每台机器1W并发

什么是JVM

普通电商的下单流程一般是:

订单 -》下单-》 订单系统减库存 -》 等待用户付款 这个事务如果同步的方式完成,TPS是支撑不了多长时间的

但是在12306里面的模型是 下单-》 减库存和订单同时异步进行 -》 等待付款 异步是当你下完订单之后,它一个线程去减库存,另外一个线程直接把你下单的信息扔到kafka或者redis里面直接返回OK,你下单成功后等待你付款,什么时候你付款完成后面那些个订单处理线程就会去里面拿数据,这个处理完了就会持久化到hbase或者是mysql,一般大流量的处理方法核心思想就是:分而治之

JVM优化

比如我有一个50万PV的资料类网站(从磁盘提取文档到内存)原服务器32位,1.5G的堆,用户反馈网站比较缓慢,如果对它进行升级,新服务器64位,16G的堆内存,用户还是反馈卡顿,而且还比之前更严重,这个是因为什么呢?一般来说很多用户去浏览数据,很多数据会load到内存中,导致内存不足,频繁的GC,STW时间过长,响应时间就会变慢,那我们应该怎么办呢,使用 PS-> PN+CMS或者G1。

还有一个就是系统CPU经常100%,我们要如何进行调优呢?

首先我们可以想到CPU100%那么一定有线程在占用系统资源

找出哪个进程CPU高 (top命令)

该进程中的哪个线程CPU高(top -Hp)

导出该线程的堆栈

查找哪个方法(栈挣)比较消耗时间

工作线程占比高 | 垃圾回收线程占比高

总结

今天我们只是讲解了一些基本的操作,具体怎么操作该怎么办呢?这一部分小农会在下一部分中进行讲解,今天主要带大家了解一些常用的参数,告诉大家怎么去使用和一些前置知识,下面我会对这些问题做一个实战性的讲解,感兴趣的小伙伴记得来个一键三连,感谢大家。


我朋友在宜信贷款没还,他们会采取什么措施呢?

1、死磕:打电话,到你家闹,到你单位闹,恐吓你的家人 2、去法院告是不可能的,但他们会以此作为恐吓你的手段。 应对方法:换电话,换住址,换工作,跑!!

java架构师主要是干什么的?

想成为java架构师,首先你自身得是一个高级java攻城狮,会使用各种框架并且很熟练,且知晓框架实现的原理。比如,你要知道,jvm虚拟机原理、调优;懂得jvm能让你写出的代码性能更优化;还有池技术:什么对象池、连接池、线程池等等。还有java反射技术,虽然是写框架必备的技术,但有严重的性能问题,替代方案java字节码技术,nio 这说不说无所谓,需要注意的是直接内存的特点,使用场景;java多线程同步异步;java各种集合对象的实现原理,了解这些可以让你在解决问题时选择合适的数据结构,高效的解决问题,比如hashmap的实现原理,甚至许多五年以上经验的人都弄不清楚!还有很多,比如,为什扩容时有性能问题?不弄清楚这些原理,不知道问题根本,你就就写不出高效的代码!还会很傻很天真的认为自己是对的,殊不知是孤芳自赏,自命不凡而已;总而验资,言而总之,越基础的东西越重要!许多工作了很多年的程序猿认为自己会用它们写代码了,其实仅仅是知其实仅仅是知道如何调用api而已,知其然不知其所以然,离会用还差的远。关于技能的提升给一些建议1.提升自己的英语水平,此重要性是不言而喻的,现在很多的新技术中文档少之又少,作为一名架构师总不能去看翻译文吧。2.多看一些沟通方面的数据,流畅的沟通利用你成为一名成功的架构师。3.有机会参加PMP考试并取得证书,拥有项目管理方向的优势就是你作为一名架构师的优势。架构师其实从某种意义上就是一种角色,而不是一种职位。一定要时时刻刻保持空杯心态。一定要有一颗保持饥渴学习和耐得住寂寞的赤子之心。4.我们知道当前的技术节奏非常的快,一定要好好的利用自己的碎片时间去学习,去了解新技术,千万不要让自己技术落伍。5.多锻炼自己在大众环境下的演讲和PTT的能力。6.与不同的技术、编程语言、设计模式和结构等(甚至是它并没有在日常中给予你直接的帮助)打交道。你永远都不知道这些知识是否会在未来派上用场,但是对你绝对是有益无害。7.有机会多做知识分享,因为你一旦分享了知识,你就会对这门技术有深刻的印象,同时也能树立在同事中的良好的技术形象,从而赢得更多的专家影响力而不是职位影响力。规划了几张体系图,可以了解一下。一:工程协作专题二、源码分析专题三、分布式专题四、微服务专题五、性能优化专题六、并发编程专题七、项目实战!java架构师课程体系完整页面架构师常用技术:

对男篮打安哥拉有什么感受

希望能进前四.中国男篮落入死亡之组,同组的对手分别是美国、西班牙、安哥拉、德国和希腊队,中国男篮要想实现杀入八强的目标必须死磕欧美诸强。 这样世锦赛前三名西班牙、希腊和美国就与中国男篮相聚在B组。 这三只球队的实力自然不用说,中国队要想取胜难度非常大,现在已经输了二场.但在与西班牙比赛中,中国队打出了水平和气势,相信以这样的态势,中国队一定能战胜德国与安哥拉.加油啦,希望你们能创造辉煌!附:中国队赛程,一起为中国队加油吧!8月10日 22:15 中国70:101美国8月12日 16:45 中国75:85西班牙8月14日 14:30 安哥拉VS中国8月16日 20:00 中国VS德国8月18日 14:30 中国VS希腊中锋:姚明大前锋:易建联小前锋:朱芳雨得分后卫:王仕鹏控球后卫:刘伟关键替补:王治郅,杜锋,孙悦,李楠 中国队应该就主要是这9个人轮换,陈江华可以在关键时刻从当奇兵作用,他的速度也许能起到意想不到的效果r

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐