每日百万交易的支付系统,如果设置jvm堆内存大小

  1. 百万交易的支付系统,压力来自于每天会在JVM中创建上百万个支付订单对象。要如何设置jvm堆内存合适的大小,首先要计算每秒钟系统要处理多少订单。
  2. 假设一百万比平均分配到几个小时,每秒就是100个订单左右。假设系统部署了3台机器,每台机器每秒处理30笔订单。
  3. 假设每个订单的处理时间是1s,1s将30个订单处理完毕,这30个对象无人引用,后面再来30个依次类推
  4. 每个订单占用多大内存,跟对象的类型有关,假设一个订单对象为500字节
  5. 每秒每台机器接收30个请求,占用内存空间30*500字节 = 15000字节= 15kb
  6. 真实的系统上线,除了支持创建的对象,还会有其他对象,估算的话再次基础上再扩大10-20倍,每秒创建的对象在几百kb-1MB之间
  7. 假设机器是2核4G,jvm进程最多2G,堆内存可能就1G,新生代几百M,会造出很短时间内年轻代就满了。如果4核8G,jvm进程有4G,新生代可以有2G多,这个新生代可能在半个小时后才会发生GC。
  8. 设置永久代大小,一般设置几百MB够用,栈内存大小,一般是512kb-1Mb