Java 11环境下JanusGraph调用JanusGraphFactory.open()卡住无报错
Java 11容器中JanusGraph卡在
JanusGraphFactory.open()无报错 原本在Java 8容器中运行JanusGraph完全正常,迁移到Java 11容器后,程序卡在JanusGraphFactory.open(this.db_property_file)代码行,无任何错误或警告输出。
相关代码
graph = JanusGraphFactory.open(this.db_property_file); // 卡在此行
配置文件
pom.xml
<?xml version="1.0" encoding="UTF-8" ?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>janus</artifactId> <version>latest</version> <name>janusms</name> <description>Janus MS</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.20</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.9</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.9</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> <dependency> <groupId>org.janusgraph</groupId> <artifactId>janusgraph-core</artifactId> <version>1.0.0-rc2</version> </dependency> <dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-server</artifactId> <version>3.6.2</version> </dependency> <dependency> <groupId>org.janusgraph</groupId> <artifactId>janusgraph-es</artifactId> <version>0.6.2</version> </dependency> <dependency> <groupId>org.janusgraph</groupId> <artifactId>janusgraph-lucene</artifactId> <version>0.6.2</version> </dependency> <dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-driver</artifactId> <version>3.4.4</version> </dependency> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy</artifactId> <version>3.0.8</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>2.0.6</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>com.univocity</groupId> <artifactId>univocity-parsers</artifactId> <version>2.9.1</version> </dependency> <dependency> <groupId>org.janusgraph</groupId> <artifactId>janusgraph-cassandra</artifactId> <version>0.4.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.7.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.13.5</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.13.5</version> </dependency> <dependency> <groupId>org.janusgraph</groupId> <artifactId>janusgraph-berkeleyje</artifactId> <version>0.4.1</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>2.0</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> <scope>compile</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>app.InferenceMsApplication</mainClass> </configuration> </plugin> </plugins> </build> </project>
janusgraph.properties
gremlin.graph=org.janusgraph.core.JanusGraphFactory storage.backend=berkeleyje index.search.backend=lucene storage.batch-loading=true storage.berkeleyje.cache-percentage=1 query.force-index=true
已尝试的排查操作
- 将JanusGraph核心版本升级至1.0.0-rc2
- 检查属性文件是否被占用,排除死锁可能
- 验证Java 8镜像可正常运行
解决方案
统一JanusGraph组件版本
当前pom中JanusGraph核心是1.0.0-rc2,但berkeleyje、lucene等依赖仍为0.4.1/0.6.2,版本差异过大导致Java 11下兼容性问题。将所有JanusGraph相关依赖统一为1.0.0-rc2:<dependency> <groupId>org.janusgraph</groupId> <artifactId>janusgraph-berkeleyje</artifactId> <version>1.0.0-rc2</version> </dependency> <dependency> <groupId>org.janusgraph</groupId> <artifactId>janusgraph-lucene</artifactId> <version>1.0.0-rc2</version> </dependency> <!-- 其他JanusGraph组件同步更新版本 -->更新Java版本配置
在pom.xml的properties节点中,将<java.version>1.8</java.version>改为<java.version>11</java.version>,确保编译和运行环境版本一致。调整日志配置排查隐藏错误
当前使用的slf4j-simple无法输出JanusGraph初始化阶段的调试日志,替换为logback并开启DEBUG级别:<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.9</version> </dependency> <!-- 移除slf4j-simple依赖 -->添加
logback.xml配置文件:<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT" /> </root> </configuration>添加Java 11模块兼容参数
JanusGraph初始化时可能涉及反射访问JDK内部类,添加JVM启动参数解决模块访问限制:--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED清理BerkeleyJE存储目录
旧版本BerkeleyJE生成的锁文件或数据可能在Java 11下不兼容,清理存储目录后重新初始化,同时确保容器对存储目录有读写权限。
内容的提问来源于stack exchange,提问作者Vishnunarayanan
相关产品推荐
相关产品推荐

