zoukankan      html  css  js  c++  java
  • JVM我们需要考虑什么?

    JVM层面我们需要考虑什么?

    • 系统需要部署多少台机器?
    • 每台机器需要多大内存空间?
    • 每台机器上启动的JVM需要分配多大堆内存空间?
    • 给JVM多大的内存空间可以支撑我们系统的高峰运行不会崩溃?
    1. 首先第一个要计算的就是每秒中我们系统要处理的请求
    /api/view/info 2821190

              这里以view系统为例,每个高峰期预估几个小时。二百八十万/4/60/60=200每秒大概200个请求

       假设我们部署了4台机器,每台机器每秒处理50个请求

              2.我们处理每个请求需要耗时多久?

                从数据库中查询出数据后是否还需要计算,或者根据业务处理?

                假设我们处理这些请求需要1秒钟,这一秒钟在JVM的新生代中创建了50个对象,做了业务处理返回给用户。

               接下来一秒钟后,这些view对象的引用就回收了,这些数据在JVM新生代中就是没人引用的垃圾对象。

               3.每个view对象需要多大内存空间?

       这个计算方式我们可以直接根据我们类里的字段可以计算一下,比如说Integer类型占4个字节,Long是8个字节,还有别的类型

            占了多少字节,这样我们可以计算出一个对象大致占多少字节。

           这里我们假设view一个对象占据500字节,不到1kb。

           那么一台机器50个对象就是50*500=25000字节,就是25kb。

         3.系统运行模型

         每秒50个请求,创建50个对象,接着1秒过后,这些对象没人引用变为垃圾对象,不停在新生代循环直到新生代满了,

       接着出发年轻代GC,把新生代垃圾对象回收掉,腾出空间继续分配。

        4.完整计算一个请求接口的内存占用

     这只是单纯的假设一个对象,view接口的一次查询可能涉及到其他业务,我们现在把这个结果扩大10~20倍,

     那么每秒创建出来的对象可能有几百kb-1MB之间,不断循环,一直到新生代满了出发回收。

      5.某一个系统的堆内存应该怎么设置?

      一般我们常见的机器配置就是2核4G或者4核8G。

    如果我们用2核4G机器来部署,可能有点紧凑,机器4G内存,机器本身也要用一些内存空间,最后我们JVM进程最多就是2GB

    然后这两GB还要分配给方法区,栈内存,堆内存这几块区域,那么堆内存最多可能就是1GB内存空间。

    然后堆内存还分为新生代和老年代,老年代总需要放置系统的一些长期存活对象,最少也几百MB,那么新生代也就几百MB了

    如果我们新生代就几百MB,就会导致每运行几百秒,新生代就会满了,需要触发年轻代GC。

    所以这种情况,采用4核8G,配置如下

    机器4核8G,-Xms和-Xmx设置为3G,给整个堆内存3G,-Xmn设置为2G,给新生代2G空间。

    参考自:狸猫技术窝

  • 相关阅读:
    ArcGIS Engine获取单条要素的标注(LABEL)内容
    推荐一个winform第三方控件QIOS DevSuite
    解决C#,CAD二次开发实例化AcadApplicationClass失败
    skyline中屏蔽或自定义InformationWindow和NavigationMap的右键菜单
    (转)Skyline TEPro6.0版本在二次开发方面的改进总结
    skyline TEP 6 开发帮助文档CHM中文汉化版
    CCIE一年后的心语(转)
    PC 到 PC的共享
    Mysql 更改某一字段的内容为另一字段加上字符串
    Ralis: 连接数据库并查询
  • 原文地址:https://www.cnblogs.com/technologykai/p/12869719.html
Copyright © 2011-2022 走看看