【Symbolテストネット負荷テスト祭り:結果報告】
皆さん、先日は長い長い耐久テスト、最後までトランザクションを途切れさせることなく負荷をかけ続けてくださり、ありがとうございました!そしてお疲れ様でした!
早速ですが、実施結果や発生した問題点、またそれらに対しての現時点の対応状況をまとめましたので、ご報告いたします。
イベント内容
Symbolローンチまでのロードマップにのっとり、コミュニティーテストの一環として「コミュニティー主導でSymbolテストネットに負荷をかけ続けるストレステスト」を実施いたしました。
※詳細に関しては、以下のリンク先をご参照ください。

負荷テスト結果
・負荷テストという観点では「クリア」
※負荷テストとは何か?
ブロックチェーンは情報が詰まったブロックが連なっているのはご存じの通りだと思います。
Symbolは1つのブロック内に最大「6000」件のトランザクション(取引)を格納することが出来ます。Symbolのブロック生成時間は「約30秒」ですので、最大で30秒間に6000取引が捌ける設計ということです。(それぐらい取引件数がある未来は嬉しいですね。)
では、負荷テストとは何か?ですが、それは、
トランザクションを大量に発生させ、1ブロック当たりに格納される取引数を6000件に近づけつつ、その状態を数時間キープすることが出来るかテストすることです。全力で走り続けるのはとても大変なことですが、Symbolがその状態でも、走り続けられるか(ノードが落ちたりしないか)をテストいたしました。
負荷テスト結果の考察
- Symbolのテストネットは、ブロック生成時間が30秒、1ブロック当たりのトランザクション数が6000txとなっているが、ストレステスト中はそれを上回るトランザクションを送り続けた。
- ウォレット等でタイムアウトする事象が確認されたが、ウォレット自体の不具合やRESTゲートウェイに規定以上のアクセスがあり、一定期間内に処理が終了できなかったことやアクセスが拒否されたこと、未承認のトランザクションが規定数以上になったことなどが考えられる。
- 大量のトランザクションが送信され、未承認のトランザクションが相当数あると推定される時に、1ブロックに少数のTxしか取り込まれない事象が確認されたが、これは、そのブロックをハーベストしたノードが、手数料最大化戦略によって最大の手数料を得ようとした結果であり、システムとしては正常であることが確認された。
※詳細は、「テスト中に発生した事象」の章をご参照ください。 - 1月27日に発生した不具合の再現のためのトランザクションを送信するまではほとんどのノードが停止せず、ネットワーク全体としては大量のリクエストによる負荷に対して耐え続けることができたと考えられる。
イベント参加アドレス&ノード数
■参加アドレス数:667 アドレス(※1)
■対象ノード数 :461 ノード
沢山のご参加ありがとうございました!
※1:アドレスに関しては、負荷テストツールを利用して参加されたアドレス数のみをカウントしている為、実際にはこれ以上の参加アドレス数となると思われます。負荷テストツールに関しては、以下のリンク先をご参照ください。

負荷テスト中の実績
⑴総リクエスト数
■18:00~22:00 7,542,827件
■19:00~22:00 7,249,639件
なんと、700万件を超えるリクエストが送られました!
⑵負荷テスト中に取り込まれたトランザクション(Tx)詳細
■取り込まれた総Tx数 1,751,022件
■1ブロック当たりの平均Tx数 4025.3件
■ブロック充足率 67.1%
■平均秒間処理性能 134.2TPS
平均でも1ブロック当たり4000件のTxが詰め込まれ続けました!
⑶負荷テストツールからのTx送信数グラフ
グラフとしてみると、非常に分かりやすいですね。イベント開始直後(19:00)に飛びぬけてTxが送信されております。みなさん!ご協力ありがとうございます!
⑷ブロック統計
イベント中に発生したブロックとその中に含まれるTx数や生成時間に関してまとめました。是非ご覧ください!
テスト中に発生した事象
⑴発生した事象
・負荷テスト中に大量のTxがあるはずなのに1ブロック当たりに1Txしか取り込まれない現象が発生いたしました。
※5000Tx近くを保有するブロックがある中(緑だるま)、3Txなど極端に少ないTx保有数のブロックが存在しております(赤だるま)
⑵障害か否か?
・正常な挙動です(障害ではありません)
⑶正常だという理由
・コア開発者のJaguarさんよると、ハーベストの設定を「maximize-fee」としたノードがブロック生成した場合に、得られるブロック報酬を最大化しようとした結果発生するとの回答を得ました。
⑷なぜそうなるのか?
・ハーベスト報酬にはトランザクション手数料が含まれますが、トランザクション手数料はトランザクションのサイズに手数料倍率をかけた値となり、ユーザがトランザクションを送信する際に、その最大値を設定することとなります。
未承認のトランザクションが100個あるとして、1つは最大5000倍で残り99個は最大1倍とした場合に、最大5000倍のTxのみを取り込んだ場合、5000倍の手数料を得ることができます。
ところが、最大5000倍のTxの他に残り99個のTxも含もうとした場合、残り99個のTxの手数料倍率は最大1倍となっているため、最大5000倍のTxもそれに合わせて手数料倍率が1倍となります。ここでのポイントは最大5000倍のTxはあくまで最大5000倍払うという意思表示であり、それ以下でも問題ないという意味で、全てのTxを含もうとした場合、手数料倍率1倍のTxを100個取り込むこととなるため、得られる手数料は100となります。一方、5000倍のTxを1つだけ取り込んだ場合、5000の手数料を得られます。
よって、得られる手数料を最大化する戦略を選択しているノードではあえて1Txだけをブロックに取り込み、他のTxを無視するという現象が発生するということになります。
なので、一見不思議な挙動ではありますが、システムとしては正常な挙動であると言えます。
2021/2/2追記 不具合の進捗状況
本イベント内で再現した不具合の進捗状況(2/2現在)は以下のリンク先をご覧ください。

NEMTUSより
改めて、イベントへのご参加ありがとうございました。皆さんからのご感想を見ておりますと、楽しかった!等の声が多く聞こえましたので、とても嬉しく思いました。今回のイベント内容で「楽しかった!」というご感想があることは、世界的にどのジャンルを見ても稀有なことだと思います。そもそもテストというものは、情報漏洩の理由からも、契約がなされた人員だけでクローズドにされるものです。ですが、そこが分散型であるブロックチェーンの素晴らしいところですね。我々が参加出来るのですから。とはいえ、テスト(特にストレステスト)というのは本当に地味で、大変で、楽しいものではないのです。報酬が無ければ、敬遠するものなのです。にもかかわらず、多くの人が集まってくれました。感動しました。比較するものではありませんが、他の分散型のシステムで、コミュニティー主導(無償)で、正式なローンチ前にテストを実施した。こんな話、聞いたことがあるでしょうか?今回のイベントであらためて、「NEMは誰のものでもなく、それでいてみんなのもの」なんだという気持ちになりました。ローンチ前の最終版が完成した際も、その時に沿った形で最終テストを実施したいと思います。その際も、是非皆さんのご協力よろしくお願いします!!