2015-04-10 1 views
1

Я пытаюсь проверить утечку памяти в моих модулях Nginx с valgrind.I пытается следующей команде,Nginx: [Ошибка] Сбой инициализации Lua VM

Valgrind --leak-чек = полный --tool = memcheck --show-reachable = yes --log-file = "/ tmp/val.out" -v/usr/local/nginx -c /usr/local/conf/nginx.conf

Я получаю ошибка nginx: [ошибка] не удалось инициализировать Lua VM

Я использую nginx-1.6.2 на Cent OS 7 с wua lua 0.9.15.

ответ

1

У меня была такая же проблема, и она была исправлена ​​путем обновления Valgrind и добавления некоторых дополнительных флагов в компиляцию LuaJIT.

Посмотрите на:

  • https://github.com/openresty/lua-nginx-module/issues/681
    В частности:

    • == 52538 == Использование Valgrind-3.10.0 и LibVEX;

    • Ваша версия Valgrind не поддерживает флаг MAP_32BIT требуемого собственного распределителем LuaJIT в. Вам нужна либо старая версия valgrind (например, 3.8.1), либо более новая версия (например, 3.11.0).

  • https://groups.google.com/forum/#!topic/openresty/riEO_YXTwz4
    В частности (с помощью Google перевести):

    Это потому, что LuaJIT собственного распределителя памяти использование MAP_32BIT этот флаг в Linux x86_64 выше для вызова MMAP() вызова системы. И Valgrind 3.9.0 больше не поддерживается с помощью mmap MAP_32BIT этого флага, это приведет к сбою инициализации LuaJIT .

    Решение состоит в том, чтобы повторно собрать специальную версию LuaJIT, заставить его использовать систему дозатора, с помощью команды, как это во время компиляции LuaJIT:

    сделать CCDEBUG = -g Q = XCFLAGS = '- DLUAJIT_USE_VALGRIND -DLUAJIT_USE_SYSMALLOC '

    Здесь наиболее важным является LUAJIT_USE_SYSMALLOC этот макрос. Конечно, для достижения наилучших результатов, вы должны также указать следующие параметры компилятора C:

    -DLUA_USE_APICHECK -DLUA_USE_ASSERT