典型回答
首先,我们需要问清楚,一天100W次的登录,在一天内有没有某个时段是高峰的?高峰期的QPS大概可以达到多少。
如果没有高峰期,虽然100万听上去挺多的,但是其实平均下来一秒钟的QPS也就10,这个量的话,其实根本不需要做什么特别的JVM优化。
一般业务场景中,都是有自己的业务高峰期的,比如电商业务基本上上午十点和下午两点是业务高峰期,基本上这时候的QPS是平时的20倍都不止。
我们假设登录业务存在高峰期,峰值时长大概持续1个小时,峰值的QPS可以达到200。那么需要做哪些优化?
作为一个登录服务,一般来说我们在接收到请求之后,只需要给用户进行鉴权并把结果返回给前端就行了。
在这个过程中一般不太会去查询太多的数据,比如权限什么的也都是在后面访问页面再查询的。所以,峰值200左右的QPS,对于JM的内存来说,最主要的就是会因为远程调用,而创建出很多请求参数和请求的响应。而这些对象基本都是朝生暮死的,接口调用结束之后就会被回收掉。并且通常来说这些对象也不会很大,因为登录并不是注册,其实并不携带特别多的信息,那么也就是说,会产生大量的小对象,即新生代会不断的创建对象,并被回收掉。
基于以上简单分析,我们看下该如何做我们的JM调优。
堆内存设置
首先是堆内存大小的设置。当我们的机器只有4核8G的时候,堆内存的大小肯定不能太大,一般不建议设置的太大,因为我们需要给机器上的其他应用预留出一部分内容。所