阿里:每天100w次登陆请求, 8G内存该如何设置JVM参数
每天100w次登陆请求, 8G 内存该如何设置JVM参数,大概可以分为以下步骤 。
有些同学看到这些步骤还是发憷,说的好像是那么回事,一到实际项目中到底怎麽做我还是不知道!
光说不练假把式,以登录系统为例模拟一下推演过程:
- 假设每天100w次登陆请求,登陆峰值在早上,预估峰值时期每秒100次登陆请求。
- 假设部署3台服务器,每台机器每秒处理30次登陆请求,假设一个登陆请求需要处理1秒钟,JVM新生代里每秒就要生成30个登陆对象,1s之后请求完毕这些对象成为了垃圾。一个登陆请求对象假设20个字段,一个对象估算500字节,30个登陆佔用大约15kb,考虑到RPC和DB操作,网络通信、写库、写缓存一顿操作下来,可以扩大到20-50倍,大约1s产生几百k-1M数据。
- 假设2C4G机器部署,分配2G堆内存,新生代则只有几百M,按照1s1M的垃圾产生速度,几百秒就会触发一次MinorGC了。
- 假设4C8G机器部署,分配4G堆内存,新生代分配2G,如此需要几个小时才会触发一次MinorGC。
所以,可以粗略的推断出来一个每天100w次请求的登录系统,按照4C8G的3实例集群配置,分配4G堆内存、2G新生代的JVM,可以保障系统的一个正常负载。
基本上把一个新系统的资源评估了出来,所以搭建新系统要每个实例需要多少容量多少配置,集群配置多少个实例等等这些,并不是拍拍脑袋和胸脯就可以决定的下来的。
JVM参数 | 描述 | 默认 | 推荐 |
-Xms | Java堆内存的大小 | OS内存64/1 | OS内存一半 |
-Xmx | Java堆内存的最大大小 | OS内存4/1 | OS内存一半 |
-Xmn | Java堆内存中的新生代大小,扣除新生代剩下的就是老年代的内存大小了 | 跌认堆的1/3 | sun推荐3/8 |
-Xss | 每个线程的栈内存大小 | 和idk有关 | sun |
2024阿里春招福利: