LINUX.ORG.RU

Не знаю, что это такое, но:

1. http://packages.debian.org/search?keywords=jemalloc

2. Читаем идущию с пакетом документацию (/usr/share/doc/libjemalloc1)

3. Если за пару минут гугленья я правильно понял, что это за штука, то запустив программу/сервис таким образом, мы заставим её использовать эту фигню:

LD_PRELOAD=$LD_PRELOAD:/path/to/jemalloc.so /path/to/program

Это относится и к jdk/jre

selivan ★★★
()
Ответ на: комментарий от selivan

Спасибо ;) Чтобы для всего софта юзать -> создаем /etc/ld.so.preload

Если добавить

LD_PRELOAD=$LD_PRELOAD:/usr/lib/x86_64-linux-gnu/libjemalloc.so.1

спасит в консоль

ERROR: ld.so: object 'export' from /etc/ld.so.preload cannot be preloaded: ignored.
ERROR: ld.so: object 'LD_PRELOAD=$LD_PRELOAD' from /etc/ld.so.preload cannot be preloaded: ignored.
ERROR: ld.so: object 'export' from /etc/ld.so.preload cannot be preloaded: ignored.
ERROR: ld.so: object 'LD_PRELOAD=$LD_PRELOAD' from /etc/ld.so.preload cannot be preloaded: ignored.

Если добавить

/usr/lib/x86_64-linux-gnu/libjemalloc.so.1

Все гуд, далее проверяем

#lsof /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
COMMAND     PID       USER  FD   TYPE     DEVICE SIZE/OFF    NODE NAME
mysqld_sa 27276       root mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
mysqld    27984      mysql mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
nginx     31123       root mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
nginx     31124   www-data mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
nginx     31125   www-data mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
apache2   31167       root mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
apache2   31170   www-data mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
apache2   31171   www-data mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
apache2   31173   www-data mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
apache2   31174   www-data mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
apache2   31198   www-data mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
php       31205 mine-craft mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
lsof      31207       root mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
lsof      31208       root mem    REG 182,297697   191088 5776491 /usr/lib/x86_64-linux-gnu/libjemalloc.so.1

poiuty
() автор топика
Ответ на: комментарий от selivan

Супер удобно, не нужно ничего компилить.

poiuty
() автор топика

jemalloc возвращает адреса по всему 64-битному адресному пространству, это может вызвать проблемы с программами, которые кастуют указатели к 32-битному int-у.

crowbar
()
Ответ на: комментарий от poiuty

Да, если LD_PRELOAD не определён, получится лишнее двоеточие. Правильно срабатывать во всех случаях будет это:

LD_PRELOAD=$LD_PRELOAD${LD_PRELOAD:+:}/usr/lib/x86_64-linux-gnu/libjemalloc.so.1 command
Бррр... кто-нибудь может сказать это на bash-е покрасивее?

Для всех сервисов я её включать бы не рискнул, включал бы по отдельности в /etc/default/service_name, для tomcat и jetty они точно есть.

Кстати, как java с ним работает? Стало хуже/лучше/также? Java вроде и сама жрёт память большими кусками и не возвращает, как раз чтобы избежать фрагментации?

selivan ★★★
()
Последнее исправление: selivan (всего исправлений: 1)
Ответ на: комментарий от crowbar

Спасибо за информацию. Делаю шаблон(debian-7) для VPS на OpenVZ. Предполагаю, что все программы будут 64bit. В противном случае, если будут жалобы, можно сделать «белый лист» -> jemalloc только для mysql, apache, php, nginx.

poiuty
() автор топика
Ответ на: комментарий от poiuty

О_о Фигасе как оно. Вот где перфоманс зарыт. Буду знать, полезно

selivan ★★★
()
Ответ на: комментарий от poiuty

А чтобы добавить предзагрузку для i386, достаточно второй строкой в ld.so.preload указать путь к 32-битной версии библиотеки?

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