Browse Source

[ruby] Use Jemalloc for better memory performance (#8998)

Petrik de Heus 1 year ago
parent
commit
77513b8d34

+ 7 - 1
frameworks/Ruby/agoo/agoo.dockerfile

@@ -6,6 +6,13 @@ RUN apt-get update -q \
          libpq-dev \
          libpq-dev \
     && rm -rf /var/lib/apt/lists/*
     && rm -rf /var/lib/apt/lists/*
 
 
+ENV RUBY_YJIT_ENABLE=1
+
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 WORKDIR /rack
 WORKDIR /rack
 
 
 COPY Gemfile app.rb ./
 COPY Gemfile app.rb ./
@@ -14,6 +21,5 @@ RUN bundle install --jobs=4
 
 
 EXPOSE 8080
 EXPOSE 8080
 
 
-ENV RUBY_YJIT_ENABLE=1
 
 
 CMD AGOO_WORKER_COUNT=$(nproc) ruby app.rb
 CMD AGOO_WORKER_COUNT=$(nproc) ruby app.rb

+ 6 - 1
frameworks/Ruby/hanami/hanami.dockerfile

@@ -1,12 +1,17 @@
 FROM ruby:3.3
 FROM ruby:3.3
 
 
-ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 ENV RUBY_YJIT_ENABLE=1
 ENV RUBY_YJIT_ENABLE=1
 
 
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 WORKDIR /hanami
 WORKDIR /hanami
 
 
 COPY Gemfile  ./
 COPY Gemfile  ./
 
 
+ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 RUN bundle install --jobs=8
 RUN bundle install --jobs=8
 
 
 COPY . .
 COPY . .

+ 7 - 1
frameworks/Ruby/rack-sequel/rack-sequel-passenger-mri.dockerfile

@@ -4,12 +4,18 @@ ADD ./ /rack-sequel
 
 
 WORKDIR /rack-sequel
 WORKDIR /rack-sequel
 
 
+ENV RUBY_YJIT_ENABLE=1
+
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 
 
 # TODO: https://github.com/phusion/passenger/issues/1916
 # TODO: https://github.com/phusion/passenger/issues/1916
 ENV _PASSENGER_FORCE_HTTP_SESSION=true
 ENV _PASSENGER_FORCE_HTTP_SESSION=true
 ENV DBTYPE=mysql
 ENV DBTYPE=mysql
-ENV RUBY_YJIT_ENABLE=1
 
 
 RUN ruby -r /rack-sequel/config/auto_tune -e 'puts auto_tune.first' > instances
 RUN ruby -r /rack-sequel/config/auto_tune -e 'puts auto_tune.first' > instances
 
 

+ 7 - 1
frameworks/Ruby/rack-sequel/rack-sequel-postgres-passenger-mri.dockerfile

@@ -4,12 +4,18 @@ ADD ./ /rack-sequel
 
 
 WORKDIR /rack-sequel
 WORKDIR /rack-sequel
 
 
+ENV RUBY_YJIT_ENABLE=1
+
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 
 
 # TODO: https://github.com/phusion/passenger/issues/1916
 # TODO: https://github.com/phusion/passenger/issues/1916
 ENV _PASSENGER_FORCE_HTTP_SESSION=true
 ENV _PASSENGER_FORCE_HTTP_SESSION=true
 ENV DBTYPE=postgresql
 ENV DBTYPE=postgresql
-ENV RUBY_YJIT_ENABLE=1
 
 
 RUN ruby -r /rack-sequel/config/auto_tune -e 'puts auto_tune.first' > instances
 RUN ruby -r /rack-sequel/config/auto_tune -e 'puts auto_tune.first' > instances
 
 

+ 7 - 1
frameworks/Ruby/rack-sequel/rack-sequel-postgres-unicorn-mri.dockerfile

@@ -4,10 +4,16 @@ ADD ./ /rack-sequel
 
 
 WORKDIR /rack-sequel
 WORKDIR /rack-sequel
 
 
+ENV RUBY_YJIT_ENABLE=1
+
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 
 
 ENV DBTYPE=postgresql
 ENV DBTYPE=postgresql
-ENV RUBY_YJIT_ENABLE=1
 
 
 EXPOSE 8080
 EXPOSE 8080
 
 

+ 7 - 1
frameworks/Ruby/rack-sequel/rack-sequel-postgres.dockerfile

@@ -4,10 +4,16 @@ ADD ./ /rack-sequel
 
 
 WORKDIR /rack-sequel
 WORKDIR /rack-sequel
 
 
+ENV RUBY_YJIT_ENABLE=1
+
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 
 
 ENV DBTYPE=postgresql
 ENV DBTYPE=postgresql
-ENV RUBY_YJIT_ENABLE=1
 
 
 EXPOSE 8080
 EXPOSE 8080
 
 

+ 7 - 1
frameworks/Ruby/rack-sequel/rack-sequel-unicorn-mri.dockerfile

@@ -4,10 +4,16 @@ ADD ./ /rack-sequel
 
 
 WORKDIR /rack-sequel
 WORKDIR /rack-sequel
 
 
+ENV RUBY_YJIT_ENABLE=1
+
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 
 
 ENV DBTYPE=mysql
 ENV DBTYPE=mysql
-ENV RUBY_YJIT_ENABLE=1
 
 
 EXPOSE 8080
 EXPOSE 8080
 
 

+ 7 - 1
frameworks/Ruby/rack-sequel/rack-sequel.dockerfile

@@ -4,10 +4,16 @@ ADD ./ /rack-sequel
 
 
 WORKDIR /rack-sequel
 WORKDIR /rack-sequel
 
 
+ENV RUBY_YJIT_ENABLE=1
+
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 RUN bundle install --jobs=4 --gemfile=/rack-sequel/Gemfile --path=/rack-sequel/rack-sequel/bundle
 
 
 ENV DBTYPE=mysql
 ENV DBTYPE=mysql
-ENV RUBY_YJIT_ENABLE=1
 
 
 EXPOSE 8080
 EXPOSE 8080
 
 

+ 6 - 1
frameworks/Ruby/rack/rack-falcon.dockerfile

@@ -1,12 +1,17 @@
 FROM ruby:3.3
 FROM ruby:3.3
 
 
-ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 ENV RUBY_YJIT_ENABLE=1
 ENV RUBY_YJIT_ENABLE=1
 
 
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 WORKDIR /rack
 WORKDIR /rack
 
 
 COPY Gemfile  ./
 COPY Gemfile  ./
 
 
+ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 RUN bundle config set without 'development test'
 RUN bundle config set without 'development test'
 RUN bundle install --jobs=8
 RUN bundle install --jobs=8
 
 

+ 6 - 3
frameworks/Ruby/rack/rack-unicorn.dockerfile

@@ -1,14 +1,17 @@
 FROM ruby:3.3
 FROM ruby:3.3
 
 
-#RUN apt-get update -yqq && apt-get install -yqq nginx
-
-ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 ENV RUBY_YJIT_ENABLE=1
 ENV RUBY_YJIT_ENABLE=1
 
 
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 WORKDIR /rack
 WORKDIR /rack
 
 
 COPY Gemfile ./
 COPY Gemfile ./
 
 
+ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 RUN bundle config set without 'development test'
 RUN bundle config set without 'development test'
 RUN bundle install --jobs=8
 RUN bundle install --jobs=8
 
 

+ 7 - 1
frameworks/Ruby/rails/rails-mysql.dockerfile

@@ -5,6 +5,13 @@ RUN apt-get update -yqq && apt-get install -yqq --no-install-recommends redis-se
 EXPOSE 8080
 EXPOSE 8080
 WORKDIR /rails
 WORKDIR /rails
 
 
+ENV RUBY_YJIT_ENABLE=1
+
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 COPY ./Gemfile* /rails/
 COPY ./Gemfile* /rails/
 
 
 ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 ENV BUNDLE_FORCE_RUBY_PLATFORM=true
@@ -13,7 +20,6 @@ RUN bundle install --jobs=8
 
 
 COPY . /rails/
 COPY . /rails/
 
 
-ENV RUBY_YJIT_ENABLE=1
 ENV RAILS_ENV=production_mysql
 ENV RAILS_ENV=production_mysql
 ENV PORT=8080
 ENV PORT=8080
 ENV REDIS_URL=redis://localhost:6379/0
 ENV REDIS_URL=redis://localhost:6379/0

+ 6 - 1
frameworks/Ruby/rails/rails.dockerfile

@@ -5,6 +5,12 @@ RUN apt-get update -yqq && apt-get install -yqq --no-install-recommends redis-se
 EXPOSE 8080
 EXPOSE 8080
 WORKDIR /rails
 WORKDIR /rails
 
 
+ENV RUBY_YJIT_ENABLE=1
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
 COPY ./Gemfile* /rails/
 COPY ./Gemfile* /rails/
 
 
 ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 ENV BUNDLE_FORCE_RUBY_PLATFORM=true
@@ -13,7 +19,6 @@ RUN bundle install --jobs=8
 
 
 COPY . /rails/
 COPY . /rails/
 
 
-ENV RUBY_YJIT_ENABLE=1
 ENV RAILS_ENV=production_postgresql
 ENV RAILS_ENV=production_postgresql
 ENV PORT=8080
 ENV PORT=8080
 ENV REDIS_URL=redis://localhost:6379/0
 ENV REDIS_URL=redis://localhost:6379/0

+ 6 - 1
frameworks/Ruby/roda-sequel/roda-sequel-passenger-mri.dockerfile

@@ -3,9 +3,14 @@ FROM ruby:3.3
 ADD ./ /roda-sequel
 ADD ./ /roda-sequel
 WORKDIR /roda-sequel
 WORKDIR /roda-sequel
 
 
-ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 ENV RUBY_YJIT_ENABLE=1
 ENV RUBY_YJIT_ENABLE=1
 
 
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
+ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 RUN bundle install --jobs=8
 RUN bundle install --jobs=8
 
 
 # TODO: https://github.com/phusion/passenger/issues/1916
 # TODO: https://github.com/phusion/passenger/issues/1916

+ 6 - 1
frameworks/Ruby/roda-sequel/roda-sequel-postgres-passenger-mri.dockerfile

@@ -3,9 +3,14 @@ FROM ruby:3.3
 ADD ./ /roda-sequel
 ADD ./ /roda-sequel
 WORKDIR /roda-sequel
 WORKDIR /roda-sequel
 
 
-ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 ENV RUBY_YJIT_ENABLE=1
 ENV RUBY_YJIT_ENABLE=1
 
 
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
+ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 RUN bundle install --jobs=8
 RUN bundle install --jobs=8
 
 
 # TODO: https://github.com/phusion/passenger/issues/1916
 # TODO: https://github.com/phusion/passenger/issues/1916

+ 6 - 1
frameworks/Ruby/roda-sequel/roda-sequel-postgres-unicorn-mri.dockerfile

@@ -3,9 +3,14 @@ FROM ruby:3.3
 ADD ./ /roda-sequel
 ADD ./ /roda-sequel
 WORKDIR /roda-sequel
 WORKDIR /roda-sequel
 
 
-ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 ENV RUBY_YJIT_ENABLE=1
 ENV RUBY_YJIT_ENABLE=1
 
 
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
+ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 RUN bundle install --jobs=8
 RUN bundle install --jobs=8
 
 
 ENV DBTYPE=postgresql
 ENV DBTYPE=postgresql

+ 6 - 1
frameworks/Ruby/roda-sequel/roda-sequel-postgres.dockerfile

@@ -3,9 +3,14 @@ FROM ruby:3.3
 ADD ./ /roda-sequel
 ADD ./ /roda-sequel
 WORKDIR /roda-sequel
 WORKDIR /roda-sequel
 
 
-ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 ENV RUBY_YJIT_ENABLE=1
 ENV RUBY_YJIT_ENABLE=1
 
 
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
+ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 RUN bundle install --jobs=8
 RUN bundle install --jobs=8
 
 
 ENV DBTYPE=postgresql
 ENV DBTYPE=postgresql

+ 6 - 1
frameworks/Ruby/roda-sequel/roda-sequel-unicorn-mri.dockerfile

@@ -3,9 +3,14 @@ FROM ruby:3.3
 ADD ./ /roda-sequel
 ADD ./ /roda-sequel
 WORKDIR /roda-sequel
 WORKDIR /roda-sequel
 
 
-ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 ENV RUBY_YJIT_ENABLE=1
 ENV RUBY_YJIT_ENABLE=1
 
 
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
+ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 RUN bundle install --jobs=8
 RUN bundle install --jobs=8
 
 
 ENV DBTYPE=mysql
 ENV DBTYPE=mysql

+ 6 - 1
frameworks/Ruby/roda-sequel/roda-sequel.dockerfile

@@ -3,9 +3,14 @@ FROM ruby:3.3
 ADD ./ /roda-sequel
 ADD ./ /roda-sequel
 WORKDIR /roda-sequel
 WORKDIR /roda-sequel
 
 
-ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 ENV RUBY_YJIT_ENABLE=1
 ENV RUBY_YJIT_ENABLE=1
 
 
+# Use Jemalloc
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends libjemalloc2
+ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
+
+ENV BUNDLE_FORCE_RUBY_PLATFORM=true
 RUN bundle install --jobs=8
 RUN bundle install --jobs=8
 
 
 ENV DBTYPE=mysql
 ENV DBTYPE=mysql