Pythonで”requests.exceptions.ConnectionError”が出たときの対処法(メモリ不足編)

※当サイトではアフィリエイト広告を利用しています

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)を増やすのも非常に効果的です。


おわりに

このエラーは一見するとネットワーク問題のように見えますが、実際にはメモリ不足が原因であるケースも多いです。

落ち着いて環境の状態を確認し、適切に対処することが大切です。

コメント