안녕하세요. 현재 klaytn EN v1.6.3 를 운영하고 있습니다.
최근에 한번씩 txpool is full 에러 메세지가 뜨고 있어서 질문을 올리게 되었습니다.
해당 Transaction을 Caver-java에서 생성해서 전송한다고 하셨는데 해당 부분 코드 확인이 가능할지요?
receipt을 기다리거나 하는 로직이 없이 tx만 생성하여 KSCN에 전송을 하시게 되면 보통 sendTransaction 속도보다 block에 담아 처리되는 속도가 느리기 때문에 'txpool is full` 메시지가 발생됩니다.
이때는 해당 tx를 sendTransaction하는 것이 실패하였고 그 사유가 KSCN의 txpool의 사이즈가 가득 찾기 때문입니다. 그래서 이경우는 예외처리를 하여 다시 해당 tx로 전송을 시도하여야 합니다.
해당 에러가 발생되지 않는 경우에는 충분히 빠르게 tx를 전송하지 못하는 것으로 추측됩니다.
테스트 도중에 아래 API로 txpool의 상태를 확인해보시면 좋을것 같습니다.
(해당 API로 queued에 tx가 있는 것은 nonce를 제대로 정렬하지 않았다는 것이며 이것이 계속 늘어난다는 것은 특정 nonce가 빠…
검색을 통해 해당 댓글을 먼저 확인했습니다. EN이 가지고 있는 tx를 전파하여 블럭을 만드는 속도보다, 외부에서 들어오는 tx 갯수가 많아서 txpool이 가득 찼고 해당 에러가 발생할 수 있다고 이해하였습니다.
관련해서 궁금한 것이 있습니다.
우선 txpool is full 에러 메세지가 발생하는 원인을 제가 올바르게 이해한 것이 맞을까요?
txpool 사이즈를 설정에서 바꿀 수 있는 방법이 있을까요? (TXPOOL_EXEC_SLOTS_ALL, TXPOOL_NONEXEC_SLOTS_ALL, … 와 같은 환경변수 를 확인했는데 먼저 이 값을 바꾸는게 맞는지 모르겠고 맞다면 어떤 값을 바꿔야할지 모르겠습니다.)
tx를 쏘는 노드 클라이언트 단에서 에러 핸들링을 할 수 있지만 노드 쪽에서도 에러가 발생하지 않을 방법을 찾고 있습니다. 생각하기에 EN 노드를 스케일링 할 수 있다면 해당 문제를 해결할 수 있을 것으로 보입니다. 클라이언트들의 tx들을 노드들이 나눠서 가질 것이기 때문입니다. 혹시 맞을까요?
@Ethan
답변 감사합니다.
3번에 대한 답변에서 '연결하지 않는다면’이라함은 EN 끼리 피어로 등록하지 않는다는 말씀이실까요?
Ethan
10월 13, 2021, 5:08오전
4
네 맞습니다. EN간에도 Tx를 전파하기 때문에 서로 Tx를 공유할수도 있어서 연결을 하지 않는다면 Tx를 공유 못하니 다른 외부 EN과 PN으로만 전파를 하여 원하시는데로 분리하여 사용 가능하십니다.^^
2개의 좋아요
kice
12월 10, 2021, 4:03오전
5
안녕하세요.
말씀하신대로 EN끼리 피어로 등록하지 않으려면 EN 블로킹을 어떤 설정으로 해야하는지 궁금합니다.
그리고 EN-A와 EN-B를 직접 피어 연결을 하지 않더라도 다른 노드를 통해서 결국 EN-A에서 발생시킨 트랜잭션이 EN-B의 Tx풀에 들어오는 것은 아닌지요?