LINUX.ORG.RU

реально ли найти утечку в lua+nginx?

 


0

1

привет, ЛОР.
есть один сервис, работает на lua+ngx_lua, но дело в том, что происходят непонятные утечки памяти.

вроде бы, я «убиваю» переменные правильно и запускаю GC вручную -

----------------------------------------------------------------
-- Cleanup -----------------------------------------------------
----------------------------------------------------------------

sql.disconnect(ngx.ctx.db_link)
ngx.ctx.db_link = nil
ngx.ctx.request = nil
handler = nil
logmst = nil
collectgarbage()

но через пару дней утекает очень много памяти.

12836 nginx: worker process
12840 nginx: worker process
13316 nginx: worker process
17144 nginx: worker process

при этом, показания collectgarbage(«count») прямо пропорциональны расходу nginx'а.

node1-fr ~ # wget -qO - localhost/gc_stat
Worker 9817: GC size: 6659.080 KB
node1-fr~ # wget -qO - localhost/stat
Active connections: 2 
server accepts handled requests
 335704 335704 338040 
Reading: 0 Writing: 1 Waiting: 1 

можно ли как-нибудь отдебажить и выловить, куда уходит память?

★★★★★

У авторов lua-модуля есть пара костылей: 1 2 Первым пользовался для отладки своих модулей (не lua). До второго никак руки не дойдут пощупать. Ещё можно в issues у разрабочиков спрость на гитхабе.

Кстати, sql.disconnect(ngx.ctx.db_link) - что-то самописное? Если это оно, то там, вроде бы, оптимальнее использовать соединения заново, а не разрывать их.

fjoe
()
Ответ на: комментарий от snoopcat

Очень может быть, что оно плохо дружит с «многопоточностью» nginx. Я бы попробовал заменить на что-то более lua-nginx специфичное, например на это или вот это, благо обёртка же.

fjoe
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.