Configuration Neo4j服务器始终每2小时挂起一次。请帮助我了解配置是否有问题

Configuration Neo4j服务器始终每2小时挂起一次。请帮助我了解配置是否有问题,configuration,neo4j,server,database-performance,Configuration,Neo4j,Server,Database Performance,我们有一个neo4j图形数据库,有大约6000万个节点和一个等价的关系 我们一直面临着持续的数据包丢失和处理延迟,2小时后服务器完全挂起。每次发生这种情况时,我们都必须关闭并重新启动服务器,我们很难理解我们的配置哪里出了问题 我们在console.log文件中看到以下类型的异常- java.lang.IllegalStateException:s=DISPATCHED i=true a=null o.e.jetty.server.HttpConnection-HttpConnection@609

我们有一个neo4j图形数据库,有大约6000万个节点和一个等价的关系

我们一直面临着持续的数据包丢失和处理延迟,2小时后服务器完全挂起。每次发生这种情况时,我们都必须关闭并重新启动服务器,我们很难理解我们的配置哪里出了问题

我们在console.log文件中看到以下类型的异常-

  • java.lang.IllegalStateException:s=DISPATCHED i=true a=null o.e.jetty.server.HttpConnection-HttpConnection@609c1158{填充}
  • java.lang.IllegalStateException:s=DISPATCHED i=true a=null o.e.j.util.thread.QueuedThreadPool
  • java.lang.IllegalStateException:org.eclipse.jetty.util.SharedBlockingCallback$BlockerTimeoutException
  • o、 e.j.util.thread.QueuedThreadPool-意外线程死亡:org.eclipse.jetty.util.thread.QueuedThreadPool$3@59d5a975在里面 qtp1667455214{STARTED,14(c:TypeC)(h)其中r.param1=true与a,a1,h匹配(h)-[:RELL]>(d:TypeI)其中(d.param2/2)%2=1可选匹配(a)-[:RELB]-(b)-[:RELM{param3:true}>(c)返回a1.param,id(a1),collect(b.bid),c.param5

    match(a:TypeA{param:{param}}})match(a)-[:RELB]>(b)使用不同的b,跳过{skip}限制100个匹配(a)-[:RELH]>(h1:TypeH)match(b)-[:RELF | rel]>(x)0)然后在b1.param7=0时使用false-else-true-end-else-false-end-false-end作为param8 MERGE(a)-[r2:RELD]>(a1)在创建集合r2时,匹配集合r2上的param6=true。当param8=true和r2.param9=false时,param6=case,然后为true,否则为false结束合并(b)-(r3:RELM]->(h2)集合r2.param9=param8,r3.param9=param8

    MATCH(a:TypeA{param:{param}})-[:RELI]>(g:TypeG{type:'type1'})MATCH(g)(j)-[:RELK]>(g)返回不同的g,collect(j.displayName),collect(r.param1),g.gid,collect(a1.param),collect(id(a1))

    match(a:TypeA{param:{param}})-[r:RELD{param2:true}]->(a1:TypeA)-[:RELH]->(b:TypeE)删除r.param2返回id(a1)、b.displayName、b.firstName、b.lastName
    match(a:TypeA{param:{param}})-[:RELA]>(b:TypeB)返回a.param1,count(distinct id(b))

    MATCH(a:TypeA{param:{param}})设置a.param1=true;


    match(a:TypeE)没有完全检查您的查询。您应该检查您经常发送的每个查询,在查询前加上
    PROFILE
    EXPLAIN
    ,查看查询计划并了解它们导致的访问次数

    例如,以下查询中的第二个匹配看起来很昂贵,因为这两个模式没有相互连接:

    MATCH (a:TypeA{param:{param}})-[r:RELD]->(a1)-[:RELH]->(h) where    r.param1=true with a,a1,h match (m)-[:RELL]->(d:TypeI) where (d.param2/2)%2=1 optional match (a)-[:RELB]-(b)-[:RELM {param3:true}]->(c)  return a1.param,id(a1),collect(b.bid),c.bPhoto
    

    还允许垃圾收集日志记录>代码> NoN4J包装器。CONF检查是否有长时间停顿。如果是这样,考虑减少堆大小。

    看起来这个问题需要从你方进行更多的研究,但我的经验有一些。

    TL;DR;-我自己的非托管扩展也有类似的问题,其中事务处理不当

    语言/连接器 应用程序中使用的语言/连接器是什么?

    您应该验证:

    • 如果使用了一些流行的开源库,那么您的应用程序使用的是最新版本。您的连接器中可能有bug
    • 如果您有自己的手写解决方案,可以与REST API一起使用—请验证所有http请求是否在客户端关闭
    扩展/插件 如果使用自定义编写的扩展/插件,很容易把事情搞砸

    应检查的内容:

    • 所有事务始终关闭(
      try with resource
      已使用)
    Neo4j设置 验证您的。例如,如果您的
    org.neo4j.server.transaction.timeout的值很大,并且您没有在客户端正确处理事务,那么最终可能会导致大量事务运行

    监测 您正在使用企业版。这意味着您可以访问。最好检查有关活动锁和事务的信息

    另一个Neo4j版本 也许您可以尝试另一个Neo4j版本。例如2.3.0-M03。
    这将为以下问题提供答案:

    • 这是Neo4j 2.2.5错误吗
    • 这是现有的Neo4j安装错误配置吗
    Linux配置 检查您的Linux配置

    • 您的
      /etc/sysctl.conf
      中有什么内容?是否有任何无效/不相关的设置
    另一台服务器 您可以尝试启动另一台服务器(即DigitalOcean的VM),在那里部署数据库并加载。
    可能您的服务器有一些无效的配置



    尽量排除可能导致问题的所有因素,以便更容易地发现问题。

    您是否可以提供更多关于您正在使用哪种密码语句的信息(一些示例)以及每个时间单位发送的请求数。还提供
    数据/graph.db/messages.log
    中的日志片段。我附上了图形上最常见的查询示例。大括号{}中提到的所有参数已被索引且唯一。很抱歉,我试图创建现有查询的示例,但出现了一个输入错误。该查询应该是匹配的(a:TypeA{param:{param}})-[r:RELD]>(a1)-[:RELH]>(h),其中r.param1=true与a,a1,h匹配(h)-[:RELL]>(d.param2/2)%2=1可选匹配(a)-[:RELB]-(b)[:RELM{param3:true}>(c)return a1.param,id(a1),collect(b.bid),c.param5I注意到一个非常奇怪的行为…当我关闭web服务器并且没有传入请求时,Neo4j正在处理40K左右的旧排队查询。我修改了我的问题以添加这些详细信息。