gpt4 book ai didi

Postgresql 8.4 偶尔挂起 JDBC 访问

转载 作者:行者123 更新时间:2023-11-29 11:15:04 24 4
gpt4 key购买 nike

我有一个数据库密集型应用程序,它运行了很多小时并使用多个线程,所有线程都通过 JDBC 与 Postgresql 通信。我看到的症状是偶尔(每次“运行”中有 1 到 3 次)我会遇到一个或多个卡住的 JDBC 连接,这些连接似乎在等待数据库的响应,但似乎永远在等待。线程转储如下:

"Thread-4367355" daemon prio=6 tid=0x04920c00 nid=0x1e88 runnable [0x04bef000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:135)
at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:104)
at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:73)
at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:255)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1165)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191)
- locked <0x2c023e10> (a org.postgresql.core.v3.QueryExecutorImpl)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:337)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:329)

除了很多时候只有一个线程被卡住之外,我会想到某种锁定问题。我在这种状态下看到的至少一个查询是 REINDEX,因此该查询可能花费了相当多的时间。为了找到解决方案,我将 JDBC 驱动程序从 8.4 升级到 9.1,但问题仍然存在。 Postgresql 日志中也没有异常。有什么进一步诊断的想法(除了使用 pg_locks)吗?

最佳答案

显然您可以尝试:将 PostgreSQL 本身也更新到版本 9.1。
您还可以记录所有 long running statements ,这可能会给您一些线索。

Set log_min_duration_statement = 2000

或者任何适合你的阈值。
我不知道如何解释线程转储,但这行看起来很奇怪:

  • locked <0x2c023e10> (a org.postgresql.core.v3.QueryExecutorImpl)

什么被锁定了?你会注意到它是如何拼错“at a org.postgresql.cor ...”的。那是复制粘贴的人工制品还是原始消息?如果是这样,可能有助于找到起源。

关于Postgresql 8.4 偶尔挂起 JDBC 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7910252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com