我有几千个数据库。我想逐个连接到它们中的每一个,并发出一个查询。我通过为每个进程启动Postgrex进程来做到这一点。
{:ok, pid} =
Postgrex.start_link(
port: database.port,
hostname: database.host,
username: database.username,
password: database.password,
database: database.database_name
) 然后我发出一个Postgrex.query,然后像这样停止它
:ok = GenServer.stop(pid, :normal)一切似乎都运行得很好,只是我最终遇到了数以千计的Postgrex.TypeServer进程,它们似乎在很长一段时间内都没有被清理干净。
有没有更好的方法来清理Postgrex进程,以便也停止TypeServer?
我在Postgrex 0.13.3上
编辑:
为了澄清一些事情,我想在每个Postgrex进程停止后清理TypeServer。在完成整个TypeServers之后清理所有的Enum.map对我来说并不是那么有用,因为它会导致内存缓慢增长,然后急剧下降,而不是平缓下降。
Enum.map(databases, fn database ->
{:ok, pid} = Postgrex.start_link(port: database.port, hostname: database.host, username: database.username, password: database.password, database: database.database_name)
Postgrex.query!(pid, "some query", [])
:ok = GenServer.stop(pid, :normal)
# something here to clean up the TypeServer
end)发布于 2020-04-06 12:36:46
我没有挖掘到它的最底层,但是Postgrex.TypeServer的are managed by dynamic Postgrex.TypeSupervisor,幸运的是started with a hard-coded name。
因此,我的大胆猜测应该是:
DynamicSupervisor.stop(Postgrex.TypeSupervisor)此外,关闭Postgrex.App也会有所帮助
Application.stop(:postgrex)https://stackoverflow.com/questions/61049955
复制相似问题