2016-06-17 5 views
0

Ich habe ein sbt-basiertes Projekt. Universal-Verpackungs Plugin mitsbt-native-packager schlägt mit "Zu viele geöffnete Dateien im System" beim Mappen eines Verzeichnisses fehl

.enablePlugins(JavaAppPackaging) 

und weitere Verzeichnisse abgebildet werden wie folgt aktiviert ist:

mappings in Universal ++= directory("public") 

Ich habe versucht, das Paket mit dist Befehl auf mehreren Maschinen zu bauen (mit OS X und Linux) es immer schlägt mit der folgenden Spur:

Could not create file [...omitted...]/target/streams/compile/$global/$global/discoveredMainClasses/datajava.io.IOException: Too many open files in system 
      at sbt.ErrorHandling$.translate(ErrorHandling.scala:10) 
      at sbt.IO$.touch(IO.scala:196) 
      at sbt.std.Streams$$anon$3$$anon$2.make(Streams.scala:129) 
      at sbt.std.Streams$$anon$3$$anon$2.binary(Streams.scala:116) 
      at sbt.SessionVar$$anonfun$persist$1.apply(SessionVar.scala:27) 
      at sbt.SessionVar$$anonfun$persist$1.apply(SessionVar.scala:26) 
      at sbt.std.Streams$class.use(Streams.scala:75) 
      at sbt.std.Streams$$anon$3.use(Streams.scala:100) 
      at sbt.SessionVar$.persist(SessionVar.scala:26) 
      at sbt.SessionVar$.persistAndSet(SessionVar.scala:21) 
      at sbt.Project$RichTaskSessionVar$$anonfun$storeAs$1$$anonfun$apply$5.apply(Project.scala:563) 
      at sbt.Project$RichTaskSessionVar$$anonfun$storeAs$1$$anonfun$apply$5.apply(Project.scala:563) 
      at sbt.SessionVar$$anonfun$1$$anonfun$apply$1.apply(SessionVar.scala:40) 
      at sbt.SessionVar$$anonfun$1$$anonfun$apply$1.apply(SessionVar.scala:40) 
      at scala.Function$$anonfun$chain$1$$anonfun$apply$1.apply(Function.scala:24) 
      at scala.Function$$anonfun$chain$1$$anonfun$apply$1.apply(Function.scala:24) 
      at scala.collection.IndexedSeqOptimized$class.foldl(IndexedSeqOptimized.scala:51) 
      at scala.collection.IndexedSeqOptimized$class.foldLeft(IndexedSeqOptimized.scala:60) 
      at scala.collection.mutable.ArrayBuffer.foldLeft(ArrayBuffer.scala:47) 
      at scala.collection.TraversableOnce$class.$div$colon(TraversableOnce.scala:138) 
      at scala.collection.AbstractTraversable.$div$colon(Traversable.scala:105) 
      at scala.Function$$anonfun$chain$1.apply(Function.scala:24) 
      at sbt.EvaluateTask$.applyResults(EvaluateTask.scala:387) 
      at sbt.EvaluateTask$.liftedTree1$1(EvaluateTask.scala:361) 
      at sbt.EvaluateTask$.run$1(EvaluateTask.scala:358) 
      at sbt.EvaluateTask$.runTask(EvaluateTask.scala:378) 
      at sbt.Aggregation$$anonfun$3.apply(Aggregation.scala:64) 
      at sbt.Aggregation$$anonfun$3.apply(Aggregation.scala:62) 
      at sbt.EvaluateTask$.withStreams(EvaluateTask.scala:314) 
      at sbt.Aggregation$.timedRun(Aggregation.scala:62) 
      at sbt.Aggregation$.runTasks(Aggregation.scala:71) 
      at sbt.Aggregation$$anonfun$applyTasks$1.apply(Aggregation.scala:32) 
      at sbt.Aggregation$$anonfun$applyTasks$1.apply(Aggregation.scala:31) 
      at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:61) 
      at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:61) 
      at sbt.Aggregation$$anonfun$evaluatingParser$4$$anonfun$apply$5.apply(Aggregation.scala:153) 
      at sbt.Aggregation$$anonfun$evaluatingParser$4$$anonfun$apply$5.apply(Aggregation.scala:152) 
      at sbt.Act$$anonfun$sbt$Act$$actParser0$1$$anonfun$sbt$Act$$anonfun$$evaluate$1$1$$anonfun$apply$10.apply(Act.scala:244) 
      at sbt.Act$$anonfun$sbt$Act$$actParser0$1$$anonfun$sbt$Act$$anonfun$$evaluate$1$1$$anonfun$apply$10.apply(Act.scala:241) 
      at sbt.Command$.process(Command.scala:93) 
      at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:96) 
      at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:96) 
      at sbt.State$$anon$1.process(State.scala:184) 
      at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:96) 
      at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:96) 
      at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17) 
      at sbt.MainLoop$.next(MainLoop.scala:96) 
      at sbt.MainLoop$.run(MainLoop.scala:89) 
      at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:68) 
      at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:63) 
      at sbt.Using.apply(Using.scala:24) 
      at sbt.MainLoop$.runWithNewLog(MainLoop.scala:63) 
      at sbt.MainLoop$.runAndClearLast(MainLoop.scala:46) 
      at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:30) 
      at sbt.MainLoop$.runLogged(MainLoop.scala:22) 
      at sbt.StandardMain$.runManaged(Main.scala:54) 
      at sbt.xMain.run(Main.scala:29) 
      at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109) 
      at xsbt.boot.Launch$.withContextLoader(Launch.scala:128) 
      at xsbt.boot.Launch$.run(Launch.scala:109) 
      at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35) 
      at xsbt.boot.Launch$.launch(Launch.scala:117) 
      at xsbt.boot.Launch$.apply(Launch.scala:18) 
      at xsbt.boot.Boot$.runImpl(Boot.scala:41) 
      at xsbt.boot.Boot$.main(Boot.scala:17) 
      at xsbt.boot.Boot.main(Boot.scala) 
    Caused by: java.io.IOException: Too many open files in system 
      at java.io.UnixFileSystem.createFileExclusively(Native Method) 
      at java.io.File.createNewFile(File.java:1012) 
      at sbt.IO$$anonfun$1.apply$mcZ$sp(IO.scala:196) 
      at sbt.IO$$anonfun$1.apply(IO.scala:196) 
      at sbt.IO$$anonfun$1.apply(IO.scala:196) 
      at sbt.ErrorHandling$.translate(ErrorHandling.scala:10) 
      at sbt.IO$.touch(IO.scala:196) 
      at sbt.std.Streams$$anon$3$$anon$2.make(Streams.scala:129) 
      at sbt.std.Streams$$anon$3$$anon$2.binary(Streams.scala:116) 
      at sbt.SessionVar$$anonfun$persist$1.apply(SessionVar.scala:27) 
      at sbt.SessionVar$$anonfun$persist$1.apply(SessionVar.scala:26) 
      at sbt.std.Streams$class.use(Streams.scala:75) 
      at sbt.std.Streams$$anon$3.use(Streams.scala:100) 
      at sbt.SessionVar$.persist(SessionVar.scala:26) 
      at sbt.SessionVar$.persistAndSet(SessionVar.scala:21) 
      at sbt.Project$RichTaskSessionVar$$anonfun$storeAs$1$$anonfun$apply$5.apply(Project.scala:563) 
      at sbt.Project$RichTaskSessionVar$$anonfun$storeAs$1$$anonfun$apply$5.apply(Project.scala:563) 
      at sbt.SessionVar$$anonfun$1$$anonfun$apply$1.apply(SessionVar.scala:40) 
      at sbt.SessionVar$$anonfun$1$$anonfun$apply$1.apply(SessionVar.scala:40) 
      at scala.Function$$anonfun$chain$1$$anonfun$apply$1.apply(Function.scala:24) 
      at scala.Function$$anonfun$chain$1$$anonfun$apply$1.apply(Function.scala:24) 
      at scala.collection.IndexedSeqOptimized$class.foldl(IndexedSeqOptimized.scala:51) 
      at scala.collection.IndexedSeqOptimized$class.foldLeft(IndexedSeqOptimized.scala:60) 
      at scala.collection.mutable.ArrayBuffer.foldLeft(ArrayBuffer.scala:47) 
      at scala.collection.TraversableOnce$class.$div$colon(TraversableOnce.scala:138) 
      at scala.collection.AbstractTraversable.$div$colon(Traversable.scala:105) 
      at scala.Function$$anonfun$chain$1.apply(Function.scala:24) 
      at sbt.EvaluateTask$.applyResults(EvaluateTask.scala:387) 
      at sbt.EvaluateTask$.liftedTree1$1(EvaluateTask.scala:361) 
      at sbt.EvaluateTask$.run$1(EvaluateTask.scala:358) 
      at sbt.EvaluateTask$.runTask(EvaluateTask.scala:378) 
      at sbt.Aggregation$$anonfun$3.apply(Aggregation.scala:64) 
      at sbt.Aggregation$$anonfun$3.apply(Aggregation.scala:62) 
      at sbt.EvaluateTask$.withStreams(EvaluateTask.scala:314) 
      at sbt.Aggregation$.timedRun(Aggregation.scala:62) 
      at sbt.Aggregation$.runTasks(Aggregation.scala:71) 
      at sbt.Aggregation$$anonfun$applyTasks$1.apply(Aggregation.scala:32) 
      at sbt.Aggregation$$anonfun$applyTasks$1.apply(Aggregation.scala:31) 
      at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:61) 
      at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:61) 
      at sbt.Aggregation$$anonfun$evaluatingParser$4$$anonfun$apply$5.apply(Aggregation.scala:153) 
      at sbt.Aggregation$$anonfun$evaluatingParser$4$$anonfun$apply$5.apply(Aggregation.scala:152) 
      at sbt.Act$$anonfun$sbt$Act$$actParser0$1$$anonfun$sbt$Act$$anonfun$$evaluate$1$1$$anonfun$apply$10.apply(Act.scala:244) 
      at sbt.Act$$anonfun$sbt$Act$$actParser0$1$$anonfun$sbt$Act$$anonfun$$evaluate$1$1$$anonfun$apply$10.apply(Act.scala:241) 
      at sbt.Command$.process(Command.scala:93) 
      at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:96) 
      at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:96) 
      at sbt.State$$anon$1.process(State.scala:184) 
      at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:96) 
      at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:96) 
      at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17) 
      at sbt.MainLoop$.next(MainLoop.scala:96) 
      at sbt.MainLoop$.run(MainLoop.scala:89) 
      at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:68) 
      at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:63) 
      at sbt.Using.apply(Using.scala:24) 
      at sbt.MainLoop$.runWithNewLog(MainLoop.scala:63) 
      at sbt.MainLoop$.runAndClearLast(MainLoop.scala:46) 
      at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:30) 
      at sbt.MainLoop$.runLogged(MainLoop.scala:22) 
      at sbt.StandardMain$.runManaged(Main.scala:54) 
      at sbt.xMain.run(Main.scala:29) 
      at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109) 
      at xsbt.boot.Launch$.withContextLoader(Launch.scala:128) 
      at xsbt.boot.Launch$.run(Launch.scala:109) 
      at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35) 
      at xsbt.boot.Launch$.launch(Launch.scala:117) 
      at xsbt.boot.Launch$.apply(Launch.scala:18) 
      at xsbt.boot.Boot$.runImpl(Boot.scala:41) 
      at xsbt.boot.Boot$.main(Boot.scala:17) 
      at xsbt.boot.Boot.main(Boot.scala) 
    [error] Could not create file [...omitted...]/target/streams/compile/$global/$global/discoveredMainClasses/datajava.io.IOException: Too man 
    y open files in system 
    [error] Use 'last' for the full log. 

