代码之家  ›  专栏  ›  技术社区  ›  Darkerstar

ruby-rails循环导致服务器冻结

  •  1
  • Darkerstar  · 技术社区  · 15 年前

    这是因为我的服务器设置?该项目将部署在一个linux服务器上,安装Ngix和Passenger,它会遇到同样的问题吗?

    def comet_hook
        timeout(5) do
          while true do
            key = 'station_' + station_id.to_s + '_message_lastwrite'      
            if Rails.cache.exist?(key) 
              @cache_time = DateTime.parse(Rails.cache.read(key))
              if @cache_time > hook_start
                @messages = @station.messages_posted_after(hook_start)
                hook_start = @cache_time
                break
              end 
            end
        end
        ...
    end
    

    同样,在Rails内存存储缓存中,我一直收到“cannotmodifyfrozendobject”错误,所以上面的脚本只在我切换到文件缓存时才起作用。:(

    1 回复  |  直到 15 年前
        1
  •  0
  •   vladr    15 年前

    您的Windows安装程序可能包含一个 webrick mongrel 一次只能处理一个连接的实例。

    Passeger和 nginx 杂种 在后面聚集 ,或一组Passenger Apache工作进程),如果配置为这样做(则 servers 杂种 集群, MaxClients 阿帕奇/乘客。)

    根据预期流量调整并发客户端会话和/或系统内存的数量(例如,如果您预期每秒10个请求,则每个请求最多需要5秒或更长时间才能提供服务,您将需要容纳50个或更多的客户机连接,即集群中50个或更多的混血服务器,或者50个或更多的Apache工作进程——需要非常多的内存。)