【问题标题】:JPA/Hibernate hangs on native filesystem operations during bootJPA/Hibernate 在引导期间挂起本机文件系统操作
【发布时间】:2017-05-24 08:17:39
【问题描述】:

这是JPA/Hibernate hangs on production during EntityManagerFactory creation的跟进

我设法在“挂起”状态下获得了线程转储,我发现问题与文件系统列表操作有关。

一般来说,在应用程序引导期间,此进程可能会在此状态下挂起数分钟(约 30 分钟)。有任何解决方法或解决方法吗??

"main" #1 prio=5 os_prio=0 tid=0x00000000010c9000 nid=0x2c73 runnable [0x00007f4c928f5000]
   java.lang.Thread.State: RUNNABLE
    at java.io.UnixFileSystem.list(Native Method)
    at java.io.File.list(File.java:1122)
    at java.io.File.listFiles(File.java:1207)
    at org.hibernate.boot.archive.internal.ExplodedArchiveDescriptor.processDirectory(ExplodedArchiveDescriptor.java:105)
    at org.hibernate.boot.archive.internal.ExplodedArchiveDescriptor.processDirectory(ExplodedArchiveDescriptor.java:118)
    at org.hibernate.boot.archive.internal.ExplodedArchiveDescriptor.visitArchive(ExplodedArchiveDescriptor.java:54)
    at org.hibernate.boot.archive.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:47)
    at org.hibernate.boot.model.process.internal.ScanningCoordinator.coordinateScan(ScanningCoordinator.java:75)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:98)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:227)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:169)
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:36)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:181)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:129)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:71)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:52)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)

【问题讨论】:

  • 如果您包含更多信息,它可能会帮助人们帮助您。这是否发生在工作站/VM/Docker 上?文件系统(例如 NFS)有什么特别之处吗?任何 SE Linux 扩展?还有什么你能想到的“奇怪”吗? Java 版本/Linux 发行版?我在 Linux 上(使用 Java、Hibernate)进行日常开发,这不会发生,但在极少数情况下会发生其他奇怪的事情!
  • 我有类似的堆栈跟踪问题,但我看到堆栈跟踪以及 OutOfMemoryError。相同的应用程序部署在 jar 文件中,而不是文件系统上的 .class 文件中,没问题。但是在我直接部署 .class 文件的开发服务器上,我看到了 OOME。 @Antoniossss 您在此期间对此有何进一步了解?
  • @marc82ch 不幸的是我现在不记得了,我已经转移到不同的项目;(
  • 我在我的情况下想通了,问题是 . (当前目录)是类路径的一部分,我在一个相当大的目录中启动程序。 Hibernate 可能需要扫描整个类路径目录结构中的所有文件以查找实体类。我不完全理解它,但可能是这样的。
  • 是的。我现在记得,日志文件目录位于类路径中。把它移出来解决了这个问题!我很高兴你也找到了它。

标签: java hibernate jpa


【解决方案1】:

对我和 marc82ch 来说,问题是应用程序类路径上的文件(外部)数量过多。例如,在我的例子中,我在类路径中包含了包含大量文件的日志文件目录。

【讨论】:

    猜你喜欢
    • 2015-09-24
    • 2021-01-17
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多