代码之家  ›  专栏  ›  技术社区  ›  Junaid Farooq

酒厂建不与PostgreSQL长生不老药凤凰

  •  0
  • Junaid Farooq  · 技术社区  · 8 年前

    exrm distillery

    iex -S mix phx.server
    

    应用程序运行,所有内容都与数据库连接。但是生成版本没有连接到数据库。(我认为除了为db构建获取dev值之外,还要执行上面的命令。)

    2018-08-10 08:59:19.160 [error] Postgrex.Protocol (#PID<0.2803.0>) failed to connect: ** (Postgrex.Error) FATAL 53300 (too_many_connections): remaining connection slots are reserved for non-replication superuser connections
    

    /opt/evercam_media/releases/1.0.1/sys.config 文件它给了我正确的数据库值,用于数据库连接

           {mode,prod}]},
      {'Elixir.EvercamMedia.Repo',
          [{adapter,'Elixir.Ecto.Adapters.Postgres'},
           {types,'Elixir.EvercamMedia.PostgresTypes'},
           {url,<<"postgres://localhost/evercam_dev">>},
           {socket_options,[{keepalive,true}]},
           {timeout,60000},
           {pool_timeout,60000},
           {pool_size,80},
           {lazy,false},
           {ssl,true}]},
      {'Elixir.EvercamMedia.SnapshotRepo',
          [{adapter,'Elixir.Ecto.Adapters.Postgres'},
           {url,<<"postgres://localhost/evercam_dev">>},
           {socket_options,[{keepalive,true}]},
           {timeout,60000},
           {pool_timeout,60000},
           {pool_size,100},
           {lazy,false},
           {ssl,true}]}]}].
    

    这里有什么问题?它没有和数据库连接,我做错什么了?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Aleksei Matiushkin    8 年前

    原因是您的应用程序有两个repo,它们都使用非惰性连接池,总大小为180。

    PostgreSQL的默认设置是100个并发客户端连接。

    你有两个选择:

    增加 max_connections postgresql.conf 比如说,200

    max_connections = 200
    shared_buffers = 50MB
    

    ecto 连接池

    config :ymy_app, EvercamMedia.Repo,
      adapter: Ecto.Adapters.Postgres,
      ...
      pool_size: 40
    

    This answer 可能也有用。

    推荐文章