我们在具有64GB RAM,8GB HEAP大小,32核CPU,Java 1.7的系统上使用Cassandra 2.0.14。 加载JNA时(按照生产设置中的建议),它会对性能产生负面影响,尤其是在与HDD =>一起使用时。它显着增加了IO等待。 看起来JNA只有在与SSD磁盘结合使用时才能正常工作。否则最好不要使用JNA。
我的问题是:
有人有类似的经历吗? Java如何能够胜过本机文件系统操作(通过JNA访问)?
我们可以在没有JNA的情况下使用Cassandra进行生产吗?有副作用吗?
结果(按表现排序):
a)HDD + JNA 最糟糕的表现。高IO等待。
b)硬盘驱动器,没有JNA 很好的表现。低IO等待,但Cassandra CPU使用率非常高(500%)
c)SSD + JNA 似乎提供最佳性能。低IO等待。低Cassandra CPU使用率(300%)。但我们不能总是使用SSD。这是一个测试,它不是我的解决方案。
谢谢。
答案 0 :(得分:1)
Afaik,Cassandra使用JNA使用mlockall将JVM锁定到内存中,以避免JVM被换出。我想如果操作系统决定将JVM换成磁盘,那么性能将非常糟糕......
我知道在Cassandra的早期版本中,JNA也用于创建硬链接,但由于Java> = 7原生支持,我认为Cassandra的最新版本使用Java API来创建硬链接而不是JNA。