rippled 문제 진단하기

rippled에 문제가 있는 경우 첫 번째 단계는 문제를 정확하게 파악하기 위해 더 많은 정보를 수집하는 것입니다. 이렇게 하면 근본 원인과 해결 방법을 찾기가 더 쉬워질 수 있습니다.

다음 페이지에서 몇 가지 일반적인 문제 범주, 원인 및 해결 방법을 확인하세요:

  • 서버가 시작되지 않는 경우(예: 충돌 또는 자동으로 종료되는 경우) rippled 서버가 시작되지 않음을 참조하세요.

  • 서버가 시작되기는 하지만 XRP Ledger 네트워크에 안정적으로 동기화되지 않거나 동기화된 상태를 유지하지 못하는 경우, rippled 서버가 동기화되지 않음을 참조하세요.

이 문서의 나머지 부분에서는 서버가 실행 중일 때 발생하는 문제(프로세스가 활성화되어 있지만 네트워크와 동기화할 수 없는 경우 포함)를 진단하기 위한 단계를 제안합니다.

server_info 가져오기

커맨드라인을 사용하여 로컬 rippled 인스턴스에서 서버 상태 정보를 가져올 수 있습니다. 예를 들어:

rippled server_info

이 명령에 대한 응답에는 server_info 메소드와 함께 문서화되어 있는 많은 정보가 있습니다. 문제 해결을 위해 가장 중요한 필드는 다음과 같습니다(가장 일반적으로 사용되는 것부터 가장 적게 사용되는 것까지):

  • server_state - 대부분의 경우 이 필드는 유효성 검사기로 구성된 서버의 경우 제안 중으로 표시되어야 하며, 유효성 검사기가 아닌 서버의 경우 전체로 표시되어야 합니다. 연결된 값은 서버가 나머지 P2P 네트워크와 통신할 수 있지만 공유 ledger 상태의 진행 상황을 추적하기에 충분한 데이터가 아직 없다는 의미입니다. 일반적으로 나머지 ledger의 상태와 동기화하는 데는 시작 후 약 5~15분이 소요됩니다.

    • 서버가 몇 시간 동안 연결 상태를 유지하거나 전체 또는 제안 상태가 된 후 다시 연결 상태로 돌아간다면, 일반적으로 서버가 나머지 네트워크를 따라잡을 수 없다는 의미입니다. 가장 일반적인 병목 현상은 디스크 I/O, 네트워크 대역폭 및 RAM입니다.

    • 예를 들어 다음 서버 상태 정보는 동기화(연결 끊김, 연결됨 및 동기화 상태로 나뉨)에 3분 미만이 걸렸으며 현재 약 90분 동안 유지된 완전 동기화 제안 상태에 있는 정상 서버를 보여줍니다:

$ ./rippled server_info
Loading: "/etc/opt/ripple/rippled.cfg"
2020-Jan-03 22:49:32.834134358 HTTPClient:NFO Connecting to 127.0.0.1:5005

{
  "result" : {
    "info" : {
      ... (trimmed) ...
      "server_state" : "proposing",
      "server_state_duration_us" : "5183282365",
      "state_accounting" : {
        "connected" : {
          "duration_us" : "126164786",
          "transitions" : 1
        },
        "disconnected" : {
          "duration_us" : "2111321",
          "transitions" : 1
        },
        "full" : {
          "duration_us" : "5183282365",
          "transitions" : 1
        },
        "syncing" : {
          "duration_us" : "5545604",
          "transitions" : 1
        },
        "tracking" : {
          "duration_us" : "0",
          "transitions" : 1
        }
      },
      ... (trimmed) ...
    }
  }
}

