Neo4j和Hugepages

时间:2016-02-08 22:41:44

标签: neo4j database-performance

由于Neo4j主要在内存中工作,我想知道在我的Linux内核中启用hugepages(https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt)是否有利,然后XX:+ UseLargePages或者-XX:+ UseHugeTLBFS(OpenJDK) 8)JVM?

如果是这样,我应该使用什么经验法则来决定要配置多少个大页?

Neo4j性能指南(http://neo4j.com/docs/stable/performance-guide.html)没有提到这一点,谷歌没有提出任何其他人讨论它(无论如何在前几个搜索页面中),所以我想我会问。< / p>

我正在努力从我的新Neo4j实例(2.3.2社区)获得可接受的性能。任何一点都会有所帮助。我想知道在我关闭数据库以更改JVM标志之前是否值得尝试...我希望其他人已经在这些方面做了一些实验。

谢谢!

1 个答案:

答案 0 :(得分:6)

由于Neo4j执行自己的文件分页并且不依赖操作系统来执行此操作,因此应该有利或至少不会受到伤害。当您使用大量内存时,大量页面将降低TLB缓存未命中的可能性,Neo4j通常希望在存储大量数据时执行此操作。

然而,Neo4j并没有直接使用大页面,即使它可以,它将是一个很好的补充。这意味着您必须依赖透明大页面以及JVM提供的任何功能。当合并较小的页面时,透明的大页面会导致或多或少的短暂停顿。

如果您有代表性的临时环境,那么我建议您先在那里进行更改,然后测量它们的效果。

对于使用mmap的程序来说,透明的大页面通常是一个问题,因为我认为它可能导致更改IO单元的大小,这将导致硬页面故障延迟更高。不过,我对此并不完全确定,所以如果我错了,请纠正我。

JVM实际上通过mmap中的文件使用/tmp进行遥测和工具,因此请确保将此目录安装在tmpfs上以避免过多的IO停顿,例如在安全点期间(!!!)。即使你不使用大页面也要这样做。

还要确保使用最新的Linux内核和最新的Java版本。

你可以通过调整G1来挤出一些百分点,但这有点像黑色艺术。