抱歉很久没写新文章了 , 这段时间一直在学习扩大自己的知识盲区 , 工作上也挺忙的 , 拖更了好久
答应了朋友要出个 JVM 系列 , 应该会有几篇文章 , 我会努力在保证质量的前提下进行输出~
So 进入今天的主题
前言
有被 JVM 相关问题刁难过吗?
上个月朋友去面某东说被 JVM 难哭了
面试官上来就是素质三连:
有没有 高并发项目经验、频繁 gc 怎么解决、有没有搞过 JVM 调优
我那个朋友公司做的是 to b 方向 , 系统流量不是很大 , 加上才工作 2 年直接被问懵逼
回来就问我高并发系统怎么玩 , 为了避免重复劳动 , 遂有此文~
一、亿级流量系统回顾
接下来做个回顾:
OTA 平台 4亿 用户
高峰期 百万 订单
高峰期 12 小时 1.8亿 访问量
每小时的流量是:1.8亿 / 12 = 1250w
每分的流量是:1250w / 60 = 20.8w
每秒的流量是:20.8w / 60 = 3472
2 个集群 32 台 8C/16G 的机器
一次核心接口查询平均占用 5mb 内存
每秒钟 JVM 会有 550mb 的新生代堆内存空间被占用
二、系统的 JVM 参数
基于G1垃圾收集器
这里我截取了这个服务生产环境的 JVM 参数:
-
-Xmx12288m 初始堆大小.
-
-Xms12288m 最大堆大小
-
-Xss256k 每个线程的栈内存大小
-
-XX:MetaspaceSize=256m 元空间初始大小
-
-XX:MaxMetaspaceSize=1g 元空间最大大小
-
-XX:MaxGCPauseMillis=200 每次YGC / MixedGC 的最多停顿时间 (期望最长停顿时间)
-
-XX:+UseG1GC java8 指定使用G1垃圾回收器
-
-XX:-OmitStackTraceInFastThrow 对异常做的一个优化,抛出异常非常快,但是看不到异常的堆栈信息(仅供参考)
-
-XX:MinHeapFreeRatio=30 GC后java堆中空闲量占的最小比例,小于该值,则堆内存会增加
-
-XX:MaxHeapFreeRatio=50 GC后java堆中空闲量占的最大比例,大于该值,则堆内存会减少
-
-XX:CICompilerCount=4 设置的相对较大可以一定程度提升JIT编译的速度,默认为2
-
-XX:SoftRefLRUPolicyMSPerMB=0 任何软引用对象在下一次 GC 都尽快释放掉,给内存释放空间。
-
-XX:+PrintGC 输出GC日志
-
-XX:+PrintGCDetails 输出GC的详细日志
-
-XX:+PrintGCDateStamps 输出GC的时间戳(以基准时间的形式)
-
-XX:+UseGCLogFileRotation 开或关闭GC日志滚动记录功能
-
-XX:NumberOfGCLogFiles=5 设置滚动日志文件的个数
-
-XX:GCLogFileSize=32M 设置滚动日志文件的大小,当前写日志文件大小超过该参数值时,日志将写入下一个文件
-
-XX:+HeapDumpOnOutOfMemoryError JVM会在遇到OutOfMemoryError时拍摄一个堆转储快照,并将其保存在一个文件中
注意
(编辑:济宁站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|