Openshift 3.11 Дамп кучи ООМ на нескольких модулях

#openshift #heap-dump

#openshift #дамп кучи

Вопрос:

В запущенном приложении OpenShift 3.11 я пытаюсь получить дамп кучи, потому что подозреваю, что в моих модулях есть ООМ.

Мое приложение работает на 14 репликах, и я хочу добавить следующую конфигурацию к параметрам Java

 -XX: HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=file:///my/path/jdump/
  

путь находится на внешнем подключенном томе.

Теперь я знаю, что имя файла по умолчанию будет

 java_pid1.hprof 
  

но из

 ps -ef | grep java
  

я заметил, что большинство модулей используют один и тот же pid для процесса, и я боюсь, что если ООМ происходит более чем в одном модуле одновременно, у меня возникнет проблема с современным доступом и записью в файл.

Есть ли способ параметризовать имя файла? Я представляю себе что-то вроде

 -XX: HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=file:///my/path/jdump/{$podname}_dump.href
  

большое спасибо за ваши добрые ответы

Ответ №1:

Вы можете указать имя модуля как переменную env, а затем использовать его в своей команде, т.е.

       command: [ "/bin/java"]
      args:
      - "-jar"
      - "your.jar"
      - "-XX: HeapDumpOnOutOfMemoryError"
      - "-XX:HeapDumpPath=file:///my/path/jdump/$(MY_POD_NAME)_dump.href"
      env:
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
  

Обратите внимание на синтаксическую ссылку $(MY_POD_NAME) https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#use-environment-variables-to-define-arguments

Отображение полей как переменных env: https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/#use-pod-fields-as-values-for-environment-variables

Комментарии:

1. большое спасибо, я постараюсь и дам вам знать