전체 또는 제안 중 상태가 아닌 경우 서버가 아직 네트워크에 동기화되지 않은 것입니다. 서버에 동일한 상태 간 전환이 여러 번 표시되는 경우(전환 횟수가 2회 이상) 서버가 네트워크와 동기화되지 않았음을 나타냅니다. 단기간에 전환이 많은 경우에는 문제가 되지만, 인터넷 연결의 변동은 피할 수 없으므로 장기간에 걸쳐 몇 번의 전환이 있는 경우에는 괜찮습니다. 총 가동 시간(server_state_duration_us)과 비교한 개별 상태의 시간(duration_us)으로도 서버가 얼마나 잘 동기화되고 있는지 알 수 있습니다. 약 24시간의 가동 시간 후 서버의 총 실행 시간의 99% 미만이 전체 또는 제안 상태에 사용되었다면 불안정성의 원인을 조사해 볼 수 있습니다.

  • 동기화 문제를 디버깅하는 데 도움이 필요하면 서버가 동기화되지 않음을 참조하세요.

  • complete_ledgers - 이 필드에는 서버에 전체 ledger 데이터가 있는 ledger 인덱스가 표시됩니다. 정상 서버에는 일반적으로 "12133424-12133858"과 같은 단일 범위의 최근 ledger이 있습니다.

    • "11845721-12133420,12133424-12133858"과 같이 완전한 ledger 집합이 분리되어 있는 경우 서버가 간헐적으로 중단되었거나 일시적으로 나머지 네트워크와 동기화되지 않았음을 나타낼 수 있습니다. 가장 일반적인 원인은 디스크 I/O 또는 네트워크 대역폭 부족입니다.

    • 일반적으로 rippled 서버는 피어 서버로부터 최근 ledger 기록을 다운로드합니다. ledger 기록의 공백이 몇 시간 이상 지속되면 누락된 데이터가 있는 피어에 연결되지 않을 수 있습니다. 이런 경우, 구성 파일에 다음 구절을 추가하고 다시 시작하면 서버가 rippled의 전체 히스토리가 있는 퍼블릭 서버 중 하나와 강제로 피어링을 시도할 수 있습니다:

[ips_fixed]
s2.ripple.com 51235
  • amendment_blocked - 이 필드는 일반적으로 server_info 응답에서 생략됩니다. 이 필드가 true 값으로 표시되면 네트워크에서 서버에 구현이 없는 수정 사항을 승인한 것입니다. 대부분의 경우 rippled를 최신 버전으로 업데이트하면 이 문제를 해결할 수 있습니다. 또한 기능 메소드를 사용하여 현재 활성화된 수정안 ID와 서버가 지원하는 수정안과 지원하지 않는 수정안을 확인할 수 있습니다.

  • peers - 이 필드는 서버가 연결된 XRP Ledger P2P 네트워크에 있는 다른 서버의 수를 나타냅니다. 특정 피어에만 연결하도록 명시적으로 구성하지 않는 한, 정상 서버는 일반적으로 5~50개의 피어를 표시합니다.

    • 피어가 0명인 경우, 서버가 네트워크에 연결할 수 없거나 시스템 시계가 잘못되었을 수 있습니다. (rippled는 모든 서버에서 NTP 데몬을 실행하여 시계를 동기화할 것을 권장합니다.)

    • 피어가 정확히 10명인 경우, rippled NAT를 사용하는 라우터를 통해 들어오는 연결을 수신할 수 없다는 의미일 수 있습니다. P2P 연결에 사용되는 포트(기본값 51235 포트)를 전달하도록 라우터의 방화벽을 구성하여 연결성을 개선할 수 있습니다.

서버에서 응답 없음

rippled 실행 파일은 rippled 서버에 클라이언트로 연결할 수 없는 경우 다음 메시지를 반환합니다:

{
   "error" : "internal",
   "error_code" : 71,
   "error_message" : "Internal error.",
   "error_what" : "no response from server"
}

이는 일반적으로 몇 가지 문제 중 하나를 나타냅니다:

  • rippled 서버가 시작 중이거나 전혀 실행되고 있지 않습니다. 서비스 상태를 확인하고 실행 중이면 몇 초 기다렸다가 다시 시도하세요.

  • 서버에 연결하려면 rippled된 커맨드라인 클라이언트에 다른 매개변수를 전달해야 할 수도 있습니다.

  • rippled 서버가 JSON-RPC 연결을 허용하지 않도록 구성되었을 수 있습니다.

서버 로그 확인