Passing -XX:-MaxFDLimit Option JVM keine dif tat ference.

Die Version von sbt ist 0.13.9, sbt-native-Packager ist 1.1.1 (neueste, auch v1.0.6 verwendet).

Also ist es das ein Fehler oder ich habe nur viele Dateien in diesen Verzeichnissen?

Antwort

3

Soweit ich sehe, Sie haben einige Probleme mit den zugrunde liegenden opertaion System:

Caused by: java.io.IOException: Too many open files in system 
     at java.io.UnixFileSystem.createFileExclusively(Native Method) 

Versuchen zu zwicken max geöffneten Dateien Einstellungen in Linux erlaubt. Zum Beispiel here sind einige Befehle:

Wenn Sie Fehler bekommen „Zu viele offene Dateien (24)“ dann Ihre Anwendung/Befehl/script ist max open file Limit von Linux erlaubt schlagen. Sie müssen wie unten offenes Dateilimit erhöhen:

Erhöhung Limit Per-User Limit

öffnen Datei:   /etc/security/limits.conf

Paste folgende Richtung Ende:

*
hard nofile 500000 * soft nofile 500000 root hard nofile 500000 root soft nofile 500000

500000 ist Messe Nummer. Ich bin mir nicht sicher, was Max Limit ist, aber 999999 (Six-9) hat einmal für mich gearbeitet, soweit ich mich erinnere.

