新连接错误:<botocore.awsrequest.AWSHTTPSConnection object at 0x7f17c56ebe80>

问题描述 投票:0回答:1

我正在 Ec2 实例中运行类似的脚本:

https://github.com/aws-samples/kinesis-poster-worker/blob/master/poster.py

这是我的完整脚本:

https://gist.github.com/nhammad/1950d68434d754413a798e5a8d1c9f80

当我这样运行时:

python3 poster.py --region eu-central-1 --poster_count 40 --poster_time 60 --quiet kinesis_stream_name

效果很好。但是一旦我增加海报计数和海报时间,我就会收到错误:

python3 poster.py --region eu-central-1 --poster_count 900 --poster_time 14400 --quiet nh_load_testing 
NewConnectionError: <botocore.awsrequest.AWSHTTPSConnection object at 0x7f17c56ebe80>: Failed to establish a new connection: [Errno 24] Too many open files

....

botocore.exceptions.SSLError: SSL validation failed for https://kinesis.eu-central-1.amazonaws.com/ [Errno 24] Too many open files
Exception in thread shard_poster:734:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 169, in _new_conn
  File "/usr/lib/python3/dist-packages/urllib3/util/connection.py", line 73, in create_connection
  File "/usr/lib/python3.10/socket.py", line 955, in getaddrinfo
OSError: [Errno 24] Too many open files

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/dist-packages/botocore/httpsession.py", line 465, in send
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 755, in urlopen
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 507, in increment
  File "/usr/lib/python3/dist-packages/six.py", line 719, in reraise
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 699, in urlopen
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 382, in _make_request
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 1012, in _validate_conn
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 353, in connect
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 181, in _new_conn
urllib3.exceptions.NewConnectionError: <botocore.awsrequest.AWSHTTPSConnection object at 0x7f17c56ebe80>: Failed to establish a new connection: [Errno 24] Too many open files

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
  File "/home/ubuntu/poster.py", line 329, in run
  File "/home/ubuntu/poster.py", line 292, in put_all_records
  File "/home/ubuntu/poster.py", line 314, in put_records
  File "/usr/local/lib/python3.10/dist-packages/botocore/client.py", line 535, in _api_call
  File "/usr/local/lib/python3.10/dist-packages/botocore/client.py", line 963, in _make_api_call
  File "/usr/local/lib/python3.10/dist-packages/botocore/client.py", line 986, in _make_request
  File "/usr/local/lib/python3.10/dist-packages/botocore/endpoint.py", line 119, in make_request
  File "/usr/local/lib/python3.10/dist-packages/botocore/endpoint.py", line 202, in _send_request
  File "/usr/local/lib/python3.10/dist-packages/botocore/endpoint.py", line 354, in _needs_retry
  File "/usr/local/lib/python3.10/dist-packages/botocore/hooks.py", line 412, in emit
  File "/usr/local/lib/python3.10/dist-packages/botocore/hooks.py", line 256, in emit
  File "/usr/local/lib/python3.10/dist-packages/botocore/hooks.py", line 239, in _emit
  File "/usr/local/lib/python3.10/dist-packages/botocore/retryhandler.py", line 207, in __call__
  File "/usr/local/lib/python3.10/dist-packages/botocore/retryhandler.py", line 284, in __call__
  File "/usr/local/lib/python3.10/dist-packages/botocore/retryhandler.py", line 320, in _should_retry
  File "/usr/local/lib/python3.10/dist-packages/botocore/retryhandler.py", line 363, in __call__
  File "/usr/local/lib/python3.10/dist-packages/botocore/retryhandler.py", line 247, in __call__
  File "/usr/local/lib/python3.10/dist-packages/botocore/retryhandler.py", line 416, in _check_caught_exception
  File "/usr/local/lib/python3.10/dist-packages/botocore/endpoint.py", line 281, in _do_get_response
  File "/usr/local/lib/python3.10/dist-packages/botocore/endpoint.py", line 377, in _send
  File "/usr/local/lib/python3.10/dist-packages/botocore/httpsession.py", line 494, in send
botocore.exceptions.EndpointConnectionError: Could not connect to the endpoint URL: "https://kinesis.eu-central-1.amazonaws.com/"
python amazon-web-services amazon-ec2 boto3 amazon-kinesis
1个回答
0
投票

您看到的错误消息

[Errno 24] Too many open files
与操作系统的文件描述符限制有关。类 Unix 操作系统中的每个打开的连接、文件或套接字都需要一个文件描述符。一旦用完它们,系统就无法再打开任何连接或文件,直到某些连接或文件被关闭为止。

当您增加

poster_count
poster_time
时,Python 脚本似乎正在尝试建立比系统限制允许的更多连接或同时打开更多文件。

您可以采取以下几个步骤来解决该问题:

  1. 增加文件描述符限制

    • 临时(直到下次重新启动):
      ulimit -n 65535
      
    • 永久:编辑
      /etc/security/limits.conf
      文件(需要root访问权限)并添加:
      * soft nofile 65535
      * hard nofile 65535
      
      然后,重新启动系统。
  2. 检查并关闭不必要的打开文件:在增加限制之前,请确保没有任何不需要的进程使许多文件保持打开状态。您可以使用

    lsof
    命令列出打开的文件。

  3. 连接池和重用:如果您的脚本为每个操作创建与 AWS 的新连接,请考虑使用连接池或重用连接。这不仅有助于减少打开文件的数量,还可以提高脚本的性能。 boto3 库(botocore 是其中的一部分)应该为您处理这个问题,但要确保您不会无意中为每个请求创建新会话。

  4. 查看脚本:您的

    poster.py
    脚本中可能存在连接或文件已打开但未正确关闭的区域。确保在不再需要时关闭任何连接、套接字或文件。

© www.soinside.com 2019 - 2024. All rights reserved.