はじめに
DSからMCへ大きなロボットを複数アップロード中、Read timed out(タイムアウトエラー)が発生してしまいました。
このタイムアウトはどこのタイムアウトなのか。ボトルネックは何になるのかを探してみました。
目次
調査記録
正常にアップロードできた時の各ログと比較してみたところ(※)、HTTP通信の時間が10秒以上かかった時にRead timed outのエラーが発生している・・・?
※Tomcatのアクセスログ(localhost_access_log)から確認しました。
例えば以下のログでは12.997秒かかっています。
127.0.0.1 - - [05/Aug/2024:10:18:17 +0900] POST /mc/secure/RepositoryAPI HTTP/1.1 200 264 (12.997)
通信に時間がかかる原因を探っていると、MySQLのerrログにinnodb_redo_log_capacityの拡張を促すログが残っていました。
これが原因で、TomcatとMySQLの通信が遅くなっているのかも。
Redo log writer is waiting for a new redo log file. Consider increasing innodb_redo_log_capacity.
↓
redo_log_capacityを拡張することで正常にアップロードすることができました。
redo_log_capacityの拡張方法
my.iniを開き、redo_log_capacityの値を変更後、MySQLを再起動すると反映されます。
※my.iniの場所:
C:\ProgramData\MySQL\MySQL Server {バージョン}
追加調査記録
redo_log_capacityのエラーさえなければ、Read timed outのエラーが起こらないのか気になったので追加で検証してみました。
結果としては、以下3パターンでRead timed outエラーが発生してしまいました。
・MySQLのBuffer_Pool_Sizeを小さくする
・MCの画面を開いてDBに負荷をかけながらアップロード作業を行う
・MySQLの端末そのものに高負荷をかけた状態でアップロード作業行う
単純にMySQLのパフォーマンスが落ちているだけでもRead timed outが発生するみたいです。
なので、Buffer_Pool_Sizeはできる限り大きくしておきたいところ。
・・・とはいっても、Buffer_Pool_Sizeを上げすぎると端末側が高負荷の状態になってしまいます。
そこで、タイムアウトの秒数の方を変更する方法を探ってみたところ、confファイルに追記するだけで秒数を延ばせるプロパティを発見しました。
これで、Buffer_Pool_Sizeを必要以上に拡張せずとも、正常にアップロードすることができました。
HTTP通信のタイムアウト値を延ばす方法
「Design Studio.conf」を開き、以下のプロパティを末尾に追記後、DSを再起動。
※「DesignStudio.conf」の場所:
C:\Program Files\BizRobo Basic {バージョン}\bin
※追加するプロパティ(60秒の場合):
wrapper.java.additional.<N>=-Drepository.timeout.millis=60000
↑
<N>はファイル内で重複しない数値を設定しました。
おわりに
これまで大きなロボットを複数台アップロードしたい時には、少しずつ時間をかけてアップロードしていました。
今回発見した方法によって、アップロード作業の時間を大幅に減らすことができました。