LuaJIT как основа для
сервера приложений
Игорь Эрлих, IPONWEB
v0.3
Что такое LuaJIT
• Среда исполнения для Lua 5.1, включающая в себя трассирующий
JIT-компилятор
Что такое LuaJIT
• Среда исполнения для Lua 5.1, включающая в себя трассирующий
JIT-компилятор
• Работает существенно быстрее, чем официальный интерпретатор:
x2-x4 без JIT-компиляции
x2-x100 с JIT-компиляцией
Что такое LuaJIT
Развивается и поддерживается более десяти лет
• 08/09/2005: первый публичный релиз 1.0.3
• 14/05/2015: стабильный релиз 2.0.4
• Ветка 2.1 в активной разработке
Что такое LuaJIT
Большое количество пользователей и моделей применения
LuaJIT @ IPONWEB
• Многопоточный веб-сервер
• Бизнес-логика на Lua
• x86_64 GNU/Linux
• LuaJIT 2.0.4 (стабильный релиз)
Проблема #1
Ограничения по памяти
Ограничения по памяти
Сколько доступно управляемой памяти…
• В i686 GNU/Linux – 4GB
Ограничения по памяти
Сколько доступно управляемой памяти…
• В i686 GNU/Linux – 4GB
• В x86_64 GNU/Linux – 1GB???
Ограничения по памяти
typedef struct Mref {
uint32_t ptr32;
} Mref;
void *ptr = mmap((void *)MMAP_REGION_START,
size,
MMAP_PROT,
MAP_32BIT|MMAP_FLAGS,
-1,
0);
Ограничения по памяти
Как справиться?
• Снизить количество потоков
Ограничения по памяти
Как справиться?
• Снизить количество потоков
• Перейти от потоков к процессам
Ограничения по памяти
Как справиться?
• Снизить количество потоков
• Перейти от потоков к процессам
• Вывести данные в неуправляемую память
Ограничения по памяти
Как справиться?
• Снизить количество потоков
• Перейти от потоков к процессам
• Вывести данные в неуправляемую память
• Дождаться релиза v2.1
Проблема #2
Сборка мусора
Сборка мусора
• Mark’n’Sweep сборщик унаследован от Lua 5.1
Сборка мусора
• Mark’n’Sweep сборщик унаследован от Lua 5.1
• Инкрементальная, но не поддерживает поколения
Сборка мусора
• Mark’n’Sweep сборщик унаследован от Lua 5.1
• Инкрементальная, но не поддерживает поколения
• До 30% производительности на реальных нагрузках!
Проблема #3
Управление строками
Такая ситуация…
Управление строками
http://myadsite.org/myhandler/creative_id=15365532&bidder_id=1
http://myadsite.org/myhandler/creative_id=15365533&bidder_id=1
http://myadsite.org/myhandler/creative_id=15365534&bidder_id=1
http://myadsite.org/myhandler/creative_id=15365535&bidder_id=1
http://myadsite.org/myhandler/creative_id=15365536&bidder_id=1
http://myadsite.org/myhandler/creative_id=15365537&bidder_id=1
http://myadsite.org/myhandler/creative_id=15365538&bidder_id=1
......
Управление строками
http://myadsite.org/myhandler/creative_id=15365532&bidder_id=1
Выводы
• Основное преимущество LuaJIT – высокая скорость работы в
большинстве случаев (особенно в численных вычислениях)
• Большое количество управляемой памяти (в смысле количества
объектов или их совокупного размера) может быть реальной
проблемой
• Много лексикографически похожих слов (URL, пути файловой
системы) – потенциальная DoS уязвимость
Ссылки
• https://www.lua.org/
• https://luajit.org/
• https://github.com/LuaJIT/LuaJIT
• Or contact me:
https://ru.linkedin.com/in/iaehrlic
Q&A

LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (IPONWEB)