普通的性能调优主要从四个方面入手
网络,磁盘IO,内存,CPU四个方面入手,下面案例就是从这四个角度来看。
我们的页面每天PV在30W ,主要是分布在两个主要页面:个人主页,展示主页。假设每个页面各自承担50%的PV,假设访问时间集中在白天8小时,平均下来每秒的请求数是 5.2个,考虑到高峰情况,那么我们就乘以系数20, 就当100个处理,我们最大的一个请求会产生13个processor ,也就是说 最大产生的线程回事 13*100 = 1300。也就是说高峰时刻会有1300个线程需要被处理,我们将队列设置为1000,对于高峰情况就抛弃,因为若是为了满足高峰情况的需要,就会使得部分请求处在队列中,不能充分的利用CPU的资源。
在做压力测试时候,自身应用内部做了小的多线程处理的框架,内部采用的线程池是 SPRING的 ThreadPoolTaskExecutor 的类,通过自身的一个监控框架我们发现,所有的线程单元执行的很快,但是在最后组装processor的时候,花费了时间,在过程中观察CPU的利用率并不是很高。
所以预估是在等待所有线程执行完成时,也就是说有大量的processor在线程池的等待队列中,为了验证是否由于该原因造成的,所以做如下测试:
因为前面提到每秒的平均请求是5.2 考虑到一般的情况,就设置为压测的并发数为 3*5 = 15.
测试案例一:
15线程
循环100次
线程池:
corePoolSize : CPU = 4
maxPoolSize : 2 * corePoolSize = 8
queueCapacity : 1000
压测页面: /xxx/22933
---------------------------------------------- 这个是分割线 ----------------------------------------------
稳定情况下的线程数:
[root@host_77-69 ~]# ps -eLf | grep java | wc -l
229
主要是观察,是否充分利用了CPU核数,达到我们预期的效果。现在的服务继承很多框架或是模块后,会启动很多你不知道的线程,在那跑着,时不时跳出来干扰你下,所以一定要等系统运行稳定后观察这个数值。
---------------------------------------------- 这个是分割线 ----------------------------------------------
CPU的一些信息:
[root@host_77-69 ~]# vmstat -ns 3 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 2056 723528 392024 1330728 0 0 0 1 1 2 0 0 100 0 0 0 0 2056 723404 392024 1330728 0 0 0 0 467 806 0 0 100 0 0 0 0 2056 723404 392028 1330728 0 0 0 17 462 807 0 0 100 0 0 0 0 2056 723404 392028 1330728 0 0 0 0 457 814 0 0 100 0 0
主要是关注 in , cs 这两个参数
in:每秒软中断次数
cs: 每秒上下文切换的次数
因为操作系统本身会有一些操作,在未压测前的数值基本在 460 .800 左右。
---------------------------------------------- 这个是分割线 ----------------------------------------------
[root@host_77-69 ~]# mpstat -P ALL 5 Linux 2.6.32-71.el6.x86_64 (host_77-69) 09/12/2012 _x86_64_ (4 CPU) 02:04:21 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 02:04:26 PM all 0.10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.90 02:04:26 PM 0 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.80
关注soft 这个参数 这个代表当前CPU在所有时间中,用于切换上下所化时间比,若是花费的越多,代表当前的线程切换过于频繁,没有充分利用CPU,建议减少线程数或是增加CPU。
user 、 nice、sys主要是观察系统中是否存在大量计算,或是死循环的情况,来消耗大量的CPU。
这个命令是对于vmstat的补充,更直观的观察CPU的上下文切换及软中断情况。
---------------------------------------------- 下面是内存的初始情况了 ----------------------------------------------
JVM自身的内存情况:
[root@host_77-69 ~]# jstat -gcutil `jps | grep -i main | awk '{print $1}'` 3000 1000 S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 0.00 90.91 13.56 60.25 26 0.877 2 0.802 1.679 0.00 0.00 91.17 13.56 60.25 26 0.877 2 0.802 1.679 0.00 0.00 91.27 13.56 60.25 26 0.877 2 0.802 1.679 0.00 0.00 91.28 13.56 60.25 26 0.877 2 0.802 1.679
fugcc次数基本不变,而且各个代内存变化基本不大
操作系统的内存情况:
[root@host_77-69 releases]# for i in {1..10};do free;sleep 3 ; done; total used free shared buffers cached Mem: 3925596 3223996 701600 0 392352 1330896 -/+ buffers/cache: 1500748 2424848 Swap: 4194296 2056 4192240 total used free shared buffers cached Mem: 3925596 3223996 701600 0 392352 1330896 -/+ buffers/cache: 1500748 2424848 Swap: 4194296 2056 4192240 total used free shared buffers cached Mem: 3925596 3223996 701600 0 392352 1330896 -/+ buffers/cache: 1500748 2424848 Swap: 4194296 2056 4192240
数值也基本保持不变化
---------------------------------------------- 下面是磁盘IO的初始情况了 ----------------------------------------------
[root@host_77-69 ~]# for i in {1..10};do iostat ; sleep 3 ; done ; Linux 2.6.32-71.el6.x86_64 (host_77-69) 09/12/2012 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.10 0.00 0.02 0.00 0.00 99.88 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.31 0.33 5.93 1751462 31740872 Linux 2.6.32-71.el6.x86_64 (host_77-69) 09/12/2012 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.10 0.00 0.02 0.00 0.00 99.88 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.31 0.33 5.93 1751462 31740960
主要观察
Blk_read/s 每秒中读取的块数
Blk_wrtn/s 每秒中写的块数
%iowait 当前在等待磁盘IO的情况
---------------------------------------------- 说了这么多终于要开始了 ----------------------------------------------
开始压测后,得到下面的数据:
[root@host_77-69 ~]# vmstat -ns 3 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- 0 0 2056 698224 393212 1331344 0 0 0 3 536 867 0 0 100 0 0 3 0 2056 694796 393212 1332248 0 0 0 19 7170 7515 55 4 40 0 0 1 0 2056 694796 393212 1333132 0 0 0 4 7121 7627 50 5 45 0 0 4 0 2056 692936 393216 1334376 0 0 0 17 6478 8738 54 5 42 0 0 2 0 2056 691548 393232 1335620 0 0 0 25 6497 7663 48 4 48 0 0 5 0 2056 689936 393232 1337052 0 0 0 3 7597 7174 47 5 48 0 0 3 0 2056 688704 393232 1338496 0 0 0 12 7369 8774 49 5 45 0 0 3 0 2056 686348 393232 1341528 0 0 0 819 12298 16011 50 5 45 0 0 4 0 2056 684976 393236 1343020 0 0 0 12 6034 6951 48 4 48 0 0 3 0 2056 664268 393240 1344508 0 0 0 1 6731 9584 52 5 42 0 0 1 0 2056 659360 393240 1346284 0 0 0 12 7797 8431 54 5 41 0 0 2 0 2056 657624 393240 1347564 0 0 0 2684 6908 7656 50 5 45 0 0
在压测的这个过程中,CPU大量上下文切换动作明显增加了很多。
[root@host_77-69 ~]# mpstat -P ALL 5 04:01:32 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 04:01:37 PM all 0.15 0.00 0.10 0.00 0.00 0.05 0.00 0.00 99.70 04:01:37 PM 0 0.20 0.00 0.00 0.00 0.00 0.20 0.00 0.00 99.60 04:01:37 PM 1 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.80 04:01:37 PM 2 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.80 04:01:37 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
这个数据上看出其中一个CPU花费在切换的时间比是0.2%,也不是很高。
[root@host_77-69 ~]# ps -eLf | grep java | wc -l 229 [root@host_77-69 ~]# ps -eLf | grep java | wc -l 236 [root@host_77-69 ~]# ps -eLf | grep java | wc -l 236 [root@host_77-69 ~]# ps -eLf | grep java | wc -l 235 [root@host_77-69 ~]# ps -eLf | grep java | wc -l 229 [root@host_77-69 ~]# ps -eLf | grep java | wc -l 229
java的线程数增加到了236,也就是说增加了7个,我们最初设置是4个,队列1000 ,在队列满了后,增加了3个,也就是说,这种情况,扩容到7个线程,就能满足我们的压测条件,那说明core为4,存在大量的队列积压情况,同时,上面的数据表明,用于上下文切换的比例也不是很高,如此我们就可以增加线程池的corePoolSize。那么下个案例就可以设置为8个试试看。
[root@host_77-69 ~]# jstat -gcutil `jps | grep -i main | awk '{print $1}'` 3000 1000 S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 27.46 76.94 19.37 60.86 31 1.139 3 1.497 2.636 0.00 23.34 85.64 19.37 60.90 33 1.150 3 1.497 2.647 0.00 36.14 38.44 19.37 60.91 35 1.167 3 1.497 2.665 0.00 63.19 37.87 19.37 60.92 37 1.191 3 1.497 2.688 59.29 0.00 1.61 19.48 60.92 40 1.226 3 1.497 2.723 0.00 50.63 58.22 19.50 60.93 41 1.236 3 1.497 2.733 0.00 51.09 70.36 19.58 60.94 43 1.265 3 1.497 2.762 44.05 0.00 2.09 19.67 60.95 46 1.298 3 1.497 2.795 0.00 83.74 75.70 19.68 60.96 47 1.316 3 1.497 2.813 0.00 89.57 77.32 20.21 60.96 49 1.350 3 1.497 2.847 46.02 0.00 36.83 22.12 60.97 52 1.399 3 1.497 2.896 36.69 0.00 37.78 22.12 60.98 54 1.417 3 1.497 2.914 59.51 0.00 23.47 22.12 61.00 56 1.435 3 1.497 2.932 64.53 0.00 36.51 22.29 61.03 58 1.461 3 1.497 2.959 73.19 0.00 78.00 23.01 61.05 60 1.497 3 1.497 2.995 54.24 0.00 36.10 23.01 61.06 62 1.521 3 1.497 3.018 79.36 0.00 82.65 23.01 61.08 64 1.547 3 1.497 3.044 0.00 68.75 48.34 26.61 61.10 67 1.606 3 1.497 3.103 29.33 0.00 93.75 26.61 61.12 68 1.613 3 1.497 3.110 0.00 45.32 23.68 26.61 61.12 71 1.640 3 1.497 3.138 34.93 0.00 19.75 29.84 61.13 74 1.697 3 1.497 3.194 22.59 0.00 27.47 29.84 61.14 76 1.711 3 1.497 3.208 54.40 0.00 74.16 30.45 61.15 78 1.734 3 1.497 3.231 25.23 0.00 77.50 30.45 61.15 80 1.747 3 1.497 3.245 25.23 0.00 98.39 30.45 61.15 80 1.747 3 1.497 3.245 25.23 0.00 99.94 30.45 61.15 80 1.747 3 1.497 3.245 0.00 14.32 1.42 30.45 61.15 81 1.752 3 1.497 3.250 0.00 14.32 2.15 30.45 61.15 81 1.752 3 1.497 3.250 0.00 14.32 2.27 30.45 61.15 81 1.752 3 1.497 3.250 0.00 14.32 2.48 30.45 61.15 81 1.752 3 1.497 3.250
这个是查看JVM的GC情况的,数据表明,压测期间,ygc还是蛮频繁,但是每次ygc后进入old区的数据并不是很多,说明我们的应用大部分是朝生夕死,并不会发生频繁fgc的情况,之后就不用把重心放在JVM的GC上。
[root@host_77-69 releases]# for i in {1..10};do free;sleep 3 ; done; total used free shared buffers cached Mem: 3925596 3370968 554628 0 395584 1369572 -/+ buffers/cache: 1605812 2319784 Swap: 4194296 2056 4192240
操作系统跟之心前相比,基本没有发生任何的改变。
avg-cpu: %user %nice %system %iowait %steal %idle 0.10 0.00 0.02 0.00 0.00 99.88 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.31 0.33 5.95 1751462 31823032 Linux 2.6.32-71.el6.x86_64 (host_77-69) 09/12/2012 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.10 0.00 0.02 0.00 0.00 99.88 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.31 0.33 5.95 1751462 31823032
这个是当前应用对于磁盘的消耗情况,对比初始值,基本没什么变化,可以看出我们这个应用没有磁盘IO的消耗,这说明本应用并没有大量的操作本地磁盘IO情况。
这个也不是导致我们系统慢的原因,也可以排除。
xxxModuleProcessor33 最慢的processor是33毫秒
我们的processor最大的消耗是33毫秒,外部调用4.9ms ,但是最后看到的消耗时间是557ms,且上面的情况说明了,存在大量队列积压,我们的数据处理processor都在等待队列了
下面是我们通过
Avg(ms):
第一次: 662.5 毫秒
第二次: 680 毫秒
第三次: 690 毫秒
通过上面的分析,平均响应时间是:680ms,基本可以确定问题在于线程池corePoolSize过小,导致了一定的数据在队列中积压。
--------------------------------------------- 这是一条伟大的分割线 ---------------------------------------------
测试案例二:
改动:增加一倍的corePoolSize
15线程
循环100次
线程池:
corePoolSize ;2 * CPU = 8
maxPoolSize :2 * corePoolSize = 16
queueCapacity : 1000
压测页面: /member/22933
--------------------------------------------- 我又出现了 ---------------------------------------------
再次启动稳定后:
[root@host_77-69 ~]# for i in {1..10000};do ps -eLf | grep java | wc -l; echo "-------" ; sleep 2 ; done;
215
-------
215
-------
215
-------
java的线程数维持在215个,跟上面有点不同,当然不管了,这个不是重点。
[root@host_77-69 ~]# vmstat -ns 3 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- 0 0 2056 933420 395768 1341376 0 0 0 8 579 875 0 0 100 0 0 0 0 2056 933420 395768 1341376 0 0 0 3 579 860 0 0 100 0 0 0 0 2056 933420 395776 1341372 0 0 0 9 568 867 0 0 100 0 0
初始情况CPU运行都很正常
[root@host_77-69 ~]# mpstat -P ALL 5 Linux 2.6.32-71.el6.x86_64 (host_77-69) 09/12/2012 _x86_64_ (4 CPU) 05:43:34 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 05:43:39 PM all 0.40 0.00 0.10 0.00 0.00 0.00 0.00 0.00 99.50 05:43:39 PM 0 0.80 0.00 0.20 0.00 0.00 0.00 0.00 0.00 99.00
基本没有软中断
压测后得到如下数据:
[root@host_77-69 ~]# for i in {1..10000};do ps -eLf | grep java | wc -l; echo "-------" ; sleep 2 ; done;
214
-------
214
-------
214
-------
217
-------
219
-------
219
-------
。。。。。。
221
-------
219
-------
。。。。。。
218
-------
218
-------
214
-------
这个java线程数的变化情况,从 214-- 221 -- 214。 初始化了8个,然后增加了7个,也就是说线程池中总共启用了15个线程。
------------------------------------------------------
[root@host_77-69 ~]# mpstat -P ALL 5 05:59:00 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 05:59:05 PM all 51.46 0.00 4.58 0.00 0.29 2.00 0.00 0.00 41.67 05:59:05 PM 0 50.98 0.00 4.71 0.00 0.98 7.25 0.00 0.00 36.08 05:59:05 PM 1 51.07 0.00 4.29 0.00 0.00 0.39 0.00 0.00 44.25 05:59:05 PM 2 50.49 0.00 4.87 0.00 0.00 0.19 0.00 0.00 44.44 05:59:05 PM 3 53.29 0.00 4.46 0.00 0.00 0.19 0.00 0.00 42.05 05:59:05 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 05:59:10 PM all 49.56 0.00 4.25 0.00 0.29 2.00 0.00 0.00 43.89 05:59:10 PM 0 46.56 0.00 3.73 0.00 1.18 7.07 0.00 0.00 41.45 05:59:10 PM 1 58.12 0.00 4.31 0.00 0.00 0.39 0.00 0.00 37.18 05:59:10 PM 2 45.72 0.00 4.67 0.00 0.00 0.39 0.00 0.00 49.22 05:59:10 PM 3 47.95 0.00 4.29 0.00 0.00 0.39 0.00 0.00 47.37 05:59:10 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 05:59:15 PM all 50.54 0.00 4.19 0.00 0.29 1.75 0.00 0.00 43.23 05:59:15 PM 0 55.36 0.00 3.70 0.00 1.17 5.85 0.00 0.00 33.92 05:59:15 PM 1 53.62 0.00 4.70 0.00 0.00 0.59 0.00 0.00 41.10 05:59:15 PM 2 46.98 0.00 4.29 0.00 0.00 0.19 0.00 0.00 48.54 05:59:15 PM 3 46.21 0.00 4.27 0.00 0.00 0.19 0.00 0.00 49.32 05:59:15 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 05:59:20 PM all 52.78 0.00 4.48 0.05 0.39 2.14 0.00 0.00 40.17 05:59:20 PM 0 52.17 0.00 3.94 0.00 1.57 7.68 0.00 0.00 34.65 05:59:20 PM 1 52.35 0.00 4.90 0.00 0.00 0.39 0.00 0.00 42.35 05:59:20 PM 2 57.09 0.00 4.85 0.00 0.00 0.19 0.00 0.00 37.86 05:59:20 PM 3 49.42 0.00 4.23 0.00 0.00 0.38 0.00 0.00 45.96 05:59:20 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 05:59:25 PM all 46.90 0.00 3.85 0.00 0.34 1.76 0.00 0.00 47.15 05:59:25 PM 0 48.34 0.00 3.70 0.00 1.56 6.43 0.00 0.00 39.96 05:59:25 PM 1 43.30 0.00 4.47 0.00 0.00 0.39 0.00 0.00 51.84 05:59:25 PM 2 50.59 0.00 3.52 0.00 0.00 0.39 0.00 0.00 45.51 05:59:25 PM 3 45.14 0.00 3.70 0.00 0.00 0.19 0.00 0.00 50.97
上面的数据表明,中断占CPU的比例确大大增加了。单核中断最高达到了7.25% 如此导致了什么结果呢?
Min(ms)Max(ms)Avg(ms)95Line(ms)Std(ms)TPS
161.2 8877.4731.7 1000.0 65.3 1.2
想比较corePoolSize:4 max:8 性能反而下降了。平均响应时间从662.5降到了731.7。
最慢的processor的消耗时间是:187.9
期间也猜测可能是其中一个服务被我们压坏了,就重启了那个服务,再次压测的结果是
Min(ms)Max(ms)Avg(ms)95Line(ms)Std(ms)TPS
102.9 9188.9762.5 1095.0 657.8 3.0
平均响应时间是:750毫秒左右。
也就是说,基本可以确认是由于我们增加了 coreSize和maxSize导致性能变慢了。慢了近80毫秒。说明过多的CPU并不会加快我们的处理速度。
如此就有了下面的方案。
测试方案三:
corePoolSize : cpu数量 + 1 = 5
maxPoolSzie : 2 * corePoolSize = 10
我们看下具体情况吧:
[root@host_77-69 ~]# mpstat -P ALL 5 06:57:36 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 06:57:41 PM all 58.27 0.00 5.38 0.00 0.49 2.30 0.00 0.00 33.56 06:57:41 PM 0 61.66 0.00 4.74 0.00 1.98 8.10 0.00 0.00 23.52 06:57:41 PM 1 55.75 0.00 5.65 0.00 0.00 0.58 0.00 0.00 38.01 06:57:41 PM 2 57.81 0.00 5.47 0.00 0.00 0.20 0.00 0.00 36.52
CPU的上下文切换还是很厉害。达到了8.10%
[root@host_77-69 ~]# for i in {1..10000};do ps -eLf | grep java | wc -l; echo "-------" ; sleep 2 ; done;
214
-------
214
-------
219
-------
219
-------
217
-------
215
-------
214
214--219
原来线程池core是5,我们最大是10个,线程数确实增加到了10个,就是说10个线程对应到4个CPU上,两者的比例是1:2.25
结果:
第一次压测是:648毫秒
第二次压测是:622毫秒
第三次压测是:603毫秒
就取中间值吧:622毫秒
性能想比较 core:8 max:16的话,有0.060毫秒的提升。说明一定cpu和进程数保持在1:2.25的比例上,效率上还是有提高的,但是上下文切换的还是很厉害。
为了不让它切换的这么厉害,就将max设置的小点吧。
测试方案四
线程:15
循环:100次
corePoolSize : cpu数量 + 1 = 5
maxPoolSzie : 2 * cpu = 8
08:13:13 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 08:13:18 PM all 52.45 0.00 4.60 0.00 0.10 1.27 0.00 0.00 41.58 08:13:18 PM 0 60.00 0.00 3.96 0.00 0.59 3.96 0.00 0.00 31.49 08:13:18 PM 1 50.29 0.00 5.48 0.00 0.00 0.20 0.00 0.00 44.03 08:13:18 PM 2 50.78 0.00 4.86 0.00 0.00 0.58 0.00 0.00 43.77 08:13:18 PM 3 48.83 0.00 4.28 0.00 0.00 0.19 0.00 0.00 46.69 08:13:18 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 08:13:23 PM all 50.05 0.00 4.29 0.00 0.10 1.22 0.00 0.00 44.34 08:13:23 PM 0 57.54 0.00 4.56 0.00 0.20 3.97 0.00 0.00 33.73 08:13:23 PM 1 49.81 0.00 4.28 0.00 0.00 0.39 0.00 0.00 45.53 08:13:23 PM 2 48.16 0.00 3.88 0.00 0.00 0.39 0.00 0.00 47.57 08:13:23 PM 3 45.07 0.00 4.45 0.00 0.00 0.19 0.00 0.00 50.29 08:13:23 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 08:13:28 PM all 51.34 0.00 4.69 0.00 0.10 1.27 0.00 0.00 42.60 08:13:28 PM 0 60.08 0.00 4.15 0.00 0.40 3.95 0.00 0.00 31.42 08:13:28 PM 1 47.75 0.00 6.07 0.00 0.00 0.39 0.00 0.00 45.79 08:13:28 PM 2 47.48 0.00 4.26 0.00 0.00 0.39 0.00 0.00 47.87 08:13:28 PM 3 50.19 0.00 4.28 0.00 0.00 0.39 0.00 0.00 45.14
中断时间确实从7%下降到了4%左右。
[root@host_77-69 ~]# for i in {1..10000};do ps -eLf | grep java | wc -l; echo "-------" ; sleep 2 ; done;
215
-------
217
-------
217
-------
219
-------
219
-------
218
-------
线程池基本处于饱和状态。
结果:
第一次压测结果:629毫秒
第二次压测结果:618毫秒
第三次压测结果:586毫秒
这次CPU:线程数为1:2
相比较CPU和线程数1.2.25的结果有稍微的提升,因为CPU中断时间比下降了。
最终的结论,JVM的垃圾回收,本地磁盘IO,操作系统内存都不会对本应用产生影响,唯一的元素就是线程池大小的设置。目前测试出来的最佳策略是:
corePoolSize = cpu + 1
maxPoolSize = 2 * cpu
相关推荐
标题中提到的“ORACLE DBA工作笔记 运维数据迁移与性能调优”揭示了这本书籍主要围绕着Oracle数据库管理员(DBA)在日常工作中经常需要进行的两项关键任务:数据迁移和性能调优。作为一名Oracle DBA,不仅要负责...
阿里巴巴Java性能调优华山版是一套系统性能调优教程,!通过这份笔记的学习,你将会有一个系统的调优头脑和策略!快了何止100%?需要的朋友可下载试试! 众所周知性能调优可以使系统稳定,用户体验更佳,甚至在...
Oracle性能调优是数据库管理中的关键任务,旨在提高数据库系统的响应速度和整体效率。以下是针对Oracle性能调优的详尽解析: 首先,调优的角色包括系统设计人员、系统开发人员、DBA(数据库管理员)以及操作系统...
### 马士兵JVM调优笔记知识点梳理 #### 一、Java内存结构 Java程序运行时,其内存被划分为几个不同的区域,包括堆内存(Heap)、方法区(Method Area)、栈(Stack)、程序计数器(Program Counter Register)以及...
Linux性能调优是系统管理员和开发人员优化Linux系统性能的重要技能。它涉及对系统资源和应用程序的分析、监控、和调整,以实现更高的效率和响应速度。本篇学习笔记详细介绍了性能分析的步骤、优化工具、性能指标的...
针对“Oracle DBA性能调优学习笔记”这一主题,我们可以提取并解释出以下重点知识。 首先,性能调优是一个多角色参与的过程。不仅DBA需要参与,应用架构师、应用设计师、应用开发人员以及OS和存储系统管理员也同样...
"Windchill性能调优笔记.docx"文件很可能是对以上这些方面的详细记录和指南,包含了具体的步骤和建议。在实际操作中,应根据企业的具体情况进行调整,通过不断的测试和调整,找到最适合自己企业的性能优化方案。记住...
JVM性能调优是一项关键技术,旨在优化JVM的内存管理、垃圾收集、类加载等方面,以提升程序运行速度、减少内存占用并避免系统崩溃。本教程"JVM性能调优经典教程"由马士兵老师倾力讲解,旨在帮助Java开发者进阶,掌握...
在开发过程中总结的ios性能调优技巧,其中有自己实际工程中的总结,也有从网络上的摘抄。
本部分将详细介绍Oracle 11g数据库性能优化笔记的第五部分内容,通过实例调优的步骤来逐步深入理解如何使用Oracle提供的性能视图来改善数据库实例的性能。 首先,确定问题的范围和性能目标是实例调整的起始点。这...
在本节"Go语言学习(五)高...记得结合提供的"Go语言学习(五)高质量编程与性能调优实战_青训营笔记.md"和"Go语言学习(五)高质量编程与性能调优实战_青训营笔记.pdf"文档深入学习,以获取更全面的理解和实践指导。
《JVM调优笔记》 Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行字节码,管理内存,以及优化程序性能。JVM调优是提高Java应用程序性能的关键步骤,涉及到多个方面,包括堆内存设置、垃圾收集器选择、...
linux 参数调优
马老师 JVM 调优实战笔记 JVM 调优是 Java 开发者们不可或缺的技能,它直接影响着 Java 应用程序的性能和稳定性。本笔记是马老师的 JVM 调优实战笔记,涵盖了 JVM 的概述、内存结构、堆内存、垃圾回收算法、JVM ...
MySQL性能调优与运维是DBA日常工作中至关重要的任务,涉及到数据库系统的稳定性和效率。以下是一些关键知识点的详细说明: 1. **热点数据导出与加载的影响**:热点数据导出是为了避免数据库重启后因预热缓存而消耗...
根据给定的信息,本文将详细解析MySQL调优过程中的几个关键知识点:存储引擎介绍、查询执行流程分析以及执行计划详解。 ### 一、MySQL存储引擎介绍 #### 1. MySQL插拔式存储引擎概述 MySQL的一大特点是其插拔式的...
在IT行业中,容量测试和性能调优是两个关键的领域,它们对于确保系统稳定性和高效运行至关重要。容量测试主要是为了评估系统在预期或峰值负载下的处理能力,而性能调优则是通过对系统的各种参数进行调整,以提高其...
这份"Java生产环境下性能监控与调优详解课程笔记(完整版)"涵盖了多个重要的知识点,旨在帮助开发者和运维人员提升Java应用的性能。 一、Java性能监控工具 1. JVisualVM:集成在JDK中的一个多用途工具,可以进行...
Oracle性能调优是数据库管理员和开发人员关注的重要领域,它涉及到如何优化数据库系统以提高查询速度、减少资源消耗,从而提升整体应用性能。本资料集是作者精心整理的Oracle调优笔记,涵盖了一系列实用的调优技巧和...