ロリポップレンタルサーバーでMYSQLのタイムアウトでハマる。
ロリポップでCRONを使ってあるデータを取得する処理を書いたのですが、処理の最後にあるDBへのデータ挿入が何故か失敗する。
mysql_error()でエラーを表示してみたところ、表示されるエラーは↓これ
MySQL server has gone away
SQL発行時にコネクションがクローズされると出るエラーらしいです。
しかしコードのどこをみてもmysql_close()はしていない。
connect timeoutが原因だった。
作成したプログラムは開始から終了まで20秒程かかる。
流れとしては開始→DB接続→1秒のスリープを15回程入れながら他サーバーからデータ取得→最後にDBにデータを挿入するといった流れでした。
つまりDB接続からDBへのデータ挿入までに15秒以上の空きが発生します。
こんなプログラムは殆ど書かないので、気がつくまでに結構時間がかかりました。
原因はMYSQLのconnect timeoutです。
調べてみたところ、ロリポップではデフォルトの10秒です。
DBの接続をデータ挿入直前に移動して解決しました。
てっきりロリポップ特有の現象かと思ったのですが、プログラムに問題がありました。
他サーバーのconnect timeout値を調べてみる
なんとなく気になったので、他のレンタルサーバーの設定値を調べてみました。
- CORESERVER→5秒
- ハッスルサーバー→10秒
- XSERVER→10秒
- さくら→30秒
- エクストリム→10秒
どんな理由で変更しているのかわかりませんが、CORESERVERとさくらはデフォルトの値から変更されていました。
さくらはなんと通常の3倍の値です。
この記事へのコメントはありません。