📝
[小ネタ] Lambda のファイルディスクリプタ超過時のエラーを確認してみた
リソース クォータ ファイルディスクリプタ 1,024
以下のエラーが発生しました。
OSError: [Errno 24] Too many open files: 'ファイル名'
検証コード
import os
def lambda_handler(event, context):
open_files = []
try:
for i in range(2000):
f = open("/tmp/testfile.txt", "w")
open_files.append(f)
f.write("test\n")
return {
'statusCode': 200,
'body': f'Successfully opened {len(open_files)} files'
}
except OSError as e:
return {
'statusCode': 500,
'body': str(e)
}
実行結果は以下の通りです。
{
"statusCode": 500,
"body": "[Errno 24] Too many open files: '/tmp/testfile.txt'"
}
Too many open files というエラーであることを確認できました。
上限について
関数の設定、デプロイ、実行には、次のクォータが適用されます。特に明記されていない限り、変更できません。
上記ドキュメントの通り、ファイルディスクリプタの上限である 1,024 はハードリミットであるため上限緩和できません。
そのため、コードレベルでファイルをクローズするなどの対応が必要です。
まとめ
今回は Lambda のファイルディスクリプタ超過時のエラーを確認してみました。
どなたかの参考になれば幸いです。
Discussion