zoukankan      html  css  js  c++  java
  • 我进行jvm内存调优的一些记录

    jvm内存调优的一些记录

    java内存调优的方法和过程
    可以使用
    jmap -heap pid号 查看,例如pid是9300,执行的结果可能是这样的。

    root@ubuntu:~# jmap -heap 9300
    Attaching to process ID 9300, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.171-b11
    
    using thread-local object allocation.
    Parallel GC with 18 thread(s)
    
    Heap Configuration:
       MinHeapFreeRatio         = 0
       MaxHeapFreeRatio         = 100
       MaxHeapSize              = 4190109696 (3996.0MB)
       NewSize                  = 87031808 (83.0MB)
       MaxNewSize               = 1396703232 (1332.0MB)
       OldSize                  = 175112192 (167.0MB)
       NewRatio                 = 2
       SurvivorRatio            = 8
       MetaspaceSize            = 21807104 (20.796875MB)
       CompressedClassSpaceSize = 1073741824 (1024.0MB)
       MaxMetaspaceSize         = 17592186044415 MB
       G1HeapRegionSize         = 0 (0.0MB)
    
    Heap Usage:
    PS Young Generation
    Eden Space:
       capacity = 378535936 (361.0MB)
       used     = 13720728 (13.085105895996094MB)
       free     = 364815208 (347.9148941040039MB)
       3.6246830736831286% used
    From Space:
       capacity = 164626432 (157.0MB)
       used     = 0 (0.0MB)
       free     = 164626432 (157.0MB)
       0.0% used
    To Space:
       capacity = 162529280 (155.0MB)
       used     = 0 (0.0MB)
       free     = 162529280 (155.0MB)
       0.0% used
    PS Old Generation
       capacity = 339738624 (324.0MB)
       used     = 18348624 (17.498611450195312MB)
       free     = 321390000 (306.5013885498047MB)
       5.400806003146702% used
    
    20544 interned Strings occupying 2562384 bytes.
    

    我们最关注的是Old Generation的占用情况。从数据上看到占用大约17.49m。
    按照java官方的说明来配置的话计算的基数是老年时代存活实例的倍数。

    Java整个堆大小设置,Xmx 和 Xms设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍
    永久代 PermSize和MaxPermSize设置为老年代存活对象的1.2-1.5倍。
    年轻代Xmn的设置为老年代存活对象的1-1.5倍。
    老年代的内存大小设置为老年代存活对象的2-3倍。
    

    这样计算下来,
    Xmx与Xms 大约是300~400M(17.49按100M计算)
    Xmn可以设置为128M,也就是1.2倍
    PerSize与MaxPermSize是120M~150M

    以上的说的是heap堆内存的设置。没完,还有。

    非堆内存:
    还必须的说下 -XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;
    由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
    
    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。
    XX:MaxPermSize设置过小会导致java.lang.OutOfMemoryError: PermGen space 就是内存益出。 
    这部分内存用于存放元数据信息。如果2G内存、64那么计算下来只有32M内存用于存放数据了,就容易产生这个OutOfMemoryError:PermGen Space这个错误了。
    
    (1)这一部分内存用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同。 
    (2)GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS 的话,就很可能出现PermGen space错误。
    
    所以如果运行的机器内存比较小,而我们需要引用大量的jar包,比如体积50M的jar包,那么就会出现内存溢出的问题了,这时候需要我们特殊制定一次这个内存的参数。一般大于引用jar包的体积总量就可以了。
    还有启动的时候 -XX:+UseParallelGC,这个参数也可以稍稍提高一些GC的速度。
    

    java -jar -Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+UseParallelGC 我是一个jar包.jar

    比如PS Old Generation 实际占用32M

    java -jar -Xms512m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256m -XX:+UseParallelGC

  • 相关阅读:
    Mysql问题1862
    S3TC IAP15F2K61S2点亮一个发光二极管keil和stc-isp软件操作
    .NET练习计算平方根
    求一个整数以内的素数(函数实现)
    判断一个数是不是素数(函数实现)
    #号在进制输出值的作用,美化输出
    分类——决策树模型(附有决策树生成步骤)
    分类:贝叶斯分类之新闻组数据组学习(查看数据类型的方法)(环境:Pycharm)
    分类:K-近邻分类之鸢尾花数据集学习(包含数据预处理中的标准化)(环境:Pycharm)
    编写一个程序,求2~n间的素数,n由键盘输入,循环变量分别 从2到n、2到(int)sqrt(n),分别测出两个循环的所用时间。
  • 原文地址:https://www.cnblogs.com/pcode/p/9202028.html
Copyright © 2011-2022 走看看