请求卡在 PG::Connection#async_exec
Requests get stuck in PG::Connection#async_exec
我正在尝试让 rails
应用程序在 passenger
下运行,但到目前为止还没有成功。它使用 sequel
连接到 postgresql
。随机请求需要太多时间才能完成。我能够找到应用程序花费时间的地方:
%self total self wait child calls name
99.92 65.713 65.713 0.000 0.000 5 PG::Connection#async_exec
0.00 0.002 0.002 0.000 0.000 264 Set#delete
...
据推测,webrick
不会发生这种情况,我将在 unicorn
下尝试 运行。
这里有一些 links.
我正在使用 passenger-5.0.30
、ruby-2.3.0
、postgresql-9.4
、pg-0.19.0
、rails-5.0.0.1
。 unicorn-5.1.0
也是如此。该应用 运行 正在 lxc
容器中。主机和来宾操作系统是 ubuntu/xenial
.
我们开始重新建立与数据库的连接后,问题已解决。我们在项目中使用 sequel
,Passenger 仅在使用 ActiveRecord 时自行处理问题。
为了扩展它,默认情况下,Passenger 对 ruby 应用程序使用智能生成。它首先产生预加载器进程,加载框架和所有库。之后,预加载器进程在需要时产生工作进程,处理请求。产生工作进程时,所有文件描述符都从预加载器进程继承。因此,如果您不重新建立与数据库的连接,则所有工作进程共享一个由预加载器建立的连接。这会导致各种奇怪的行为。喜欢请求时间太长。
在此之前,我们还将处理 WebSocket 连接移到了一个单独的进程中。但是不确定它是否导致了这个问题。
更多信息请点击此处:
Disconnect If Using Forking Webserver with Code Preloading
Unintentional file descriptor sharing
Running the Action Cable server on the same host and port, under a sub-URI
我正在尝试让 rails
应用程序在 passenger
下运行,但到目前为止还没有成功。它使用 sequel
连接到 postgresql
。随机请求需要太多时间才能完成。我能够找到应用程序花费时间的地方:
%self total self wait child calls name
99.92 65.713 65.713 0.000 0.000 5 PG::Connection#async_exec
0.00 0.002 0.002 0.000 0.000 264 Set#delete
...
据推测,webrick
不会发生这种情况,我将在 unicorn
下尝试 运行。
这里有一些
我正在使用 passenger-5.0.30
、ruby-2.3.0
、postgresql-9.4
、pg-0.19.0
、rails-5.0.0.1
。 unicorn-5.1.0
也是如此。该应用 运行 正在 lxc
容器中。主机和来宾操作系统是 ubuntu/xenial
.
我们开始重新建立与数据库的连接后,问题已解决。我们在项目中使用 sequel
,Passenger 仅在使用 ActiveRecord 时自行处理问题。
为了扩展它,默认情况下,Passenger 对 ruby 应用程序使用智能生成。它首先产生预加载器进程,加载框架和所有库。之后,预加载器进程在需要时产生工作进程,处理请求。产生工作进程时,所有文件描述符都从预加载器进程继承。因此,如果您不重新建立与数据库的连接,则所有工作进程共享一个由预加载器建立的连接。这会导致各种奇怪的行为。喜欢请求时间太长。
在此之前,我们还将处理 WebSocket 连接移到了一个单独的进程中。但是不确定它是否导致了这个问题。
更多信息请点击此处:
Disconnect If Using Forking Webserver with Code Preloading
Unintentional file descriptor sharing
Running the Action Cable server on the same host and port, under a sub-URI