ARTIFACTORY:如何在ARTIFACTORY Pod崩溃/被删除之前收集线程转储?
有时,您可能会惊讶地看到多次重新启动Artifactory POD。
查看日志可能不足以让您找到问题的根本原因。
如果没有适当的监控工具,分析问题将更加困难。
您可能希望更深入地了解pod崩溃之前的线程状态。
例如,要查看线程的数量或线程的状态(例如;挂起、可运行或阻塞)
您可能知道,及时获取线程转储非常重要。
这意味着您必须在问题发生时获取线程转储,而不是在重新启动或问题消失之后。否则,您将在实例正常运行时获得实例的状态,这在大多数情况下没有多大帮助。
您可能想知道这在Kubernetes环境中是如何实现的。
好消息是Artifactory/Artifactory HA图107.46.3及以上版本已经引入了生命周期钩子,如图所示- https://github.com/jfrog/charts/blob/c4a2c6c671d20e8672db24572b965a655381ee7e/stable/artifactory-ha/values.yaml#L628,您可以使用它。
解决方案
下面是以5个间隔获取3个转储的示例artifactory:
容器:
生命周期:
preStop:
执行:
命令:
——/bin/bash
- - - - - - - c
- |
回显“以5秒的间隔获取线程转储1”;
/opt/jfrog/artifactory/app/third-party/java/bin/jstack -l $(pidof java) > /tmp/"artifactory. "美元(日期+ Y % m % d % H % % % S) .td”;
睡眠5;
回显“以5秒的间隔获取线程转储2”;
/opt/jfrog/artifactory/app/third-party/java/bin/jstack -l $(pidof java) > /tmp/"artifactory. "美元(日期+ Y % m % d % H % % % S) .td”;
睡眠5;
回显“以5秒的间隔获取线程转储3”;
/opt/jfrog/artifactory/app/third-party/java/bin/jstack -l $(pidof java) > /tmp/"artifactory. "美元(日期+ Y % m % d % H % % % S) .td”;
应该调整线程转储的目标(例如/tmp),使其位于您的持久存储或备份位置。
如何验证是否正确创建了线程转储
1.通过跑步进入POD
Kubectl - exexit artifactory-ha-artifactory-ha-primary-0 bash
2.运行命令删除POD
Kubectl删除pod artifactory-ha-artifactory-ha-primary-0
3.在POD内多次运行ls -al /tmp,直到被踢出。(警告,这会使实例崩溃)
您应该看到创建了线程转储。
