If it is possible to support both allocators in a single image then we should definitely go with that option.

On 10/16/2020 12:21 PM, Yun Tang wrote:
Thanks for Yang's suggestion. I think this could be a better choice.
We could install jemalloc and only enable it in LD_PRELOAD when user pass 
specific configuration for docker-entrypoint.sh.
By doing so, we could avoid to create another docker image tags and also offer 
ability to reduce memory fragmentation problem.

Does anyone else have other ideas?

Best
Yun Tang
________________________________
From: Yang Wang <danrtsey...@gmail.com>
Sent: Thursday, October 15, 2020 14:59
To: dev <dev@flink.apache.org>
Subject: Re: [DISCUSS][docker] Adopt Jemalloc as default memory allocator for 
debian based Flink docker image

Thanks Yun Tang for starting this discussion.

I think this is very important when deploy Flink with container environment
in production. I just
have quick question. Could we have both memory allocator(e.g. glibc,
jemalloc) in the Flink
official image and enable a specific one by setting ENV?

Best,
Yang

Yu Li <car...@gmail.com> 于2020年10月14日周三 下午12:23写道:

Thanks for debugging and resolving the issue and driving the discussion
Yun!

For the given solutions, I prefer option 1 (supply another Dockerfile using
jemalloc as default memory allocator) because of the below reasons:

1. It's hard to say jemalloc is always better than ptmalloc (glibc malloc),
or else glibc should have already adopted it as the default memory
allocator. And as indicated here [1], in some cases jemalloc will
consume as much as twice the memory than glibc

2. All existing Flink docker images use glibc, if we change the default
memory allocator to jemalloc and only supply one series of images, we will
leave those having better performance with glibc no other choices but
staying with old images. In another word, there's a risk of introducing new
problems while fixing an existing one if choosing option-2.

And there is a third option considering the efforts of maintaining more
images if the memory leak issue is not widely observed, that we could
document the steps of building Dockerfile with jemalloc as default
allocator so users could build it when needed, which leaves the burden to
our users so for me it's not the best option.

Best Regards,
Yu

[1] https://stackoverflow.com/a/33993215

On Tue, 13 Oct 2020 at 15:34, Yun Tang <myas...@live.com> wrote:

Hi all

Users report they meet serious memory leak when submitting jobs
continously in session mode within k8s (please refer to FLINK-18712[1] ),
and I also reproduce this to find this is caused by memory fragmentation
of
glibc [2][3] and provide solutions to fix this:

   *   Quick but not very clean solution to limit the memory pool of
glibc,
limit MALLOC_ARENA_MAX to 2

   *   More general solution by rebuilding the image to install
libjemalloc-dev and add the libjemalloc.so it to LD_PRELOAD

The reporter adopted the 2nd solution to fix this issue eventually. Thus,
I begin to think whether we should change our Dockerfile to adopt
jemalloc
as default memory allocator [4].
 From my point of view, we have two choices:

   1.  Introduce another Dockerfile using jemalloc as default memory
allocator, which means Flink needs another two new image tags to build
docker with jemalloc while default docker still use glibc.
   2.  Set the default memory allocator as jemalloc in our existing
Dockerfiles, which means Flink offer docker image with jemalloc by
default.
I prefer the 2nd option as our company already use jemalloc as default
memory allocator for JDK at our production environment due to messages
from
os team warning of glibc's memory fragmentation.
Moreover, I found several open source projects adopting jemalloc as
default memory allocator within their images to resolve memory
fragmentation problem, e.g fluent [5], home-assistant [6].

What do you guys think of this issue?

[1] https://issues.apache.org/jira/browse/FLINK-18712
[2]

https://www.gnu.org/software/libc/manual/html_mono/libc.html#Freeing-after-Malloc
[3] https://sourceware.org/bugzilla/show_bug.cgi?id=15321
[4] https://issues.apache.org/jira/browse/FLINK-19125
[5]

https://docs.fluentbit.io/manual/v/1.0/installation/docker#why-there-is-no-fluent-bit-docker-image-based-on-alpine-linux
[6] https://github.com/home-assistant/core/pull/33237


Best
Yun Tang


Reply via email to