繁体   English   中英

映射目录时,sbt-native-packager失败,并显示“系统中打开的文件太多”

[英]sbt-native-packager fails with “Too many open files in system” when mapping a directory

我有一个基于sbt的项目。 通用包装插件已启用

.enablePlugins(JavaAppPackaging)

以及其他目录的映射如下:

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

我尝试在多台计算机(运行OS X和Linux)上使用dist命令构建软件包,但该软件包始终失败并显示以下跟踪信息:

    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.

-XX:-MaxFDLimit选项传递给JVM没有任何区别。

sbt的版本是0.13.9,sbt-native-packager的版本是1.1.1(最新,也使用v1.0.6)。

所以这是一个错误还是我只需要在该目录中保存许多文件?

据我所知,您的底层操作系统存在一些问题:

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

尝试调整Linux中允许的最大打开文件设置。 例如,以下是一些命令:

如果出现错误“打开的文件太多(24)”,则您的应用程序/命令/脚本达到了Linux允许的最大打开文件限制。 您需要增加打开文件的限制,如下所示:

增加限制每用户限制

打开文件: /etc/security/limits.conf

在结尾处粘贴以下内容:

  * 
\n 硬nofile 500000\n *软无文件500000根硬无文件500000根软无文件500000

500000是公平数。 我不确定最大限制是多少,但据我所记得,999999(Six-9)对我有用。

保存文件后,您可能需要注销并再次登录。

限制

我在许多地方读到,需要为守护程序进程的更改限制采取额外的步骤。 我还不需要关注,但是如果上述更改对您不起作用,则可以尝试一下。

打开/etc/pam.d/common-session

添加以下行:

  所需时间\n pam_limits.so 
系统范围限制

将此设置为高于上面设置的用户限制。

打开/etc/sysctl.conf

添加以下内容:

  fs.file-max =\n 2097152 

跑:

  的sysctl -p 

上面的信息将增加可以在系统范围内打开的“总数”文件。

验证新限制

使用以下命令查看文件描述符的最大限制:

  猫/ proc / sys / fs / file-max 

硬限制

  极限\n H 

软极限

  ulimit -Sn 

如果您以root用户身份登录:

检查其他用户的限制

只需将www-data替换www-data您要检查限制的linux用户名:

  su-www-data -c\n 'ulimit -aHS'-s'/ bin / bash' 
检查正在运行的进程的限制:

查找进程ID(PID):

  ps aux |\n grep进程名称 

假设XXX是PID,然后运行以下命令检查限制:

  猫/ proc / XXX /限制 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM