当前位置: 首页 > news >正文

JVM性能调优全指南:高流量电商系统的最佳实践

1.G1(Garbage-First)

官网: G1 Garbage Collection

G1收集器是Java 7中引入的垃圾收集器,用于替代CMS(Concurrent Mark-Sweep)收集器。它主要针对大内存、多核CPU环境下的应用场景,具有以下特点:

  1. 分代收集:G1仍然保留了分代的概念,但新生代和老年代不再是物理隔离的,它们都是一部分Region(不需要连续)的集合。
  2. 空间整合:G1在整体上属于“标记-整理”算法,不会导致空间碎片。
  3. 可预测的停顿:G1能够让使用者明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒。
    在这里插入图片描述

使用G1收集器时,Java堆的内存布局与其他收集器有很大差别。它将整个Java堆划分为多个大小相等的独立区域(Region),每个Region的大小可以是1M到32M之间的数值,但必须保证是2的n次幂。如果对象太大,一个Region放不下(超过Region大小的50%),那么就会直接放到H区。

设置Region大小:-XX:G1HeapRegionSize=<N>M

所谓Garbage-First,其实就是优先回收垃圾最多的Region区域。

工作过程可以分为如下几步:

  1. 初始标记(Initial Marking):标记以下GC Roots能够关联的对象,并且修改TAMS的值,需要暂停用户线程。
  2. 并发标记(Concurrent Marking):从GC Roots进行可达性分析,找出存活的对象,与用户线程并发执行。
  3. 最终标记(Final Marking):修正在并发标记阶段因为用户程序的并发执行导致变动的数据,需暂停用户线程。
  4. 筛选回收(Live Data Counting and Evacuation):对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间制定回收计划。
    在这里插入图片描述

JVM常用参数

标准参数
-version
-help
-server
-cp

在这里插入图片描述

-X参数

非标准参数,也就是在JDK各个版本中可能会变动

-Xint     解释执行
-Xcomp    第一次使用就编译成本地代码
-Xmixed   混合模式,JVM自己来决定

在这里插入图片描述

-XX参数

使用得最多的参数类型

非标准化参数,相对不稳定,主要用于JVM调优和Debug

a. Boolean类型
格式:-XX:[+-]<name>            +或-表示启用或者禁用name属性
比如:-XX:+UseConcMarkSweepGC   表示启用CMS类型的垃圾回收器-XX:+UseG1GC              表示启用G1类型的垃圾回收器b. 非Boolean类型
格式:-XX<name>=<value>表示name属性的值是value
比如:-XX:MaxGCPauseMillis=500   
其他参数
-Xms1000M等价于-XX:InitialHeapSize=1000M
-Xmx1000M等价于-XX:MaxHeapSize=1000M
-Xss100等价于-XX:ThreadStackSize=100

所以这块也相当于是-XX类型的参数

查看参数

java -XX:+PrintFlagsFinal -version > flags.txt

在这里插入图片描述
在这里插入图片描述

值得注意的是"=“表示默认值,”:="表示被用户或JVM修改后的值。
要想查看某个进程具体参数的值,可以使用jinfo,这块后面聊。
一般要设置参数,可以先查看一下当前参数是什么,然后进行修改。

设置参数的常见方式
  • 开发工具中设置,比如IDEA,Eclipse
  • 运行jar包的时候:java -XX:+UseG1GC xxx.jar
  • web容器比如Tomcat,可以在脚本中的进行设置
  • 通过jinfo实时调整某个Java进程的参数(参数只有被标记为manageable的flags可以被实时修改)
实践和单位换算
1Byte(字节)=8bit(位)
1KB=1024Byte(字节)
1MB=1024KB
1GB=1024MB
1TB=1024GB
(1) 设置堆内存大小和参数打印
-Xmx100M -Xms100M -XX:+PrintFlagsFinal
(2) 查询+PrintFlagsFinal的值
:=true
(3) 查询堆内存大小MaxHeapSize
:= 104857600
(4) 换算
104857600(Byte)/1024=102400(KB)
102400(KB)/1024=100(MB)
(5) 结论
104857600是字节单位

常用参数含义

