Pythonでrequestsライブラリを使ってAPIにアクセスしようとしたとき、以下のようなエラーが出ることがあります。
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='...', port=443): Max retries exceeded with url: /... (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x...>: Failed to establish a new connection: [Errno 12] Cannot allocate memory'))
このエラーの原因と対処法をまとめました。
原因:メモリ不足
Errno 12はOSレベルのエラーで、**「メモリが足りなくて接続できなかった」**ことを示します。特に以下のような環境でよく発生します:
- メモリが512MB〜1GB程度の軽量サーバー
- スワップ領域が設定されていない
- 同時に重いプロセスを動かしている
対処法
✅ スワップ領域の確認・追加(Linux系サーバー)
free -m
でスワップが0と出た場合は、以下のコマンドでスワップを作成できます:
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
これでメモリ不足時にスワップが使われるようになり、安定します。
✅ 不要なプロセスの終了
サーバーで他のプロセスが暴走していると、メモリを圧迫します。以下のコマンドで確認・終了しましょう:
top
ps aux --sort=-%mem | head
無駄なプロセスがあれば、killコマンドで終了させます。
✅ requests.get()の改善
大きなレスポンスを扱う場合、stream=Trueを使うとメモリ使用量を抑えられます:
response = requests.get(url, stream=True)
また、同時に大量のリクエストを投げている場合は、並列数を減らす・時間を空けるなどの工夫も必要です。
✅ メモリ増設の検討
根本的な解決として、サーバーのメモリ容量(例:512MB→1GB)を増やすのも非常に効果的です。
おわりに
このエラーは一見するとネットワーク問題のように見えますが、実際にはメモリ不足が原因であるケースも多いです。
落ち着いて環境の状態を確認し、適切に対処することが大切です。


コメント