使用vmstat监视Java App时,上下文切换的合适值是多少

时间:2019-06-24 10:54:15

标签: java performance vmstat

我刚刚读过Oreilly的《 优化Java 》一书,试图提高在慢速单CPU黑盒设备上应用程序的性能。

一个建议是使用vmstat -1并监视是否有过多的上下文切换器,但是它并不能说明什么是过多的

我的应用程序未运行时,Linux vmstat 1命令的输出

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1756780  29760 273460    0    0     0     0  110  139 18  2 80  0  0
 2  0      0 1756732  29760 273464    0    0     0     0  111  144 21  2 78  0  0
 0  0      0 1756780  29760 273464    0    0     0     0  120  250 29 14 57  0  0
 0  0      0 1756780  29760 273464    0    0     0     0  110  134 16  5 79  0  0
 2  0      0 1756732  29760 273468    0    0     0     0  113  147 21  1 78  0  0
 0  0      0 1756780  29760 273464    0    0     0     0  116  203 19 13 68  0  0
 0  0      0 1756780  29760 273464    0    0     0     0  122  136 18  2 80  0  0
 2  0      0 1756732  29760 273468    0    0     0     0  114  145 17  6 77  0  0
 0  0      0 1756780  29760 273464    0    0     0     0  121  205 23 10 67  0  0
 0  0      0 1756780  29760 273464    0    0     0     0  117  138 17  3 79  0  0
 2  0      0 1756740  29760 273456    0    0     0     0  112  152 19  5 76  0  0

在应用程序运行时输出,但没有任何工作要做

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1510320  29760 273660    0    0     0     0  162  308 26  9 65  0  0
 0  0      0 1510320  29760 273660    0    0     0  1268  167  238 18  3 79  0  0
 0  0      0 1510336  29760 273628    0    0     0     0  156  282 21  9 70  0  0
 0  0      0 1510336  29760 273628    0    0     0     0  161  298 23 13 64  0  0
 0  0      0 1510336  29760 273628    0    0     0     0  154  223 18  3 79  0  0
 0  0      0 1510336  29760 273628    0    0     0     0  159  227 19  2 79  0  0
 0  0      0 1510336  29760 273616    0    0     0    36  172  319 27  9 64  0  0
 0  0      0 1510336  29760 273616    0    0     0     0  157  222 19  2 79  0  0
 0  0      0 1510336  29760 273616    0    0     0     0  156  224 20  1 79  0  0
 0  0      0 1510336  29760 273616    0    0     0     0  162  299 28  8 65  0  0
 0  0      0 1510336  29760 273608    0    0     0     0  162  229 18  3 79  0  0
 0  0      0 1510336  29760 273612    0    0     0    12  160  234 18  3 79  0  0
 0  0      0 1510336  29760 273608    0    0     0     0  167  362 28 18 54  0  0
 0  0      0 1510336  29760 273608    0    0     0     0  157  219 20  1 79  0  0
 0  0      0 1510336  29760 273608    0    0     0     0  159  224 20  2 79  0  0
 0  0      0 1510336  29760 273608    0    0     0     0  165  324 24 13 63  0  0
 0  0      0 1510336  29760 273608    0    0     0     4  160  231 19  2 79  0  0
 0  0      0 1510336  29760 273608    0    0     0     0  154  223 16  5 79  0  0
 0  0      0 1510336  29760 273600    0    0     0     0  161  301 21 15 64  0  0
 0  0      0 1510336  29760 273600    0    0     0     0  154  219 17  4 79  0  0
 0  0      0 1510336  29760 273600    0    0     0     0  157  229 19  2 79  0  0
 0  0      0 1510336  29760 273604    0    0     0   208  164  306 25 10 64  0  0

在应用程序繁忙并以最大容量运行时输出

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 6  1      0 1680244  29756 176972    0    0   744     0  206  382 84 16  0  0  0
 5  0      0 1679252  29756 178156    0    0   652  1408  495  382 93  7  0  0  0
 6  0      0 1677756  29756 178964    0    0   668     0  515  402 97  3  0  0  0
 6  0      0 1676516  29756 179472    0    0   500     0  181  402 87 13  0  0  0
 4  0      0 1675772  29756 180012    0    0   504     0  188  438 98  2  0  0  0
 5  0      0 1675036  29756 180604    0    0     0     0  320  351 96  4  0  0  0
10  0      0 1671308  29756 180676    0    0     0  2040  360  374 82 18  0  0  0
 4  0      0 1671308  29756 180804    0    0     0     0  179  397 88 12  0  0  0
 5  0      0 1671308  29756 181084    0    0     0     0  183  337 97  3  0  0  0
 4  0      0 1670688  29756 181544    0    0     0     0  182  385 84 16  0  0  0
 6  0      0 1670192  29756 182296    0    0     0     0  175  424 97  3  0  0  0
 4  0      0 1669308  29756 183132    0    0     0  1688  307  406 96  4  0  0  0
 4  0      0 1668936  29756 183216    0    0     0     0  218  418 87 13  0  0  0
 5  0      0 1664968  29756 183748    0    0    32     0  173  325 94  6  0  0  0
 4  0      0 1663852  29756 184768    0    0   520     0  200  434 97  3  0  0  0
 5  0      0 1662364  29756 185976    0    0   436     0  192  421 88 12  0  0  0
 5  0      0 1662240  29756 186416    0    0   176  3240  220  402 96  4  0  0  0
 5  0      0 1661744  29756 186680    0    0     0     8  635  371 91  9  0  0  0
 6  0      0 1661628  29756 186668    0    0     0   100  327  451 84 16  0  0  0
 4  0      0 1661636  29756 186684    0    0     0     0  184  397 100  0  0  0  0
 7  0      0 1658660  29756 186804    0    0     0     0  406  351 91  9  0  0  0
 6  0      0 1657916  29756 187160    0    0   348   472  228  410 87 13  0  0  0

因此,在没有我的应用程序的情况下,CS看起来介于100到200之间;繁忙但未运行时,则为200-300;繁忙时,则为300-400。对我来说,这种增加似乎是适当的,但这并不是基于太多。繁忙时,可运行进程的数量(r)增加,我认为这与Java线程相对应,这是因为没有足够的Internet I / O,令人惊讶的是没有更多的阻塞线程(b)

在该应用程序中,单个cpu上的工作线程数限制为3,因为我认为拥有更多线程只会增加上下文切换,而只有1意味着坐太多等待I / O而不会利用cpu到

当CPU利用率在82%和100%之间时。再次对我来说这似乎很好,但是书中警告说这可能是由于垃圾收集过多所致(但是,记录垃圾收集的选项似乎不适用于我使用的Java 9 jvm)

这个级别的性能调优对我来说是新的,对结果的任何解释都会很有趣

0 个答案:

没有答案