参数含义说明
-XX:CICompilerCount=3最大并行编译数如果设置大于1,虽然编译速度会提高,但是同样影响系统稳定性,会增加JVM崩溃的可能
-XX:InitialHeapSize=100M初始化堆大小简写-Xms100M
-XX:MaxHeapSize=100M最大堆大小简写-Xms100M
-XX:NewSize=20M设置年轻代的大小
-XX:MaxNewSize=50M年轻代最大大小
-XX:OldSize=50M设置老年代大小
-XX:MetaspaceSize=50M设置方法区大小
-XX:MaxMetaspaceSize=50M方法区最大大小
-XX:+UseParallelGC使用UseParallelGC新生代,吞吐量优先
-XX:+UseParallelOldGC使用UseParallelOldGC老年代,吞吐量优先
-XX:+UseConcMarkSweepGC使用CMS老年代,停顿时间优先
-XX:+UseG1GC使用G1GC新生代,老年代,停顿时间优先

相关文章:

JVM性能调优全指南:高流量电商系统的最佳实践

1.G1(Garbage-First) 官网: G1 Garbage Collection G1收集器是Java 7中引入的垃圾收集器,用于替代CMS(Concurrent Mark-Sweep)收集器。它主要针对大内存、多核CPU环境下的应用场景,具有以下特点: 分代收集:G1仍然保留了分代的概念,但新生代和老年代不再是物理隔离的,…...

前端常见场景、JS计算精度丢失问题(Decimal.js 介绍)

目录 一. Decimal.js 介绍 二. 常用方法 1. 创建 Decimal 实例 2.加法 add 或 plus 3.减法 sub 或 minus 4.乘法 times 或 mul 5.除法 div 或 dividedBy 6.取模 7.幂运算 8.平方根 9.保留小数位 toFixed方法(四舍五入) 三.项目应用 前端精度丢失问题通常由以下原因…...

Python写UI自动化--playwright(点击操作)

本篇介绍playwright点击操作&#xff0c;click()方法的常用参数 目录 0. selector (必需) 1. modifiers(可选) 2. position(可选) 3. button(可选) 4. click_count(可选) 5. delay 6. timeout(可选) 7. forceTrue(可选) 8. trialTrue(可选) 9. no_wait_after(可选) …...

