zoukankan      html  css  js  c++  java
  • JVM java堆内存

    应用程序以及相关数据将决定Java堆空间占用需求。通过静态内存,可“预测”下面的内存需求:

    • 确定将会有多少不同的应用程序部署到预先计划的一个单独的JVM进程上,例如有多少个ear文件、war文件、jar文件等。在一个JVM上部署的应用程序越多,对本机堆的需求就越多。
    • 确定有多少个类需要在运行时加载:包括第三方API。越多的类加载器和类在运行时被加载,在HotSpot VM PermGen空间和内部JIT相关优化对象上的需求就越高。
    • 确定数据缓存占用,如应用程序加载内部缓存数据结构(和第三方API),例如数据库中的数据缓存,从文件中读取数据等。数据缓存使用越多,Java Heap OldGen空间需求就越高。
    • 确定允许建立的中间件线程数量。这是非常重要的,因为Java线程需要足够的本机内存,否则会抛OutOfMemoryError异常。

    在JVM进程上部署的应用程序越多,对本地内存和PermGen空间的要求就越高。数据缓存并不是序列化为一个磁盘或数据库,它将从OldGen空间里面需要额外的内存。

    你有5个ear应用程序(2000多个Java类)要部署(包含中间件代码)

    1. 本地堆需求估计为1GB(必须足够大以处理线程创建等等。)PermGen空间大约是512 MB。
    2. 内部静态缓存大约500MB
    3. 在高峰时间,总预测流量是5000个并发用户
    4. 每个用户的会话数据大约500K
    5. 在高峰期间,总流量会话要求是2.5GB。

    正如你所看到的一样,在如此情况下,32位JVM进程就无法满足。一个典型的解决方案是进行流量拆分,在几个JVM进程或物理主机(假设有足够的硬件和CPU core可用)上。

    大多数时候,业务流量将推动内存占用。除非你需要大量的数据缓存来实现适当的性能,典型的门户应用网站(媒体)繁重的应用程序需求。数据缓存太多的时候应该用一个黄色的标志标注一下,最好早点去重新审视一下一些设计元素。

  • 相关阅读:
    centos 7:network: 正在打开接口 ens33: 错误:激活连接失败:No suitable device found for this connection.
    python 连接 hive 的 HiveServer2 的配置坑
    node的 node-sass@^4.11.0 出现:npm: no such file or directory, scandir '.../node_modules/node-sass/vendor'
    DX关联VS
    PIX
    英特尔® 图形性能分析器(Intel® GPA)
    C++之异常处理
    VS挂接崩溃包
    system 函数
    C++ Template
  • 原文地址:https://www.cnblogs.com/thirteen-yang/p/12916436.html
Copyright © 2011-2022 走看看