2010-10-20 107 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類導入到每個運行時。