Sobald Sie die Datei gespeichert haben, können Sie sich abmelden und erneut anmelden.

pam-limits

Ich lese an vielen Stellen , dass ein zusätzlicher Schritt notwendig ist, um die Grenze für Daemon-Prozesse zu ändern. Ich brauchte noch nicht folgen, aber wenn obige Änderungen nicht für Sie arbeiten, können Sie dies versuchen.

öffnen   /etc/pam.d/common-session

hinzufügen folgende Zeile:

session required 
pam_limits.so
System-Limit

Setzen Sie diese höhere als benutzer Grenze oben gesetzt.

öffnen   /etc/sysctl.conf 

hinzufügen folgende:

fs.file-max = 
2097152

Run:

sysctl -p

Above „total“ Anzahl der Dateien erhöhen, die offen systemweite bleiben kann.

Überprüfen New Limits

Verwenden folgenden Befehl max Limit von Datei-Deskriptoren, um zu sehen:

cat /proc/sys/fs/file-max

Hard Limit

ulimit 
-Hn

Soft Limit

ulimit -Sn

, wenn Sie in als root angemeldet sind:

prüfen Grenze für anderer Benutzer

Nur ersetzen www-data   von Linux-Benutzername, den Sie überprüfen möchten Grenzen für:

su - www-data -c 
'ulimit -aHS' -s '/bin/bash'
prüfen Grenzen eines laufenden Prozesses:

Suche Prozess-ID (PID):

ps aux | 
grep process-name

Angenommen, XXX PID ist, dann folgenden Befehle ausführen Grenzen überprüfen:

cat /proc/XXX/limits

Verwandte Themen