【GCP】Cloud Runが意外なところでハングアップしてたときの話

てきとうにいろいろ

【GCP】Cloud Runが意外なところでハングアップしてたときの話

GCP(Google Cloud Platform)のCloud RunでAPI作って動かしてたときのこと。

だいぶ省略してるけどこんな感じ。

let hoge = [];

for (i = 0; i <= 100000; i++) {
	hoge.push(i)
}

console.log(hoge)

外部APIにhogeを渡す...

ほんとは150万件とかデータがあって、これを外部APIに渡すときにエラーになってた。

エラーの原因は簡単で、データ量が多すぎ
これを数万件ずつ渡していくと動くようになった。

と、今から考えると簡単なことだったのですが、ここまで来るのに意外なことで躓いたてたので、その内容を紹介。

データ量が多すぎるとうのは早くから分かってたので、データを区切って渡すように改修した。

let hoge = [];

for (i = 0; i <= 100000; i++) {
	hoge.push(i)
}

console.log(hoge)

hogeを1万件くらいずつに区切って、外部APIに順々に渡していく。

が、動かない。
どうも1件も処理されてないみたい

1万件でも多いのかな~ってことで、9000、8000とどんどん下げて行っても動かない。

これで悩み続けること数時間。。。

とある疑問が出てきた。

console.log(hoge)

これは本当にログが出ているのだろうかということ。

あまりにも件数が多いので、全部目で追うのは不可能。
ですが、いちよCloud Loggingにはhogeの中身が1件ずつ表示されてる。
なので全部出てるはず。。。

が、よくよく見ていくと、どう考えても数万件しか出てない。

というわけで、ためしにconsole.log部分をコメントアウトしてみる。

let hoge = [];

for (i = 0; i <= 100000; i++) {
	hoge.push(i)
}

//ここをコメントアウトしてみる
//console.log(hoge)

hogeを1万件くらいずつに区切って、外部APIに順々に渡していく。

無事動いた。。。
結果的に数十万件渡しても大丈夫だった。

で、結局これで何が起きていたかと言うと、console.log部分で書き出すデータが多すぎて、ログに書き出すところでCloud Runが止まってたみたい。

正直これは盲点すぎた。

同じようなことをブラウザで実行してみると、こんなログが出て秒で終わる。

なので、まさかこんなことでハングアップしているとは思ってもみなかった。

さらに、Cloud Runは規定時間内に処理が終わらないと、規定時間で処理が終わるということがあります。
そのため、規定時間内に処理が終わるようにしないといけないわけですが、たいしたことしてないのにやたら時間がかかってた。

この原因もconsole.logで、ログに書き出すデータが多すぎて、そこで時間がかかってた。

で、不要なconsole.logをコメントアウトしていったところ、ものすごく快調に動くようになった。

console.logの書きすぎも問題ですね。。。
適度に入れておいて本番では消すとかにしたほうがいいのかもなぁ。

というわけで、「なんかこのシステム遅いけど原因がわからない」というときは、console.logを消してみると上手く動いたりするかもしれません。