Что было бы подходящим значением для переключения контекста при использовании vmstat для мониторинга Java-приложения - PullRequest
0 голосов
/ 24 июня 2019

Я только что прочитал книгу Оптимизация Java от Oreilly, чтобы попытаться улучшить производительность моего приложения на медленном устройстве с «черным ящиком» с одним процессором.

Одной из рекомендаций было использование 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, удивляясь, что больше нет заблокированных потоков (b), поскольку в Интернете достаточно много операций ввода-вывода

Внутри приложения количество рабочих потоков ограничено 3 на одном процессоре, потому что я предполагаю, что наличие большего количества увеличило бы просто переключение контекста, а просто наличие 1 означало бы сидеть слишком долго, ожидая ввода-вывода и не используя процессор .Чтобы

Когда скорость процессора составляет от 82% до 100%. Опять же, мне это кажется довольно хорошим, но в книге есть предупреждение, что это может быть вызвано чрезмерной сборкой мусора (однако параметры ведения журнала сбора мусора, похоже, не работают с Java 9 jvm, который я использую)

Настройка производительности на этом уровне является новой для меня, любая интерпретация результатов будет интересна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...