几天前,我的 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 应用来说是相当小的内存量。但这取决于代码和启动参数。