当前位置:Java -> 在Docker容器中监控和排查Java应用程序
MoneySuite 是一家提供支付和金融自动化解决方案的金融科技SaaS平台。作为一家受监管的金融服务提供商,我们的应用是运行在Docker容器镜像中的银行级Java微服务。
作为我们服务运营准备工作的一个重要部分,我们对在Docker基础设施中运行的服务进行了全面的性能分析和故障排除,以实现以下目的:
本文全面讨论并分享了我们实施的方法,以实现在Docker容器中运行的Java Docker镜像的性能分析和有效故障排除。
容器服务对企业来说是相对较新的,可用于容器管理的工具非常有限。在本文中,我们将使用 yCrash,这是一款全面的非侵入式工具,具有360°数据捕获和分析功能,用于故障排除容器环境和其中运行的服务。
设置yCrash包括三个简单的步骤:
yCrash提供免费套餐。您可以在他们的网站上注册。
yCrash 服务器是一个提供事故管理报告的 Web 应用程序,有两种变体:
注意:在本教程中,我们将使用云服务。
yCrash 代理可以全方位地捕获服务和基础设施的视图。它可以通过几个简单的步骤部署。
yCrash 代理可以安装在容器内与应用程序一起,也可以安装在容器外。在此示例中,我们将使用容器内选项。
请参考以下链接处的 yCrash 代理安装指南这里。
可以对运行 Java 服务的任何 Docker 容器进行故障排除。在本博客中,我们使用了 Spring Boot 容器应用程序,这是一个全面的 Spring Boot 容器 API 服务,能够模拟各种性能问题。
您可以从这个 GitHub 仓库查看并运行 Spring Boot Buggy API 服务。
yCrash 是非侵入性的,几乎不会产生额外开销,并具有深入的分析能力。
以 Docker 镜像报告的 YCrash 事故摘要
在容器中运行的Java进程需要性能调优和持续监控,以检查它是否在容器环境下健康运行。诸如YCrash之类的分析工具将详细显示Java应用的健康和性能统计信息。Java应用性能参数包括:
YCrash showing GC stats for tuning
以下是yCrash工具生成的线程转储分析报告,突出显示了导致死锁的两个线程及其堆栈跟踪。
YCrash highlighting deadlocks issue with detail
您可以清楚地看到yCrash报告了线程-4
和线程-5
受到死锁的影响。yCrash还报告了线程-4
和线程-5
的堆栈跟踪。通过堆栈跟踪,您可以注意到线程-5
获取了CoolObject
的锁,它正在等待HotObject
的锁。另一方面,线程-1
获取了HotObject
的锁,它正在等待CoolObject
的锁。现在根据这个堆栈跟踪,我们知道导致问题的确切代码行。
容器环境中运行的Docker服务需要定期进行健康监控,以进行健康和维护。常见的监控事项包括:
YCrash showing 360-degree resource view of Docker container
为了持续监控错误或性能下降,容器环境中的日志需要被监控以检测任何异常情况。环境应被彻底监控,并且任何事件应通过通知报告,以进行及时的服务管理操作。
YCrash showing log status highlighting exceptions
我们已经看到了在Docker容器环境中监控和管理服务的重要性,以及一个真实示例——像YCrash这样的监控工具,它显示Docker容器的所有细节,用于性能调优、根本原因分析和持续监控。
推荐阅读: 程序员在大连可以把去哪些公司
本文链接: 在Docker容器中监控和排查Java应用程序