0

我在 glassfish 上运行的 jRuby 中设置了一个基于 Neo4j 的系统。Glassfish 与大多数 Rails 系统一样,允许某种机制运行多个实例。在 glassfish 情况下,线程池大小有一个内部设置。

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

以下是我的设置:

#
# GlassFish 配置。
#
# 请在修改前阅读每个配置设置的注释。
#
# 应用环境。默认值开发

环境:分期
# HTTP 配置
  网址:
    # 港口
    端口:3000

    #地址
    地址:0.0.0.0

    # 上下文根。默认值为“/”
    上下文根:/

    # Grizzly 是 GlassFish gem 使用的基于 NIO 的 HTTP 库
    灰熊:
        启用分块:true
        请求超时:30
        发送缓冲区大小:8192
        最大保活连接数:256
        保活超时:30
        线程池:
            空闲线程超时秒数:900
            最大队列大小:4096
            最大线程池大小:5
            最小线程池大小:2                
#日志配置
日志:
    日志级别:全部
jruby 运行时池:
    初始:1
    分钟:1
    最大:5
守护进程:
    启用:真

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

4

2 回答 2

2

您可以尝试将 jruby-runtime-pool 最大值设置为 1(尚未对此进行测试)。如果您正在运行一个多线程应用程序(如 rails 3 和 Neo4j),我认为没有必要使用多个 jruby-runtime,对吧?

于 2010-10-21T19:47:57.997 回答
1

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

将共享实例放在哪里?如果您在 servlet 上下文中运行,则可以将其放入 servlet 上下文属性中。由于您不是,最好的方法可能是编写一个小型 Java 包装类来启动和存储单个实例,并将该 Java 类导入每个运行时。

于 2010-10-20T17:42:47.997 回答