我正在使用glassfish运行的jRuby中建立一个基于Neo4j的系统。与大多数rails系统一样,Glassfish允许某些机制运行多个实例。在glassfish的情况下,线程池大小有一个内部设置。
我的问题是我遇到了多次打开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 :(得分:2)
您可以尝试将jruby-runtime-pool最大值设置为1(尚未对此进行测试)。 如果您正在运行多线程应用程序(如rails 3和Neo4j),我认为不需要使用多个jruby-runtime,对吧?
答案 1 :(得分:1)
方法Neo4j.start
采用可选的Neo数据库实例。我没有尝试过,但如果您可以尝试确保只创建一个Neo实例并确保每个运行时首先查找该共享实例,那么您的多运行时方法可能会有效。
放置共享实例的位置?如果您在servlet上下文中运行,则可以将其放在servlet上下文属性中。既然你不是,最好的方法可能是编写一个小的Java包装类来启动和存储单个实例,并将该Java类导入每个运行时。