Автоматический режим сборщика мусора
moko 16.01.2021 01:40
Там слишком коротко описано, на самом деле это просто разовая проверка в начале обработки запроса и ручной вызов ^memory:compact[].
Но: сборщик мусора действительно можно переключить в автоматический режим (надо только придумать название опции в @conf или как-то иначе). Правда это имеет свою цену.
Вот у меня под рукой сейчас был код, который обрабатывает json из примерно 1,500,000 строк.
При сборке в ручном режиме:
before: cpu 0.823952 rss 414300 used 348200 free 43076 since 0 total 385920.78125
after: cpu 6.165322 rss 2485644 used 2293276 free 6736 since 2795594.046875 total 3181514.828125
compact: cpu 6.337695 rss 2485644 used 309192 free 1990820 since 0 total 3181519.09375
При сборке в автоматическом режиме:
before: cpu 0.936338 rss 340444 used 311780 free 5640 since 67844.421875 total 385927.203125
after: cpu 8.878208 rss 459392 used 387092 free 36824 since 93077.25 total 3181518.671875
compact: cpu 8.878228 rss 459392 used 387092 free 36824 since 93081.34375 total 3181522.765625
Видно, что в ручном режиме процесс вырос до ~2.5Gb, разовая сборка мусора (освободившая ~2Gb) заняла ~0.17 sec. Но результат мы получили за 6.3 sec. В автоматическом режиме процесс вырос всего до ~500Mb, но потратили на 2,5 sec больше. Можно предположить, что в процессе автоматическая сборка мусора запускалась порядка 20 раз.
В сборщике мусора есть параметр GC_free_space_divisor, который влияет на частоту сборки мусора.
По умолчанию 3. Можно например в @conf разрешить его задавать (и если он задан, переходить на автоматическую сборку).
/* We try to make sure that we allocate at */
/* least N/GC_free_space_divisor bytes between */
/* collections, where N is twice the number */
/* of traced bytes, plus the number of untraced */
/* bytes (bytes in "atomic" objects), plus */
/* a rough estimate of the root set size. */
/* N approximates GC tracing work per GC. */
/* The initial value is GC_FREE_SPACE_DIVISOR. */
/* Increasing its value will use less space */
/* but more collection time. Decreasing it */
/* will appreciably decrease collection time */
/* at the expense of space. */
/* The setter and getter are unsynchronized, so */
/* GC_call_with_alloc_lock() is required to */
/* avoid data races (if the value is modified */
/* after the GC is put to multi-threaded mode). */
/* In version 7.1 (and before), the setter */
/* returned the old value. */
При минимальном значении (1) результат такой:
before: cpu 0.928119 rss 339220 used 311788 free 5632 since 67854.09375 total 385928.65625
after: cpu 7.505589 rss 636636 used 384148 free 203608 since 116849.65625 total 3181518.015625
compact: cpu 7.505618 rss 636636 used 384148 free 203608 since 116851.625 total 3181519.984375
- Парсер 3.4.6b - встроенный веб-сервер, moko [M] 18.12.2020 16:31 / 18.12.2020 16:47
- Как тут реализовать rewrite аля apache? httpS - через nginx с проксированием запросов в парсер?, sergei v.2 06.08.2022 12:28 / 06.08.2022 12:40
- Ответ, moko [M] 09.08.2022 08:19
- А что процесс сервера делает в фоне?, G_Z [M] 30.11.2021 04:49
- Ответ, moko [M] 30.11.2021 19:27
- Ответ, G_Z [M] 30.11.2021 23:19 / 01.12.2021 14:26
- httpd class is undefined, G_Z [M] 26.11.2021 23:31 / 27.11.2021 05:57
- Ответ, moko [M] 27.11.2021 17:20
- Ответ, G_Z [M] 28.11.2021 02:50
- x64 не запускается в win-x64, Maxx [M] 25.01.2021 08:12 / 25.01.2021 08:17
- Автоматический сборщик мусора, Maxx [M] 15.01.2021 06:05
- $main:HTTPD.mode must be 'sequental' or 'threaded', G_Z [M] 28.12.2020 18:27
- Без идей, moko [M] 29.12.2020 01:11 / 29.12.2020 01:12
- Ответ, G_Z [M] 29.12.2020 01:25
- А как с кэшированием?, G_Z [M] 28.12.2020 05:28 / 28.12.2020 05:29
- Проблему не подтверждаю, moko [M] 28.12.2020 12:07 / 28.12.2020 12:44
- Ответ, G_Z [M] 28.12.2020 15:29 / 28.12.2020 15:29
- Ответ, moko [M] 28.12.2020 15:38
- Ответ, G_Z [M] 28.12.2020 15:44 / 28.12.2020 16:05
- Прикольно :), Maxx [M] 25.12.2020 07:38
- Ответ, moko 25.12.2020 13:42
- Так что получается через встроенный вебсервер он будет работать быстрее?, coel 25.12.2020 03:19
- Ух-ты, значимость этого недооценена!, AlexZimmer 24.12.2020 22:54
- Кстати www.parser.ru уже сутки работает на встроенном в парсер веб-сервере. :), moko [M] 23.12.2020 14:08
- И в docker! :), redactor [M] 22.12.2020 23:17
- GET и POST бы в form различать, для порядка ещё, Colonel 21.12.2020 04:53
- Круто! Наконец-то мы дожили до даймона парсера., Ivan Sergeev 20.12.2020 13:15
- Может его вынести в отдельный класс?, G_Z [M] 18.12.2020 20:29