Ho un'app di cluster che utilizza un back-end Redis distribuito, con script Lua generati dinamicamente inviati alle istanze redis. Gli script dei componenti Lua possono essere abbastanza complessi e avere un runtime significativo, e mi piacerebbe poterli profilare per trovare i punti caldi.Posso eseguire il profilo degli script Lua in esecuzione in Redis?
SLOWLOG is useful per avermi detto che i miei script sono lenti e esattamente come sono lenti, ma non è un problema mio. So quanto sono lenti, mi piacerebbe capire quali parti sono lente.
The redis EVAL docs è chiaro che redis non esporta le funzioni di cronometraggio in lua, il che fa sembrare che questo potrebbe essere una causa persa.
Quindi, in breve un fork personalizzato di Redis, c'è un modo per dire quali parti del mio script Lua sono più lente di altre?
EDIT ho preso il suggerimento di Doug e usato debug.sethook - ecco la routine di gancio ho inserito nella parte superiore del mio script:
redis.call('del', 'line_sample_count')
local function profile()
local line = debug.getinfo(2)['currentline']
redis.call('zincrby', 'line_sample_count', 1, line)
end
debug.sethook(profile, '', 100)
Poi, per vedere il più caldo 10 linee del mio script :
ZREVRANGE line_sample_count 0 9 WITHSCORES
Guardate questa Redis-demolitore che ho fatto: https://github.com/RedisLabs/redis-lua-debugger –