Size: a a a

2020 July 09

MA

Mons Anderson in Tarantool
Kirill Alekseev
по системным: диски ок, памяти ок, цпу на всей тачке нагружен не сильно, потоков хватает. сейчас прикину сколько цпу жрет один шард в среднем
не, что там на машине в целом — пофиг. надо смотреть на то одно ядро, что отдано под tx тарантула )
источник

KA

Kirill Alekseev in Tarantool
Oleg Koshovetc
А луашная логика у вас в транзакции?
неа
источник

KA

Kirill Alekseev in Tarantool
Mons Anderson
не, что там на машине в целом — пофиг. надо смотреть на то одно ядро, что отдано под tx тарантула )
ты сейчас про tx очередь сетевухи?
источник

MA

Mons Anderson in Tarantool
нет, я про tx тред тарантула. мне не доводилось видеть такой нагрузки, что ушатала бы сеть и не ушатала при  этом тарантул
источник

KA

Kirill Alekseev in Tarantool
если забиндить все очереди на одно ядро)
источник

KA

Kirill Alekseev in Tarantool
cpu usage на шарде в пиках до 50%
источник

KA

Kirill Alekseev in Tarantool
но, опять же, это метрики с частотой сбора раз в n минут, да и в одну минуту может прилететь скопом много в какой то момент
источник

KA

Kirill Alekseev in Tarantool
как можно диагностировать проблемы с gc? может, можно как то мониторить задержки stop the world?
источник

KA

Kirill Alekseev in Tarantool
вот такие графики есть
источник

MA

Mons Anderson in Tarantool
Kirill Alekseev
как можно диагностировать проблемы с gc? может, можно как то мониторить задержки stop the world?
если в коде явно не вызывается collectgarbage, то не будет stop the world: gc инкрементальный
источник

MA

Mons Anderson in Tarantool
для начала начните мониторить ресурсы с высокой частотой (atop/collectd/monit: интервал 1-5 s)
начните снимать метрики с тарантула (github.com/tarantool/metrics)
источник

MA

Mons Anderson in Tarantool
ещё можно добавить loop-time инструментирование.
@okoshovetc поделись плиз файбером
источник

KA

Kirill Alekseev in Tarantool
Mons Anderson
если в коде явно не вызывается collectgarbage, то не будет stop the world: gc инкрементальный
а как тогда gc потенциально может подгружать на секунду?
источник

MA

Mons Anderson in Tarantool
Kirill Alekseev
а как тогда gc потенциально может подгружать на секунду?
явным collect
источник

MA

Mons Anderson in Tarantool
collectgarbage('collect') или collectgarbage('count') — это full cycle
если объектов много, то замирать может надолго
источник

MA

Mons Anderson in Tarantool
в принципе проверяется легко:
local clock = require'clock' local s = clock.time() collectgarbage('count') return clock.time() - s
источник

KA

Kirill Alekseev in Tarantool
в явном виде у нас collectgarbage не вызывается
источник

MA

Mons Anderson in Tarantool
Mons Anderson
в принципе проверяется легко:
local clock = require'clock' local s = clock.time() collectgarbage('count') return clock.time() - s
если это выдаёт значения около миллисекунды, это не GC
источник

OK

Oleg Koshovetc in Tarantool
Mons Anderson
ещё можно добавить loop-time инструментирование.
@okoshovetc поделись плиз файбером
fiber.create(function()
 fiber.name(GENERATION .. ':watchdog')
 local last = fiber.time()
 while GENERATION == package.reload.count and M._.monitor_cfg.watchdog_period > 0 do
   fiber.sleep(M._.monitor_cfg.watchdog_period)
   local now = fiber.time()
   local loop_time = now - last
   if loop_time > M._.monitor_cfg.watchdog_lag then
     log.info("Loop take too long: %0.2f instead of %s", now - last, M._.monitor_cfg.watchdog_lag)
   end
   _event("loop_time", loop_time)
   last=now
 end
end)
источник

KA

Kirill Alekseev in Tarantool
Oleg Koshovetc
fiber.create(function()
 fiber.name(GENERATION .. ':watchdog')
 local last = fiber.time()
 while GENERATION == package.reload.count and M._.monitor_cfg.watchdog_period > 0 do
   fiber.sleep(M._.monitor_cfg.watchdog_period)
   local now = fiber.time()
   local loop_time = now - last
   if loop_time > M._.monitor_cfg.watchdog_lag then
     log.info("Loop take too long: %0.2f instead of %s", now - last, M._.monitor_cfg.watchdog_lag)
   end
   _event("loop_time", loop_time)
   last=now
 end
end)
спасибо!
источник