> For the complete documentation index, see [llms.txt](https://docs.tibero.com/sysmasterdb/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tibero.com/sysmasterdb/8.4_manual/installation-guide/db-configuration/tpm-agent/up-down.md).

# TPM Agent 기동 / 종료

### TPM Agent 환경 설정

application.yml 파일 설정 완료 후 아래와 같은 순서로 TPM Agent를 환경을 설정한다.

#### 1.1. 코어 덤프 파일 최대 사이즈 설정

{% code collapsedlinecount="10" %}

```
ulimit -c unlimited
```

{% endcode %}

#### 1.2. TPM Agent 환경 변수 설정

{% code collapsedlinecount="10" %}

```
. set.sh
```

{% endcode %}

set.sh 스크립트 내용

{% code collapsedlinecount="10" %}

```
if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ]; then
    TARGET="$JAVA_HOME/bin/tpmagent"

    # 하드링크 시도, 실패하면 복사
    if ln -f "$JAVA_HOME/bin/java" "$TARGET" 2>/dev/null; then
        echo "Hardlink created: $TARGET"
    elif cp -p "$JAVA_HOME/bin/java" "$TARGET"; then
        echo "Copied binary to: $TARGET"
    else
        echo "WARNING: Failed to create $TARGET"
        echo "         This may be a permission issue. Please check write access to $JAVA_HOME/bin."
        echo "         You can start TPM Agent, but in 'top'/'topas', process name will appear as java."
    fi
    # 실행 가능 확인
    if [ -x "$TARGET" ]; then
      echo "Installed $TARGET"
    fi
else
    echo "ERROR: JAVA_HOME not set or java not found in \$JAVA_HOME/bin"
fi

# 사용자 환경변수 설정
export TPMAGENT_HOME={TPM_Agent_Home_Path}
export PATH=$TPMAGENT_HOME:$PATH
export LD_LIBRARY_PATH=$TPMAGENT_HOME:$LD_LIBRARY_PATH
# 기존 실행 중이던 Agent가 있다면, 종료 후 실행
export BOOT_WITH_AUTO_DOWN_CLEAN=true
export ENABLE_DEBUG=false
export ENABLE_GC_LOG=false
# Agent 의 java heap 메모리 설정. 2000 session 기준 1000m. 이후 1000 session 마다 200m 추가 권장
export JAVA_MIN_HEAP_SIZE=1000m
export JAVA_MAX_HEAP_SIZE=1000m
```

{% endcode %}

{% hint style="info" %}
**참고**

위 스크립트는 위에 두 줄인 바이너리 실행 PATH 설정과 TPM Agent 라이브러리 경로 LD\_LIBRARY\_PATH 설정 그리고 환경 변수 설정들을 기본적으로 제공하는 템플릿이다. 환경에 맞게 직접 스크립트를 수정하여 TPM Agent 실행을 하면 된다.
{% endhint %}

{% hint style="info" %}
**참고**

하드링크를 사용하는 이유는 top, topas 등 명령어에서 프로세스명을 치환하여 TPM Agent 프로세스를 쉽게 확인하기 위한 용도이며, 실패해도 Tibero 모니터링에는 영향이 없다.
{% endhint %}

| 인자                       | 설명                                                        |
| ------------------------ | --------------------------------------------------------- |
| {TPM\_Agent\_Home\_Path} | "java\_tpmagent\_dist\_{version}.tar.gz" 압축 파일 해제 디렉터리 경로 |

#### 1.3. Tibero 환경 변수 설정

{% code collapsedlinecount="10" %}

```sh
export TB_HOME={Monitoring_DB_Path}
export TB_SID={Monitoring_DB_SID}
export LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib
export PATH=$PATH:$TB_HOME/bin:$TB_HOME/client/bin
```

{% endcode %}

| 인자                       | 설명                 |
| ------------------------ | ------------------ |
| {*Monitoring\_DB\_Path*} | 관제 데이터베이스의 경로를 입력  |
| {*Monitoring\_DB\_SID*}  | 관제 데이터베이스의 SID를 입력 |

***

### 기동, 종료 및 기타 명령어

tpmctl.sh 명령어는 아래와 같으며, help로 터미널에서 사용법 확인이 가능하다.

| 명령어                        | 설명                                                                                                                                              |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `./tpmctl.sh [-p port] up` | TPM Agent 실행, -p 옵션을 통하여 jvm 디버그 포트들을 지정할 수 있다. 기본적으로 사용 가능한 포트를 찾으나, 해당 환경에서 사용 가능한 포트를 찾지 못하여 프로세스 실행이 되지 않는다면 해당 옵션을 사용하여 수동으로 포트를 지정할 수 있다. |
| `./tpmctl.sh down`         | TPM Agent 종료                                                                                                                                    |
| `./tpmctl.sh help`         | TPM Agent 도움말 출력                                                                                                                                |
| `./tpmctl.sh version`      | TPM Agent 버전 출력                                                                                                                                 |
| `./tpmctl.sh libversion`   | TPM Agent가 사용하는 TPM Stat 라이브러리 빌드 패치 목록과 Tibero의 패치 목록 출력                                                                                       |

***

### libJNITpmStat.so 라이브러리

Java TPM Agent에서 libtpmstat.so를 사용하기 위하여 필요한 라이브러리이다.

{% hint style="info" %}
**참고**

tpmagent.jar와 함께 있어야 하므로, 배포된 압축 파일을 압축 해제하여 하위의 lib 경로 아래에서 실행하고자 하는 os 버전에 해당하는 libJNITpmStat.so 파일을 tpmagent.jar와 같은 경로에 복사해야 한다.
{% endhint %}

{% hint style="warning" %}
**주의**

Tibero 버전명(PatchSet 버전)만으로 연동 라이브러리의 호환 여부를 판단할 수 없다.\
연동 라이브러리(libtpmstat.so)는 Tibero 서버와 공유 메모리 구조체가 일치해야 정상 동작하므로, 동일한 Tibero 버전이라도 빌드 시점, 별도 반영 패치 내역, 컴파일 옵션 등에 따라 호환되지 않을 수 있다.\
따라서 과거 빌드 바이너리 또는 별도 패치가 적용된 바이너리를 사용하는 경우, 관제 연동 전 동일한 Tibero 형상 기준으로 라이브러리를 빌드하고 호환 여부를 확인해야 한다.

libJNITpmStat.so 파일이 사용하는 libtpmstat.so 라이브러리 버전이 현재 Tibero 바이너리 버전과 맞지 않다면, 기존 TPM Agent와 동일하게 SIGSEGV 문제 등 오류가 발생하여 프로세스가 실행되지 않는다. 각 JVM 벤더별로 생성되는 오류 관련 파일 종류는 다르나 core, jitdump, javacore 등의 파일들이 생성될 수 있으므로 해당 파일 생성 시 libtpmstat.so 라이브러리 버전을 확인해야 한다.
{% endhint %}

***

### Tibero Reboot시 주의 사항

**Tibero Down 이후 바로 Tibero Boot를 위해서 TPM Agent Down이 필요**하다. TPM Agent가 참조하고 있는 Tibero Shared Memory를 해제해야 하기 때문이다.

{% hint style="warning" %}
**주의**

TPM Agent가 참조하고 있는 Tibero Shared Memory를 해제하기 위해서는 Tibero Down을 감지해야 하는데 감지 주기는 매 수집 주기와 동일하다. 따라서 사용자의 수집 주기 설정이 길게 되어 있거나 TPM Agent 자체가 느려지는 경우 등 Tibero Down 감지 자체가 늦어질 경우 Tibero Down을 하고 다시 Tibero Boot가 가능한 시점이 지연되게 된다.\
\
이와 같이 Tibero Down 감지가 늦어져 Tibero Boot 가능 시점이 지연되는 것을 방지하기 위해서는 TPM Agent Down을 진행하고 Tibero Boot를 하면 된다.
{% endhint %}
