Spigot 1.8.3 + Hawkeye issue
鯖をCraftBukkit 1.7.2 -> Spigot 1.8.3 に変えてみたところ案の定いろいろ問題が出たけども、その中で最も危険だった問題点をメモしておく。
1.8.3 への移行直後、Spigot鯖とは別のネットワークに置いてあったMySQL鯖に対してHawkeyeがすごい勢いでクエリを投げはじめ、送りきれないQueueが大量に蓄積されていってサーバが非常に重くなる現象が発生、まともにゲームができなくなってしまった。
取り急ぎHawkeyeの接続先をSpigot鯖のローカルのMySQLに変えたのだけれども、その後しばらく運営していると、サーバの空き容量が激減していることに気づき、いろいろ調べた結果MySQLのデータベースがこんなんなっていた。
root@nagato:/var/lib/mysql# ls -lah
total 80G
drwx------ 10 mysql mysql 4.0K May 7 17:47 .
drwxr-xr-x 59 root root 4.0K Nov 5 2014 ..
-rw-rw---- 1 mysql mysql 80G May 9 02:11 ibdata1
...
3日前までは合計10MBも使っていなかったようなDBが80GBだと…!?
中身を見ようにもselectするとOutOfMemoryになってしまうような状況なので、Hawkeyeの書き込み先tableを変えて数分動かしてみたところ、秒速3500行、時速にして1260万行のデータがMySQLに送られていることが判明。
| 25077 | 2015-05-09 01:18:37 | 1 | 28 | 1 | -127 | 61 | 211 | +263:1~1 |
| 25078 | 2015-05-09 01:18:37 | 1 | 28 | 1 | -127 | 61 | 211 | +263:1~1 |
| 25079 | 2015-05-09 01:18:37 | 1 | 28 | 1 | -127 | 61 | 211 | +263:1~1 |
| 25080 | 2015-05-09 01:18:37 | 1 | 28 | 1 | -127 | 61 | 211 | +263:1~1 |
| 25081 | 2015-05-09 01:18:37 | 1 | 28 | 1 | -127 | 61 | 211 | +263:1~1 |
| 25082 | 2015-05-09 01:18:37 | 1 | 28 | 1 | -84 | 56 | 187 | +17:1~1 |
| 25083 | 2015-05-09 01:18:37 | 1 | 28 | 1 | -84 | 56 | 187 | +17:1~1 |
| 25084 | 2015-05-09 01:18:37 | 1 | 28 | 1 | -84 | 56 | 187 | +17:1~1 |
...
これらのデータが何を意味しているかというと、こちら。
接続先が一杯で内容物を移動できないホッパーのchest transaction(28)が大量に記録されていたのだった。1.8になってEventの挙動が変わったのか?
まあホッパー内にある(=運搬するような)アイテムの情報が重要である可能性はほぼないと考えられるので、ホッパーのログをfilterしてしまうことにした。
対策
plugins/Hawkeye/config.yml のcontainedtransaction-filter: hopperの部分をfalseに書き換える。
containertransaction-filter:
chest: true
doublechest: true
furnace: true
dispenser: true
hopper: false
dropper: true
結果、Hawkeyeのデータ量は15分で800行ぐらい(秒速1行以下)となりました。 めでたしめでたし。
そして肥大化したDBだけが残った。