3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MongoDBをDockerコンテナ上で動かしたときに出るWARNINGの消しかた

Posted at

概要

Dockerコンテナ上でMongoDBを動かしているとき、ログファイルにtransparent_hugepage関連のWARNINGが出ていることに気がつきました。

2018-08-15T06:38:47.743+0000 I CONTROL  [initandlisten]
2018-08-15T06:38:47.743+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-08-15T06:38:47.743+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-08-15T06:38:47.743+0000 I CONTROL  [initandlisten]
2018-08-15T06:38:47.743+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-08-15T06:38:47.743+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-08-15T06:38:47.743+0000 I CONTROL  [initandlisten]
2018-08-15T06:38:47.745+0000 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/opt/storage/diagnostic.data'
2018-08-15T06:38:47.753+0000 I NETWORK  [HostnameCanonicalizationWorker] Starting hostname canonicalization worker

それぞれのWARNINGで never を設定するように促されました。

そもそもTransparent Huge Page (THP) とは何なのかを調べてみると、MongoDBの公式ドキュメントに以下の記事がありました。

原文

Transparent Huge Pages (THP) is a Linux memory management system that reduces the overhead of Translation Lookaside Buffer (TLB) lookups on machines with large amounts of memory by using larger memory pages.

However, database workloads often perform poorly with THP, because they tend to have sparse rather than contiguous memory access patterns. You should disable THP on Linux machines to ensure best performance with MongoDB.

日本語訳

Transparent Huge Pages(THP)は、大きなメモリーページを使用して大量のメモリーを持つマシンでTranslation Lookaside Buffer(TLB)ルックアップのオーバーヘッドを削減するLinuxメモリー管理システムです。

ただし、データベースワークロードは、連続したメモリアクセスパターンではなく、希薄な傾向があるため、THPでパフォーマンスが低下することがよくあります。 LinuxマシンでTHPを無効にして、MongoDBで最高のパフォーマンスを確保する必要があります。

THPの仕組みはメモリを大きな単位で扱えるようにして一般的には性能の向上が図れますが、MongoDBなどのデータベースシステムとは相性が良くないようです。そのためTHPを無効化するようにログファイルからWARNINGとして促しています。

対処方法

sysfsutils パッケージをインストールして /etc/sysfs.conf ファイルへTHPを無効化する行を追記することでWARNINGを消すことができます。

...(略)...
RUN yum install -y sysfsutils
RUN echo 'kernel/mm/transparent_hugepage/enabled = never' >> /etc/sysfs.conf \
 && echo 'kernel/mm/transparent_hugepage/defrag = never' >> /etc/sysfs.conf

これでTHPによるMongoDBのパフォーマンス劣化が改善できます。

試したこと (失敗編)

THPを無効化するためDockerfileから以下のように never を該当のファイルへ追記してみました。

RUN echo never > /sys/kernel/mm/transparent_hugepage/enabled \
 && echo never > /sys/kernel/mm/transparent_hugepage/defrag

すると、Dockerイメージのビルド時に以下のエラーで怒られてしまいました。

/bin/sh: /sys/kernel/mm/transparent_hugepage/enabled: Read-only file system

どうやら読み取り専用のファイルのためDockerfileからechoコマンドによる追記はできないようです。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?