Azure应用服务-春季启动-Hikari错误

时间:2020-07-12 18:34:17

标签: java spring spring-boot azure-web-app-service azure-app-service-plans

我已经部署了const { Canvas } = require("../native"); const canvas = new Canvas(); // logs "foo" console.log("foo"); // opens the window canvas.open(); // gets executed right away console.log("bar"); // other stuff setTimeout(() => {}, 10000); // closes the window canvas.close(); 应用程序,该应用程序具有基于数据库的队列,并且作业在Spring Boot上。

昨天,当应用程序正在工作时,我执行了一些App ServiceScale out操作。

在某个时刻(与缩放操作无关),应用程序开始引发Scale in错误。

Hikari

以下是我春季计划的工作中的堆栈跟踪以及其他信息:

com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@1ae66f34 (This connection has been closed.). Possibly consider using a shorter maxLifetime value.
com.zaxxer.hikari.pool.ProxyConnection   : HikariPool-1 - Connection org.postgresql.jdbc.PgConnection@1ef85079 marked as broken because of SQLSTATE(08006), ErrorCode(0)

接下来出现以下错误堆栈:

org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
Caused by: javax.net.ssl.SSLException: Connection reset by peer (Write failed)
Suppressed: java.net.SocketException: Broken pipe (Write failed)
Caused by: java.net.SocketException: Connection reset by peer (Write failed)

定期调用的代码-每500毫秒在这里:

WARN 1 --- [   scheduling-1] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@48d0d6da (This connection has been closed.). 

Possibly consider using a shorter maxLifetime value.
org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: Connection is closed
Caused by: java.sql.SQLException: Connection is closed

更新。 上面的代码几乎始终无所作为,因为网站上没有流量。

更新2。我检查了@Scheduled(fixedDelayString = "${worker.delay}") @Transactional public void execute() { jobManager.next(jobClass).ifPresent(this::handleJob); } 日志,发现了这一点:

Postgres

2020-07-11 22:48:09 UTC-5f0866f0.f0-LOG: checkpoint starting: immediate force wait 2020-07-11 22:48:10 UTC-5f0866f0.f0-LOG: checkpoint complete (240): wrote 30 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.046 s, sync=0.046 s, total=0.437 s; sync files=13, longest=0.009 s, average=0.003 s; distance=163 kB, estimate=13180 kB 2020-07-11 22:48:10 UTC-5f0866ee.68-LOG: received immediate shutdown request 2020-07-11 22:48:10 UTC-5f0a3f41.8914-WARNING: terminating connection because of crash of another server process 2020-07-11 22:48:10 UTC-5f0a3f41.8914-DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory. // Same text about 10 times 2020-07-11 22:48:10 UTC-5f0866f2.7c-HINT: In a moment you should be able to reconnect to the database and repeat your command. 2020-07-11 22:48:10 UTC-5f0866ee.68-LOG: src/port/kill.c(84): Process (272) exited OOB of pgkill. 2020-07-11 22:48:10 UTC-5f0866f1.fc-WARNING: terminating connection because of crash of another server process 2020-07-11 22:48:10 UTC-5f0866f1.fc-DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory. 2020-07-11 22:48:10 UTC-5f0866f1.fc-HINT: In a moment you should be able to reconnect to the database and repeat your command. 2020-07-11 22:48:10 UTC-5f0866ee.68-LOG: archiver process (PID 256) exited with exit code 1 2020-07-11 22:48:11 UTC-5f0866ee.68-LOG: database system is shut down 服务器似乎有问题,它已自行关闭。我读对了吗?

1 个答案:

答案 0 :(得分:1)

就像您的日志中提到的那样,您是否尝试过为Hikari CP设置maxLifetime属性?我认为在设置了该属性之后,该问题应该得到解决。

基于Hikari文档(https://github.com/brettwooldridge/HikariCP)- maxLifetime This property controls the maximum lifetime of a connection in the pool. An in-use connection will never be retired, only when it is closed will it then be removed. On a connection-by-connection basis, minor negative attenuation is applied to avoid mass-extinction in the pool. We strongly recommend setting this value, and it should be several seconds shorter than any database or infrastructure imposed connection time limit. A value of 0 indicates no maximum lifetime (infinite lifetime), subject of course to the idleTimeout setting. The minimum allowed value is 30000ms (30 seconds). Default: 1800000 (30 minutes)