Docker容器阻塞内部的Apache Batik Transcoder

我们正在Docker容器中运行Spring应用程序。 我们的应用程序可以将SVG文件转换为PDF格式,并将其embedded到PDF中。

该应用程序可以在osx上正确运行,并按预期转码。 然而,当从具有不同文件系统的Docker容器中运行时,代码转换器卡住并在一些奇怪的recursion文件search循环中使CPU崩溃。

java.lang.Thread.State: RUNNABLE at java.io.UnixFileSystem.getBooleanAttributes0(Native Method) at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242) at java.io.File.isFile(File.java:882) at org.apache.commons.io.filefilter.FileFileFilter.accept(FileFileFilter.java:59) at org.apache.commons.io.filefilter.AndFileFilter.accept(AndFileFilter.java:122) at org.apache.commons.io.filefilter.AndFileFilter.accept(AndFileFilter.java:122) at org.apache.commons.io.filefilter.OrFileFilter.accept(OrFileFilter.java:118) at java.io.File.listFiles(File.java:1291) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:357) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:364) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:364) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:364) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:364) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:364) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:364) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:364) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:364) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:364) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:364) at org.apache.commons.io.DirectoryWalker.walk(DirectoryWalker.java:364 

下面看一下运行PDFTranscoder的线程的堆栈跟踪。 Walk被recursion地调用一段时间,然后getBooleanAttributes0被调用,并且一切都被阻塞。

经过一番进一步的研究,我们发现我们可以仔细看看strace命令的情况,看到系统本质上是无休止的循环中的垃圾邮件。

STAT(“/./ SYS /设备/ pci0000:00 / PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 /子系统/设备/ PNP0103:00 / subsystem / devices / pcspkr / input / input1 / subsystem / input0 / subsystem / input0 / uniq“,{st_mode = S_IFREG | 0444,st_size = 4096,…})= 0 <0.000224>

我们似乎被拦截或挂在统计电话。 但是现在我们已经深入研究了系统调用,因此很难debugging。 有没有人有任何想法?

我的项目有同样的问题。 我解决了蜡染的降级到1.7版本。

我希望这会对你有用。

尝试将参数'-Duser.dir = /%CATALINA_HOME /'添加到您的CATALINA_OPTS。 我在我的centos服务器上遇到同样的问题。

Interesting Posts