[C#面对对象] 之抽象方法 虚方法 接口

1.虚方法 我的理解 "法国的“巴黎公社”&#xff0c;俄国的“十月革命”&#xff0c;都是把主要战略方向首先夺取中心城市 " 设计为 一个父类中的虚方法(virtual),这个虚方法已经有实现了(就是通过暴力革命夺取的方法 最终返回 城市)然而秋收暴动(子类)失败…...

docker 发布geoserver服务添加字体

1. 创建容器时可直接挂载到系统字体库 2. 已发布的容器挂载字体目录 关闭docker服务 &#xff1a; systemctl stop docker.socket 修改config.v2.json :位置在 cd /var/lib/docker/containers/容器id 重新启动docker服务&#xff1a;systemctl start docker...

数据赋能(162)——开发:数据整理——技术方法、主要工具

技术方法 从商业角度来看&#xff0c;从前未知的数据分析模式或趋势的发现为企业提供了非常有价值的洞察力。数据整理技术能够为企业对未来的发展具有一定的预见性。数据整理技术可以分成3类&#xff1a;群集、分类和预测。 群集技术&#xff1a; 这是一种将相似的数据项进行…...

安全服务面试

对安全服务是怎么理解的 安全服务对象是人&#xff0c; 渗透测试对象是网站。&#xff08;我的理解&#xff09; 安全概念和资讯 安全工具使用 渗透测试 安全基线检查 应急响应 代码审计 安全边界建设 安全规范 1.拿到一个待检测的站&#xff0c;你觉得应该先做什么&…...

昇思25天学习打卡营第23天|LSTM+CRF序列标注

Mindspore框架CRF条件随机场概率图模型实现文本序列命名实体标注|&#xff08;一&#xff09;序列标注与条件随机场的关系 Mindspore框架CRF条件随机场概率图模型实现文本序列命名实体标注|&#xff08;二&#xff09;CRF模型构建 Mindspore框架CRF条件随机场概率图模型实现文本…...

抖音直播弹幕数据逆向:websocket和JS注入

&#x1f50d; 思路与步骤详解 &#x1f575;️‍♂️ 思路介绍 首先&#xff0c;我们通过抓包工具进入的直播间&#xff0c;捕获其网络通信数据&#xff0c;重点关注WebSocket连接。发现直播弹幕数据通过WebSocket传输&#xff0c;这种方式比传统的HTTP更适合实时数据的传输。…...

AIGC diffusers文生图模型optimum量化使用案例

参考: https://github.com/huggingface/blog/blob/main/quanto-diffusers.md 安装 pip install optimum-quanto %pip install optimum使用 from optimum.quanto import freeze, qfloat8, quantize from diffusers import PixArtSigmaPipeline import torchpipeline = PixArt…...

PDF怎么转换成Word?这些工具一键搞定!

在日常生活中&#xff0c;我们经常遇到需要将PDF文件转换成Word文档的情况。PDF怎么转换成Word&#xff1f;一些工具的使用十分重要&#xff01;下文中就为大家推荐几个亲测好用的PDF转换工具。 一、Foxit PDF转换大师&#xff08;365客户端&#xff09; 链接&#xff1a;www…...

【TS】TypeScript函数类型:提升函数的类型安全性和可读性

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript函数类型&#xff1a;提升函数的类型安全性和可读性1. 引言2. 基本函…...

“八股文”在实际工作中是助力、阻力还是空谈?

前言&#xff1a;在当今快速发展的技术时代&#xff0c;程序员的角色变得日益重要。随着技术的不断进步&#xff0c;招聘流程也在不断演变以适应新的需求。在程序员的招聘过程中&#xff0c;“八股文”作为一种面试现象&#xff0c;已成为不可忽视的一部分。所谓“八股文”&…...

代码随想录算法训练营第22天-leetcode-回溯算法part01:

#回溯算法理论基础 能解决的问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合切割问题&#xff1a;一个字符串按一定规则有几种切割方式子集问题&#xff1a;一个N个数的集合里有多少符合条件的子集排列问题&#xff1a;N个数按一定规则全排列&…...

MySql 触发器、存储器练习

一&#xff1a; 触发器 1、建立两个表:goods(商品表)、orders(订单表) 查看数据库&#xff1a;mysql> show databases; 使用数据库&#xff1a;mysql> use mydb16_trigger; 创建goods表&#xff1a; mysql> create table goods(gid char(8) not null primary key, …...

【Plotly-驯化】一文教您画出Plotly中动态可视化饼图:pie技巧

【Plotly-驯化】一文教您画出Plotly中动态可视化饼图&#xff1a;pie技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内…...

Mirror学习笔记(一) 简介

文章目录 一、常规学习&#xff1a;Mirror核心功能有服务器和主机 二、时间戳批处理时间戳 三、TCP和UDP四、CCU(同时在线人数)五、SyncDirection(同步方向)六、RTT&#xff08;往返时间&#xff09;七、Connection Quality&#xff08;连接质量&#xff09;八、Lag Compensati…...

终端pip安装包后,Pycharm却导入失败?新手别慌,3招搞定!

很多小伙伴在学习Python的过程中,都会遇到这种情况:明明在终端用pip安装好了需要的包,但在Pycharm中导入时却报错。难道是安装姿势不对? 例如在cmd中已经有了pandas,但是去pycharm中导入pandas显示没有 先别急着怀疑人生,这很可能是因为pip安装包的路径和Pycharm项目使用…...

Redis 与 Scrapy:无缝集成的分布式爬虫技术

1. 分布式爬虫的概念 分布式爬虫系统通过将任务分配给多个爬虫节点&#xff0c;利用集群的计算能力来提高数据抓取的效率。这种方式不仅可以提高爬取速度&#xff0c;还可以在单个节点发生故障时&#xff0c;通过其他节点继续完成任务&#xff0c;从而提高系统的稳定性和可靠性…...

大厂linux面试题攻略四之Linux网络服务(一)

一、Linux网络服务-SSH服务 1.哪些设置能够提升SSH远程管理的安全等级? ssh的登录验证方式 ssh的登录端口和监听设置&#xff1a; 配置文件: /etc/ssh/sshd_config #Port 22 #ssh服务默认监听端口 #ListenAddress 0.0.0.0 #ssh服务…...

Czkawka:用Rust构建的跨平台重复文件清理完整解决方案

Czkawka&#xff1a;用Rust构建的跨平台重复文件清理完整解决方案 【免费下载链接】czkawka 一款跨平台的重复文件查找工具&#xff0c;可用于清理硬盘中的重复文件、相似图片、零字节文件等。它以高效、易用为特点&#xff0c;帮助用户释放存储空间。 项目地址: https://git…...

【PyO3/Rust-Python测试权威框架】:Rust生态下Python扩展的零信任CI流水线设计

第一章&#xff1a;Python 扩展模块测试Python 扩展模块&#xff08;如用 C/C、Rust 或 Cython 编写的模块&#xff09;在提升性能的同时&#xff0c;也引入了跨语言交互的复杂性。对其开展系统性测试&#xff0c;是保障功能正确性、内存安全性和 ABI 兼容性的关键环节。测试环…...

Qt 串口编程实战:keySight 34401A 万用表数据采集与存储

1. 项目背景与硬件准备 keySight 34401A 数字万用表是实验室常见的六位半高精度测量设备&#xff0c;支持GPIB和RS-232两种通信接口。在实际工业测量场景中&#xff0c;RS-232串口连接因其布线简单、成本低廉的特点&#xff0c;成为许多开发者的首选方案。我最近接手的一个电池…...

隐马尔科夫模型(HMM)实战:从天气预测到股票市场分析

1. 隐马尔科夫模型入门&#xff1a;从天气预报说起 第一次听说隐马尔科夫模型(HMM)时&#xff0c;我正盯着手机上的天气预报发呆。为什么明明显示"晴天"&#xff0c;下午却突然下起暴雨&#xff1f;这让我开始思考天气预测背后的数学模型。HMM正是解决这类问题的利器…...

深入ProtoBuf编译:从Google.Protobuf.dll到Protoc.exe的完整实践指南

1. ProtoBuf基础与编译环境搭建 Protocol Buffers&#xff08;简称ProtoBuf&#xff09;是Google开发的一种高效数据序列化工具。我第一次接触ProtoBuf是在处理微服务通信时&#xff0c;当时被它比JSON快3-5倍的序列化速度震惊了。简单来说&#xff0c;ProtoBuf就像是个智能的数…...

开源固件解锁戴森电池:3步拯救你的“32次红灯“报废吸尘器

开源固件解锁戴森电池&#xff1a;3步拯救你的"32次红灯"报废吸尘器 【免费下载链接】FU-Dyson-BMS (Unofficial) Firmware Upgrade for Dyson V6/V7 Vacuum Battery Management System 项目地址: https://gitcode.com/gh_mirrors/fu/FU-Dyson-BMS 你的戴森吸…...

零基础入门:PyTorch-2.x-Universal-Dev-v1.0环境使用避坑指南

零基础入门&#xff1a;PyTorch-2.x-Universal-Dev-v1.0环境使用避坑指南 1. 环境介绍与快速验证 PyTorch-2.x-Universal-Dev-v1.0是一个专为深度学习开发者设计的预配置环境&#xff0c;基于官方PyTorch底包构建&#xff0c;已经集成了常用的数据处理、可视化和开发工具。这…...

vLLM-v0.17.1代码实例:自定义LogitsProcessor实现内容安全过滤

vLLM-v0.17.1代码实例&#xff1a;自定义LogitsProcessor实现内容安全过滤 1. vLLM框架简介 vLLM是一个专注于大语言模型(LLM)推理和服务的高性能开源库。它最初由加州大学伯克利分校的天空计算实验室开发&#xff0c;现已发展成为一个活跃的社区项目。这个框架因其出色的性能…...

实时手机检测-通用部署成本分析:A10/A100/T4显卡性价比实测对比

实时手机检测-通用部署成本分析&#xff1a;A10/A100/T4显卡性价比实测对比 1. 项目背景与需求场景 在现代计算机视觉应用中&#xff0c;实时手机检测是一个具有广泛实用价值的技术方向。从智能监控系统中的打电话行为识别&#xff0c;到零售行业的商品展示分析&#xff0c;再…...

EVA-01开发者案例:Qwen2.5-VL-7B集成至MAGI类AI平台实现多源视觉融合

EVA-01开发者案例&#xff1a;Qwen2.5-VL-7B集成至MAGI类AI平台实现多源视觉融合 1. 引言&#xff1a;当视觉AI遇见机甲美学 想象一下&#xff0c;你正在处理一份复杂的市场分析报告&#xff0c;里面混杂着数据图表、产品照片和手写笔记。传统的AI工具要么只能看文字&#xf…...