開発マシン (MacOS 10.8.3 搭載の MacBook Air) で電子メールの送信に問題が発生しています。痛いほど遅いです。ただし、速度はインターネットへの接続方法によって異なります。自宅の WiFi 接続を使用している場合、メールの送信には 30 秒ほどかかります。友人の家や、iPad を介した LTE 経由など、他の方法で接続している場合、電子メールの送信は高速です (1 秒未満)。
Django debug_toolbar を使用して、getfqdn
関数を犯人として特定しました。SMTP サーバーへの接続を開くときに呼び出されます。
Call CumTime Per TotTime Per Count
... SNIP ...
31.673 31.673 0.000 0.000 1
- /Users/<SNIP>/virtualenv/src/django/django/core/mail/message.py in send(249)
31.627 31.627 0.000 0.000 1
- /Users/<SNIP>/virtualenv/src/django/django/core/mail/backends/smtp.py in send_messages(80)
31.623 31.623 0.000 0.000 1
- /Users/<SNIP>/virtualenv/src/django/django/core/mail/backends/smtp.py in open(37)
30.821 30.821 0.000 0.000 1
- /Users/<SNIP>/virtualenv/src/django/django/core/mail/utils.py in get_fqdn(14)
30.147 30.147 0.000 0.000 1
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py in getfqdn(124)
30.147 30.147 0.000 0.000 1
として完全修飾ドメイン名smtp.sendgrid.net
または IP アドレス50.97.69.146
を使用してみましたEMAIL_HOST
。どちらのシナリオでも、一貫しgetfqdn
て約 30 秒かかります。
おそらく問題が下の方にあるのではないかと考えて、端末を使用して SMTP ポートに telnet で接続しようとしました。端末から telnet する場合、ホスト名を使用すると約 5 秒かかります。
> time echo 'quit' | telnet smtp.sendgrid.net 587
Trying 75.126.83.211...
Connected to smtp.sendgrid.net.
Escape character is '^]'.
Connection closed by foreign host.
echo 'quit' 0.00s user 0.00s system 45% cpu 0.002 total
telnet smtp.sendgrid.net 587 0.02s user 0.01s system 0% cpu 5.197 total
または、IP アドレスを使用する場合は約 250 ミリ秒:
> time echo 'quit' | telnet 50.97.69.146 587
Trying 50.97.69.146...
Connected to 50.97.69.146-static.reverse.softlayer.com.
Escape character is '^]'.
Connection closed by foreign host.
echo 'quit' 0.00s user 0.00s system 42% cpu 0.002 total
telnet 50.97.69.146 587 0.02s user 0.01s system 8% cpu 0.259 total
問題の一部 (端末実験で実証) は、DNS ルックアップが遅い (約 5 秒) ために発生していることを理解しています。Django/Python の残りのスローダウンはどこから来るのですか?