ARTIFACTORY:如何在ARTIFACTORY Pod崩溃/被删除之前收集线程转储?
有时,您可能会惊讶地看到Artifactory POD多次重新启动。
查看日志可能还不足以找出问题的根本原因。
如果没有适当的监控工具,分析问题将更加困难。
您可能希望在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- third /java/bin/jstack -l $(pidof java) > /tmp/"artifactory. sh "美元(日期+ Y % m % d % H % % % S) .td”;
睡眠5;
回显“以5秒间隔获取线程转储2”;
/opt/jfrog/artifactory/app/third- third /java/bin/jstack -l $(pidof java) > /tmp/"artifactory. sh "美元(日期+ Y % m % d % H % % % S) .td”;
睡眠5;
回显“以5秒间隔获取线程转储3”;
/opt/jfrog/artifactory/app/third- third /java/bin/jstack -l $(pidof java) > /tmp/"artifactory. sh "美元(日期+ Y % m % d % H % % % S) .td”;
线程转储(例如/tmp)的目的地应该调整到持久存储或备份位置上。
如何验证线程转储被正确创建
1.通过跑步进入POD
Kubectl exec -it artifactory-ha-artifactory-ha-primary-0 bash
2.运行命令删除POD
Kubectl删除pod artifactory-ha-artifactory-ha-primary-0
3.在POD中多次运行ls -al /tmp,直到被踢出。(警告,这会使实例崩溃)
您应该看到线程转储已经创建。
