将数据写入janusgraph时,gremlin-server.log文件中有许多WARN级别的日志。
大多数WARN日志如下:
2020-09-09 21:41:56,181 WARN [gremlin-server-exec-11] GremlinGroovyScriptEngine.java:830 - Script compilation g.V(20297120).as('from').V(21106840).as('to').addE('HAS_INF').from('from').to('to') took 38059ms
为什么编译这样一个简单的脚本要花这么长时间?
有人可以给我一些提示以缩短脚本编写时间或告诉我如何分析原因吗?
工作环境:
janusgraph版本:0.5.2
后端存储:cassandra,版本:3.11
答案 0 :(得分:0)
很难确切地说出问题所在。您可能需要对服务器进行一些概要分析才能深入了解它,但是我的猜测是服务器在写入期间看到大量使用情况,因此gremlinPool
中的某些线程可能会变慢。 gremlin-server-exec-*
线程负责脚本的编译和执行,因此我可以想象这样一种情况:过载的服务器似乎需要很长时间才能在非常小的脚本上进行编译。我会检查您在该服务器上的资源利用率,以查看真正的问题是什么,尽管这触发了这些WARN消息,因为我认为这与脚本的实际编译时间无关。
脚本编译问题通常会以大量的脚本或过多的变量显示出来。既然您没有这种情况,我认为这指向其他问题。
我什至不看服务器配置就考虑的第一个问题是,在看到这些WARN时,查看正在发送的脚本。我可能是错的,但是从日志消息看来,您根本没有参数化。如果真是这样,您将最终在服务器上使用更多的资源,而性能却大大降低,因为可能需要编译每个单个请求。这种情况还会使编译脚本缓存过大。如果您不进行参数设置,则应该这样做,当您这样做时,性能改进将给您留下深刻的印象。可以找到其文档here。
如果要进行参数化,那么我只能再次提供您对服务器进行概要分析,以找到问题的根本原因,因为它不应该与日志消息所暗示的脚本长度有关。