# TPM Agent 기동 / 종료

### TPM Agent 환경 설정

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

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

```
ulimit -c unlimited
```

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

```
. set.sh
```

set.sh 스크립트 내용

```
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
```

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

위 스크립트는 위에 두 줄인 바이너리 실행 PATH 설정과 TPM Agent 라이브러리 경로 LD\_LI BRARY\_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 환경 변수 설정

```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
```

| 인자                       | 설명                 |
| ------------------------ | ------------------ |
| {*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 버전명 또는 코어셋명만으로 연동 라이브러리의 호환 여부를 판단할 수 없다.\
연동 라이브러리는 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.tibero.com/sysmasterdb/8.3_manual/installation-guide/db-configuration/tpm-agent/up-down.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
