查找 Spring Boot 应用程序失败的原因

查找 Spring Boot 应用程序失败的原因

几天前,我的 Spring Boot 应用程序停止工作了,我正在努力找出原因,以便将来可以防止这种情况发生。这是第一次发生这种情况,所以我真的不知道从哪里开始。重新启动服务器解决了这个问题。

我会写下我认为相关的一切,希望有人能帮助我知道如何去做。

  • 托管于 Digital Ocean droplet 上。
  • Ubuntu 16.04、1GB RAM、25GB SSD、1 核。
  • HTTP 请求到达运行 Nginx 的单独服务器(相同设置),并传递到运行 Spring Boot 应用程序的上游服务器。在故障期间,所有 http 请求都返回 502,并由 Nginx 记录在 error.log 中,如下所示

2019/04/20 20:06:56 [错误] 14576#14576:*1161160 connect() 连接到上游时失败(111:连接被拒绝),客户端:xx.xxx.x.xxx,服务器:api.example.com,请求:“OPTIONS /oauth/token HTTP/1.1”,上游:“http://xx.xxx.xx.xxx:8080/oauth/token", 主机:“api.example.com”, 引荐来源:“https://example.com/login

2019/04/20 20:06:56 [错误] 14576#14576:*1161160 连接到上游时没有实时上游,客户端:xx.xxx.x.xxx,服务器:api.example.com,请求:“OPTIONS /oauth/token HTTP/1.1”,上游:“http://server_upstream/oauth/token", 主机:“api.example.com”, 引荐来源:“https://example.com/login

  • 我能够毫无问题地通过 SSH 连接到服务器。
  • 我使用 log4j2 在 Spring Boot 应用程序中进行日志记录,但是故障期间没有记录任何内容。
  • 同一服务器上的单独 cron 定期通过 HTTP 获取数据,在故障期间运行良好。
  • 当故障发生时,服务器使用的内存大幅下降(85%-> 18%)。
  • 我在系统日志中找不到任何相关信息。
  • Spring Boot 应用程序在 systemd 中运行,并且(我认为)Spring Boot 应用程序在故障期间仍在运行。

我应该从哪里开始寻找失败的原因?如果再次发生这种情况,我可以做些什么来更轻松地调试它?

答案1

您的 Java 进程似乎已停止。您能否提供更多信息:

  • 启动命令,如果是 systemd - 服务文件
  • 最后记录

可能的原因是内存不足,因为 1 GB 对于 Java Web 应用来说是相当小的内存量。但这取决于代码和启动参数。

相关内容