web-dev-qa-db-ja.com

Dockerでjdk8を実行すると、ArchLinuxで「ファイル記述子テーブルを割り当てることができません-メモリ不足」で突然壊れました

昨日システムをアップグレードした後、Dockerコンテナを再起動しようとしています。 sbt(scalaビルドツール)コンテナーを実行しています。残念ながら、次のエラーで動作を停止しました

library initialization failed - unable to allocate file descriptor table - out of memory/usr/share/sbt/bin/sbt-launch-lib.bash: line 46:    76 Aborted                 (core dumped) "$@"

次に、ドッキングしたJavaアプリケーションが機能しなくなったことがわかりました。そこで、単純なTomcatを実行してみました。結果は以下のとおりです(数百行の[Too many errors, abort]であるため、下部でクリップされています)。

docker run -it --rm Tomcat:8.0                                                                                                                                             
Using CATALINA_BASE:   /usr/local/Tomcat
Using CATALINA_HOME:   /usr/local/Tomcat
Using CATALINA_TMPDIR: /usr/local/Tomcat/temp
Using JRE_HOME:        /docker-Java-home/jre
Using CLASSPATH:       /usr/local/Tomcat/bin/bootstrap.jar:/usr/local/Tomcat/bin/Tomcat-juli.jar
library initialization failed - unable to allocate file descriptor table - out of memory#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007fb6b7b3e532, pid=1, tid=140422755079936
#
# JRE version: OpenJDK Runtime Environment (7.0_181-b01) (build 1.7.0_181-b01)
# Java VM: OpenJDK 64-Bit Server VM (24.181-b01 mixed mode linux-AMD64 compressed oops)
# Derivative: IcedTea 2.6.14
# Distribution: Debian GNU/Linux 8.10 (jessie), package 7u181-2.6.14-1~deb8u1
# Problematic frame:
# C  [libc.so.6+0x36532]  abort+0x232
#
# Core dump written. Default location: /usr/local/Tomcat/core or core.1
#
# An error report file with more information is saved as:
# /usr/local/Tomcat/hs_err_pid1.log
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
#   http://icedtea.classpath.org/bugzilla
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

最近この投稿を見つけました。最近のArchリリースで他の誰かが同様の問題に苦しんでいる痕跡のようです

https://github.com/neo4j/docker-neo4j/issues/155#issuecomment-471728441

3
pascalwhoop

Tomcatの実行は、コンテナのulimitを次のように変更するときに機能します。

docker run -it --ulimit nofile=122880:122880 -m 3G --rm Tomcat:8.0

私は見つけました(私の/etcフォルダーはgit repoで管理されています)行が変更されました

systemd/system.conf 
  55│ #DefaultLimitNOFILE=1024:524288

SystemdがDefaultLimitNOFileを変更したようで、これが私の問題を引き起こします。

この記事 dockerのulimitを設定する方法について説明します。しかし、それは私にとってそれをカットしませんでした。私は設定しなければなりませんでした

ExecStart=/usr/bin/dockerd --default-ulimit nofile=65536:65536 -H fd://

の中に /etc/systemd/system/docker.serviceに注意してください--default-ulimitdockerの各呼び出しに適用されるフラグ。

5
pascalwhoop