기본적으로 rippled 서버는 서버의 디버그 로그를 /var/log/rippled/debug.log 파일에 기록합니다. 디버그 로그의 위치는 서버의 구성 파일에 따라 다를 수 있습니다. rippled 서비스를 systemctl이나 service를 사용하여 시작하는 대신 직접 시작하는 경우 기본적으로 로그 메시지도 콘솔에 인쇄합니다.

기본 구성 파일은 시작 중에 내부적으로 log_level 메소드를 사용하여 모든 범주의 로그 메시지에 대해 로그 수준을 심각도 "경고"로 설정합니다. 시작 중에는 --silent 커맨드라인 옵션을 사용하여 디버그 로그의 상세도를 제어하고 서버가 실행되는 동안에는 log_level 메소드를 사용하여 디버그 로그의 상세도를 제어할 수 있습니다. (설정은 구성 파일의 [rpc_startup] 스탠자 참조).

서버를 시작하는 동안 많은 경고 수준(WRN) 메시지를 출력하고 이후에도 가끔씩 경고 수준 메시지를 출력하는 것은 정상입니다. 서버 시작 후 처음 5~15분 동안은 대부분의 경고를 무시해도 안전합니다.

다양한 유형의 로그 메시지에 대한 자세한 설명은 로그 메시지 이해를 참조하세요.

정보 수집 스크립트

문제를 진단하는 데 문제가 있거나 일반적인 해결 방법으로 문제를 해결할 수 없는 경우, 지원 포럼이나 GitHub 이슈 에서 도움을 요청할 수 있습니다. 도움을 요청할 때 정보 수집 스크립트를 사용하여 시스템에 대한 정보를 수집하여 다른 사람이 문제를 진단하는 데 도움을 줄 수 있습니다. 공식 패키지 설치(우분투/데비안 또는 CentOS/레드햇의 경우)는 기본적으로 /opt/ripple/bin/getRippledInfo에 이러한 스크립트를 설치합니다. New in: rippled 1.5.0 rippled를 직접 컴파일한 경우, rippled 소스 코드 저장에서 동일한 스크립트를 찾을 수 있습니다. 스크립트를 사용하려면 다음과 같이 하세요:

  1. rippled이 실행 중인 상태에서 스크립트를 실행합니다.

$ /opt/ripple/bin/getRippledInfo

####################################################
  rippled info has been gathered. Please copy the
  contents of /tmp/ripple_info.Xo8Xr/rippled_info.md
  to a github gist at https://gist.github.com/

  PLEASE REVIEW THIS FILE FOR ANY SENSITIVE DATA
  BEFORE POSTING! We have tried our best to omit
  any sensitive information from this file, but you
  should verify before posting.
####################################################

스크립트는 여러 명령의 출력을 수집하여 임시 파일에 씁니다. 파일 이름은 문자와 숫자의 문자열(대소문자 구분)로 무작위로 지정됩니다: /tmp/ripple_info.Xo8Xr/rippled_info.md

  1. 출력 파일에 민감한 정보가 있는지 살펴봅니다. 스크립트는 유효성 검사기 키나 토큰과 같은 민감한 정보를 출력에서 스크러빙하려고 시도합니다. 그러나 예방 조치로 공개적으로 게시하기 전에 출력을 확인해야 합니다. 예를 들어 스크립트는 서버 하드웨어에 대한 자세한 정보를 출력하는데, 개인정보 보호를 위해 일부 섹션을 제거할 수 있습니다. 텍스트 편집기를 사용하여 출력 파일을 읽고 게시하고 싶지 않은 부분을 제거하세요.

nano /tmp/ripple_info.Xo8Xr/rippled_info.md
  1. 다른 사람들이 볼 수 있는 곳에 출력 파일을 업로드합니다. GitHub Gist, Pastebin 또는 유사한 서비스에 직접 파일을 업로드할 수 있습니다. 원격 서버에서 rippled를 실행하는 경우, 먼저 웹 브라우저가 있는 컴퓨터로 scp 또는 유사한 도구를 사용하여 파일을 전송하는 것이 더 쉬울 수 있습니다.

Last updated