我上次是把初始内存32M,最大内存512M,这个是时候我把初始内存改成相等,512M,我就把服务器重启一遍 -XX:+PrintGCDetails
-Xmx512M –Xms512M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseSerialGC
-XX:PermSize=32M 你们再看效果,有没有GC的回收,是不是没有,这我们就可以统计出来,0次,这就不用说了吗,结果已经看的出来了
GC回收次数是0次,那这边你们说一下,这个吞吐量大概在多少,大概范围在多少,肯定是5000以上,这个是肯定的,我估计7,8千,
差不多,清空掉,运行,你们看一下有没有GC回收,是不是没有,我们运行完毕也没有,吞吐量在5015
你们谁知道这是什么原因吗,为什么变少了,你们有没有谁知道,这个其实是软件的一个bug问题,运行的时候
怎么越变越小,这是什么原因,你们知道为什么吗,这个软件有Bug,永远只在100多里面,看到没有
是不是还在100多,这个软件有bug,你们最好不要这么测,去HTTP请求菜单点击执行,是不是已经高了
看到没有,6561次,看到效果没有,刚才变小是因为图形界面,你们不要去展示报告里面执行去看报告,图形运行的时候会影响
我们的吞吐量的,这个软件有bug,所以这个我就不说了,那你知道,6561次,吞吐量6561次,这个时候我把它清掉之后,我再来一遍, 6702次
我清掉,我在运行一次,他又会变高的,因为他有缓存这个请求的,会慢慢变高的,6626,基本上在6600左右了
这个时候可以做个总结出来,堆的初始值和最大值一致的情况下,并且堆的初始值越大就会越高,其实你们可以总结一个
结论出来,首先为什么要有一个初始内存呢,其实大家记住一点,说白了,堆的初始值要和堆的初始内存要一直,这是第一个条件,
你如果初始堆内存越大,就越高,而且你有没有发现,我现在要运行4,5遍,他才会产生一次GC回收,我们运行了多次,这一次GC
肯定不算,一般你不要把它设置满,你设置一半就行了,16G的话你设置成8G就行了,因为你还有其他的内存需要使用,所以这是
我们给你讲的一个结论出来,然后你们再想想,我设置512M,我用的是串行回收,我设置512M的时候,和初始值32M的时候,
差别有多少,差别为几次,是不是1000多次,是不是这样的,而且和我们最开始的差别多少次,差别2000多次,所以为什么有的时候
要把初始内存设大一点呢,这里就把串行这块已经讲完了,如果有人问你,JVM调优最基本的原则是什么,第一点是减少GC回收
次数,因为GC回收本身会影响程序的效率的,第二点是堆的初始值和最大值一定要一致,因为垃圾回收次数和设置堆的最大内存
无关,他是和初始堆内存大小有关系的,我已经把串行回收讲完了 调整初始堆 -XX:+PrintGCDetails -Xmx512M –Xms512M
-XX:+HeapDumpOnOutOfMemoryError -XX:+UseSerialGC -XX:PermSize=32M GC回收次数0次
吞吐量6561次 结论:堆的初始值和最大堆内存一致,并且初始堆越大就会高。