- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个包含大约 6000 万个节点和等效关系的 neo4j 图形数据库。
我们一直面临持续的数据包丢失和处理延迟以及 2 小时后服务器完全挂起的问题。每次发生这种情况时,我们都必须关闭并重新启动我们的服务器,而且我们无法理解我们的配置哪里出了问题。
我们在 console.log 文件中看到以下类型的异常 -
- java.lang.IllegalStateException: s=DISPATCHED i=true a=null o.e.jetty.server.HttpConnection - HttpConnection@609c1158{FILLING}
- 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 - Unexpected thread death: org.eclipse.jetty.util.thread.QueuedThreadPool$3@59d5a975 in qtp1667455214{STARTED,14<=21<=21,i=0,q=58}
- org.eclipse.jetty.server.Response - Committed before 500 org.neo4j.server.rest.repr.OutputFormat$1@39beaadf
- o.e.jetty.servlet.ServletHandler - /db/data/cypher java.lang.IllegalStateException: Committed at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1253) ~[jetty-server-9.2.
- org.eclipse.jetty.server.HttpChannel - /db/data/cypher java.lang.IllegalStateException: Committed at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1253) ~[jetty-server-9.2.
- org.eclipse.jetty.server.HttpChannel - Could not send response error 500: java.lang.IllegalStateException: Committed o.e.jetty.server.ServerConnector - Stopped
- o.e.jetty.servlet.ServletHandler - /db/data/cypher org.neo4j.graphdb.TransactionFailureException: Transaction was marked as successful, but unable to commit transaction so rolled back.
我们在 Azure D 系列 8 核 CPU、56 GB RAM UBUNTU 14.04 LTS 机器上使用单/非集群模式的 neo4j 企业版 2.2.5 服务器,并附有 500GB 数据磁盘。 p>
这是 neostore 文件大小的快照
- 8.5G Oct 2 15:48 neostore.propertystore.db
- 15G Oct 2 15:48 neostore.relationshipstore.db
- 2.5G Oct 2 15:48 neostore.nodestore.db
- 6.9M Oct 2 15:48 neostore.relationshipgroupstore.db
- 3.7K Oct 2 15:07 neostore.schemastore.db
- 145 Oct 2 15:07 neostore.labeltokenstore.db
- 170 Oct 2 15:07 neostore.relationshiptypestore.db
Neo4j配置如下-
- Allocated 30GB to file buffer cache (dbms.pagecache.memory=30G)
- Allocated 20GB to JVM heap memory (wrapper.java.initmemory=20480, wrapper.java.maxmemory=20480)
- Using the default hpc(High performance) type cache.
- Forcing the RULE planner by default (dbms.cypher.planner=RULE)
- Maximum threads processing queries is 16(twice the number of cores) - org.neo4j.server.webserver.maxthreads=16
- Transaction timeout of 60 seconds - org.neo4j.server.transaction.timeout=60
- Guard Timeout if query execution time is greater than 10 seconds - org.neo4j.server.webserver.limit.executiontime=10000
Rest of the settings are default
我们实际上想设置一个包含 3 个节点的集群,但在此之前我们想确定我们的基本配置是否正确。请帮助我们
已编辑以添加查询样本
通常,我们的密码查询频率是每小时 18K 次查询,平均每秒大约 5-6 次查询。有时每秒大约有 80 个查询。
我们的典型查询如下所示
match (a:TypeA {param:{param}})-[:RELA]->(d:TypeD) with distinct d,a skip {skip} limit 100 optional match (d)-[:RELF]->(c:TypeC)<-[:RELF]-(b:TypeB)<-[:RELB]-(a) with distinct d,a,collect(distinct b.bid) as bids,collect(distinct c.param3) as param3Coll optional match (d)-[:RELE]->(p:TypeE)<-[:RELE]-(b1:TypeB)<-[:RELB]-(a) with distinct d as distD,bids+collect(distinct b1.bid) as tbids,param3Coll,collect(distinct p.param4) as param4Coll optional match (distD)-[:RELC]->(f:TypeF) return id(distD),distD.param5,exists((distD)<-[:RELG]-()) as param6, tbids,param3Coll,param4Coll,collect(distinct id(f)) as fids
match (a:TypeA {param:{param}})-[:RELB]->(b) return count(distinct b)
MATCH (a:TypeA{param:{param}})-[r:RELD]->(a1)-[:RELH]->(h) where r.param1=true with a,a1,h match (h)-[: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.param5
match (a:TypeA {param:{param}}) match (a)-[:RELB]->(b) with distinct b,a skip {skip} limit 100 match (a)-[:RELH]->(h1:TypeH) match (b)-[:RELF|RELE]->(x)<-[:RELF|RELE]-(h2:TypeH)<-[:RELH]-(a1) optional match (a1)<-[rd:RELD]-(a) with distinct a1,a,h1,b,h2,rd.param1 as param2,collect(distinct x.param3) as param3s,collect(distinct x.param4) as param4s optional match (a1)-[:RELB]->(b1) where b1.param7 in [0,1] and exists((b1)-[:RELF|RELE]->()<-[:RELF|RELE]-(h1)) with distinct a1,a,b,h2,param2,param3s,param4s,b1,case when param2 then false else case when ((a1.param5 in [2,3] or length(param3s)>0) or (a1.param5 in [1,3] or length(param4s)>0)) then case when b1.param7=0 then false else true end else false end end as param8 MERGE (a)-[r2:RELD]->(a1) on create set r2.param6=true on match set r2.param6=case when param8=true and r2.param9=false then true else false end MERGE (b)-[r3:RELM]->(h2) SET r2.param9=param8, r3.param9=param8
MATCH (a:TypeA {param:{param}})-[:RELI]->(g:TypeG {type:'type1'}) match (g)<-[r:RELI]-(a1:TypeA)-[:RELJ]->(j)-[:RELK]->(g) return distinct 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) remove r.param2 return id(a1),b.displayName, b.firstName,b.lastName
match (a:TypeA {param:{param}})-[:RELA]->(b:TypeB) return a.param1,count(distinct id(b))
MATCH (a:TypeA {param:{param}}) set a.param1=true;
match (a:TypeE)<-[r:RELE]-(b:TypeB) where a.param4 in {param4s} delete r return count(b);
MATCH (a:TypeA {param:{param}}) return id(a);
添加一些我一直注意到的奇怪的东西......
我已经停止了我所有的网络服务器。因此,目前没有对 neo4j 的传入请求。但是我看到在 TCP 关闭/等待状态下有大约 40K 个打开的文件句柄,这意味着客户端由于超时而关闭了它的连接并且 Neo4j 没有处理它并响应该请求。我还看到(来自 messages.log)Neo4j 服务器是仍在处理查询,并且在执行此操作时,40K 的打开文件句柄正在缓慢减少。到我写这篇文章时,大约有 27K 个打开的文件句柄处于 TCP 关闭/等待状态。
我还看到查询没有连续处理。每隔一段时间我就会在 messages.log 中看到一个暂停,并且我看到这些关于日志轮换的消息,因为一些乱序的顺序如下所示
Rotating log version:5630
2015-10-04 05:10:42.712+0000 INFO [o.n.k.LogRotationImpl]: Log Rotation [5630]: Awaiting all transactions closed...
2015-10-04 05:10:42.712+0000 INFO [o.n.k.i.s.StoreFactory]: Waiting for all transactions to close...
committed: out-of-order-sequence:95494483 [95494476]
committing: 95494483
closed: out-of-order-sequence:95494480 [95494246]
2015-10-04 05:10:43.293+0000 INFO [o.n.k.LogRotationImpl]: Log Rotation [5630]: Starting store flush...
2015-10-04 05:10:44.941+0000 INFO [o.n.k.i.s.StoreFactory]: About to rotate counts store at transaction 95494483 to [/datadrive/graph.db/neostore.counts.db.b], from [/datadrive/graph.db/neostore.counts.db.a].
2015-10-04 05:10:44.944+0000 INFO [o.n.k.i.s.StoreFactory]: Successfully rotated counts store at transaction 95494483 to [/datadrive/graph.db/neostore.counts.db.b], from [/datadrive/graph.db/neostore.counts.db.a].
我偶尔也会看到这些消息
2015-10-04 04:59:59.731+0000 DEBUG [o.n.k.EmbeddedGraphDatabase]: NodeCache array:66890956 purge:93 size:1.3485746GiB misses:0.80978173% collisions:1.9829895% (345785) av.purge waits:13 purge waits:0 avg. purge time:110ms
或
2015-10-04 05:10:20.768+0000 DEBUG [o.n.k.EmbeddedGraphDatabase]: RelationshipCache array:66890956 purge:0 size:257.883MiB misses:10.522135% collisions:11.121769% (5442101) av.purge waits:0 purge waits:0 avg. purge time:N/A
所有这一切都是在没有传入请求并且 neo4j 正在处理旧的待处理 40K 请求时发生的,正如我上面提到的。
既然是专用服务器,服务器不应该在没有这么大的待处理队列的情况下连续处理查询吗?我在这里错过了什么吗?请帮助我
最佳答案
没有完全回答您的问题。您应该通过使用 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
同时在 neo4j-wrapper.conf
中启用垃圾收集日志记录,并检查您是否遇到长时间停顿。如果是这样,请考虑减小堆大小。
关于configuration - Neo4j 服务器每 2 小时持续挂起一次。请帮助我了解配置是否有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911395/
谁能解释一下 Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"之间的区别\") 和 Server.MapPath("/")? 最佳答案
我不知道,为什么我们要使用 Server.UrlEncode() & Server.UrlDecode()?!在 QueryString 中我们看到 URL 中的任何内容,那么为什么我们要对它们进行编
我已经通过 WHM 在我的一个域上安装了 ssl 证书。网站正在使用 https://xyz.com . 但是它不适用于 https://www.xyz.com .我已经检查了证书,它也适用于 www
我已经使用 WMI 检测操作系统上是否存在防病毒软件,itz 正常工作并通过使用命名空间向我显示防病毒信息,例如 win xp 和 window7 上的名称和实例 ID:\root\SecurityC
我们有 hive 0.10 版本,我们想知道是否应该使用 Hive Server 1 或 Hive Server2。另一个问题是连接到在端口 10000 上运行的 Hive 服务器,使用 3rd 方工
我想在 C++ 中使用 Windows Server API 设置一个 HTTPS 服务器,我使用了示例代码,它在 HTTP 上工作正常,但我就是不能让它在 HTTPS 上工作。 (我不想要客户端 S
我写了一个非常基本的类来发送电子邮件。我用 smtp 服务器对其进行了测试,它工作正常,但是当我尝试使用我公司的交换服务器时,它给出了这个异常: SMTP 服务器需要安全连接或客户端未通过身份验证。服
我的应用程序包含一个“网关”DataSnap REST 服务器,它是所有客户端的第一个访问点。根据客户端在请求中传递的用户名(基本身份验证),请求需要重定向到另一个 DataSnap 服务器。我的问题
我有一个 Tomcat 服务器和一个 Glassfish4 服务器。我的 Servlet 在 Tomcat 服务器上启动得很好,但在 Glassfish4 服务器上给我一个“HTTP Status 4
我在 vmware 上创建了一个 ubuntu 服务器。我用它作为文件服务器。如果我通过托管虚拟机的计算机进行连接,则可以访问它。我无法从同一网络上的其他计算机执行此操作。提前致谢! 最佳答案 首先确
如何重启 Rails 服务器?我从 开始 rails server -d 所以服务器是分离的 我知道的唯一方法就是去做ps 辅助 | grep rails 并 kill -9关于过程#但是像这样杀死进
我实际上正在尝试找到编写一个简单的 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的服务器。我只关心XMPP的核心功能(状态、消息传递、群组消息传递)。目前还在学习 XMPP 协议(proto
我实际上正在尝试找到编写简单 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的方法。我只关心 XMPP 的核心功能(统计、消息、组消息)。目前也在学习 XMPP 协议(protocol),所以
我们正在尝试从 Java JAX-RS 适配器访问 SOAP 1.1 Web 服务。 我们正在使用从 WSDL 生成的 SOAP 客户端。 但是当解码 SOAP 故障时,我们得到以下异常: ... C
目前,我和许多其他人正在多个平台(Windows、OS X 和可能的 Linux)上使用 Python HTTP 服务器。我们正在使用 Python HTTP 服务器来测试 JavaScript 游戏
我有一个连续运行的服务器程序(C#/.NET 2.0 on Linux with mono),我想从 PHP 脚本连接到它以在网站上显示状态信息。 目的是创建一个(某种)实时浏览器游戏(无 Flash
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
我们刚刚将测试 Web 服务器从 Server 2008 升级到 Server 2012 R2。我们有一个部署我们网站的批处理脚本。当它将站点推送到服务器时,它现在失败了。奇怪的是,我可以使用相同的发
建议一些加载SpagoBI服务器的方法,我尝试了所有方法来解析spagobi服务器。在 Catalina 中,错误是 - * SEVERE: Unable to process Jar entry [
当我们点击应用程序服务器(apache tomcat)时,它会创建一个线程来处理我们的请求并与 tomcat 连接,建立连接,tomcat 创建另一个线程来处理请求并将其传递给连接,连接线程将其传递给
我是一名优秀的程序员,十分优秀!