geolonia / normalize-japanese-addresses

オープンソースの住所正規化ライブラリ。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

低確率でタイムアウトが発生する

hirokoma opened this issue · comments

お世話になっております。

@geolonia/normalize-japanese-addresses のバージョン 1.1.0 をAWS Lambdaで運用しているのですが、1日あたり1000〜2000程度のリクエストのうち数%のリクエストでタイムアウト発生していることが判明しました。

Lambdaで運用しているソースコードは以下の通りです。

const { normalize } = require('@geolonia/normalize-japanese-addresses')

exports.lambdaHandler = async (event) => {
    const request_body = JSON.parse(event.body);
    const result = await normalize(request_body.text);

    console.log(request_body);

    console.log("住所正規化結果");
    console.log(result);

    let response = {
        statusCode: 200,
        headers: {
            "x-custom-header": "my custom header value"
        },
        body: JSON.stringify(result),
    };
    return response;
}

貴社でもLambdaで運用されているとのことでしたが、同様の現象は起きていらっしゃいますでしょうか。

capture_20210715200628

ご報告ありがとうございました。
Lambda関数の nodejs バージョン、タイムアウト設定、メモリ設定を教えていただけると助かります。また、失敗したリクエストのログ1つか2つぐらいあれば助かります。

@miya0001 さま、@keichan34さま、ご返答いただきまして誠にありがとうございます。
以降、@hirokoma に変わりまして、私@ekurericeが対応いたします。

Lambdaの環境情報、およびログ情報についてでございますが、以下のようになっております。
ログ情報ですが、失敗時のログと、同住所で再度正規化をやり直したときのログ(成功パターン)を掲載致しております。

注意事項といたしまして、@hirokomaより共有したLambdaハンドラーについて、ログ出力の部分を若干修正しております。
この修正により、正規化処理の成功可否に関わらず、インプットの住所を必ず出力するようになっております。

■Lambda関数の nodejs バージョン
amazon/aws-lambda-nodejs:14

■タイムアウト設定
0分30秒

■メモリ設定
128MB

■失敗したリクエストのログ

REPORT RequestId: 9ab0b4bb-5411-40bb-bcff-6aee7a5bc5f1	Duration: 2354.46 ms	Billed Duration: 2355 ms	Memory Size: 128 MB	Max Memory Used: 128 MB	
START RequestId: c9d9f685-3ffc-49ec-8b7e-2a489ce4946c Version: $LATEST
2021-07-16T03:58:38.517Z	c9d9f685-3ffc-49ec-8b7e-2a489ce4946c	INFO	{ text: '和歌山県和歌山市湊本町3丁目3番地' }
END RequestId: c9d9f685-3ffc-49ec-8b7e-2a489ce4946c
REPORT RequestId: c9d9f685-3ffc-49ec-8b7e-2a489ce4946c	Duration: 32031.12 ms	Billed Duration: 30000 ms	Memory Size: 128 MB	Max Memory Used: 128 MB	
2021-07-16T03:59:10.367Z c9d9f685-3ffc-49ec-8b7e-2a489ce4946c Task timed out after 32.03 seconds

■上記と同じ住所で、正規化処理を追試した結果(成功パターン)

START RequestId: d5b69f1e-49c5-4664-92c5-924980422b2f Version: $LATEST
2021-07-16T03:59:07.780Z	d5b69f1e-49c5-4664-92c5-924980422b2f	INFO	{ text: '和歌山県和歌山市湊本町3丁目3番地' }
2021-07-16T03:59:07.820Z	d5b69f1e-49c5-4664-92c5-924980422b2f	INFO	住所正規化結果
2021-07-16T03:59:07.820Z	d5b69f1e-49c5-4664-92c5-924980422b2f	INFO	{ pref: '和歌山県', city: '和歌山市', town: '湊本町三丁目', addr: '3', level: 3 }
END RequestId: d5b69f1e-49c5-4664-92c5-924980422b2f
REPORT RequestId: d5b69f1e-49c5-4664-92c5-924980422b2f	Duration: 299.37 ms	Billed Duration: 300 ms	Memory Size: 128 MB	Max Memory Used: 128 MB

■<参考>修正後のLambdaハンドラー

exports.lambdaHandler = async (event) => {
    const request_body = JSON.parse(event.body);
    console.log(request_body);
    const result = await normalize(request_body.text);

    console.log("住所正規化結果");
    console.log(result);

    let response = {
        statusCode: 200,
        headers: {
            "x-custom-header": "my custom header value"
        },
        body: JSON.stringify(result),
    };
    return response;
}

詳細にありがとうございました。

Memory Size: 128 MB Max Memory Used: 128 MB

なので、おそらくメモリがいっぱいになっていますね。。 normalize-japanese-addresses は様々な情報をキャッシュしており、128MBが正直厳しいと思います。。弊社で normalize-japanese-addresses を利用しているサービスの場合はだいたい 120MB - 250MB を使用しているので、256MBや512MBに設定することをおすすめします。

@keichan34
ご連絡いただきましてありがとうございます。

なので、おそらくメモリがいっぱいになっていますね。。 normalize-japanese-addresses は様々な情報をキャッシュしており、128MBが正直厳しいと思います。。弊社で normalize-japanese-addresses を利用しているサービスの場合はだいたい 120MB - 250MB を使用しているので、256MBや512MBに設定することをおすすめします。

承知いたしました、メモリを増加させようと思います。
ご助言いただきましてありがとうございました。