2010-10-20 70 views
0

我在jRuby上运行glassfish时设置了一个基于Neo4j的系统。与大多数rails系统一样,Glassfish允许一些机制运行多个实例。在glassfish情况下,线程池的大小有内部设置。Neo4j服务器设置建议

我的问题是我有Neo4j数据库被打开多次,这是导致错误的问题。我正在升级到Rails3以引入最新的Neo4j.rb,但同时还想确保我有正确的服务器设置。

下面是我的设置:

 
# 
# GlassFish configuration. 
# 
# Please read the comments for each configuration settings before modifying. 
# 
# application environment. Default value development 

environment: staging 
# HTTP configuration 
    http: 
    # port 
    port: 3000 

    #address 
    address: 0.0.0.0 

    # context root. The default value is '/' 
    contextroot:/

    # Grizzly is NIO based HTTP libraries used by GlassFish gem 
    grizzly: 
     chunking-enabled: true 
     request-timeout: 30 
     send-buffer-size: 8192 
     max-keepalive-connextions: 256 
     keepalive-timeout: 30 
     thread-pool: 
      idle-thread-timeout-seconds: 900 
      max-queue-size: 4096 
      max-thread-pool-size: 5 
      min-thread-pool-size: 2     
#Logging configuration 
log: 
    log-level: all 
jruby-runtime-pool: 
    initial: 1 
    min: 1 
    max: 5 
daemon: 
    enable: true 

jvm-options: -server -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewRatio=2 -XX:+DisableExplicitGC -Dhk2.file.directory.changeIntervalTimer=6000 

+0

道歉如果这是一个简单的问题,我已经完成了很多Rails部署,但这是我的第一个JRuby部署。 – 2010-10-20 12:44:22

+0

另外做低层次的Neo4j只是调用我的图表,数据主要是使用传统模型实现的MySQL。我正在使用Transaction.run做的交易方法。 – 2010-10-20 12:45:05

回答

2

您可以尝试将jruby-runtime-pool max值设置为1(未测试过)。 如果您正在运行多线程应用程序(如rails 3和Neo4j),我认为不需要使用多个jruby-runtime,对吧?

+0

是的,我已经将我的配置设置为多个服务器,就像我使用本地ruby实现所做的那样。我也在多线程的rails上做了一些后续的阅读。从Rails 2.2或2.3开始的Rails引入了更好的线程支持,但是您必须通过取消注释production.rb环境文件中的线程行来启用它。请注意,通过更改此设置并仅使用1个实例(如上面的响应中所述),我获得了3倍的吞吐量。我确实碰到了我的默认线程数,但是有一些开放文件的含义,所以我仍然在修改这个值。 – 2010-10-22 16:23:45

1

的方法Neo4j.start有一个可选的新数据库实例。我没有尝试过,但如果您可以尝试确保只创建一个Neo实例并确保每个运行时都先查找该共享实例,那么您的多运行时方法可能会有效。

何处放置共享实例?如果你在servlet上下文中运行,你可以把它放在一个servlet上下文属性中。既然你不是,最好的方法可能是编写一个小的Java包装类来启动和存储单个实例,并将该Java类导入到每个运行时。