2台のサーバーがあります(AとBという名前を付けます)。
事実:
- それらは同じCPU、メモリ、マザーボード、ハードドライブ、アップリンク速度を持っています。
- これらは両方とも、Python2.7.3とDjangoの最新リビジョンを備えたUbuntu12.04上にあります。
- また、同じ名前のサーバーが設定された同じデータセンターにあります。
- ネームサーバーと同様のpingとtracerouteの結果が得られます。
サーバーAは正常に動作します。私の問題は、Pythonを使用してインターネットに接続するときにサーバーBが非常に遅いことです。
以下は、両方のサーバーで行ったテストです(domain_list_1とdomain_list_2は、各リストに100個の一意のドメインを含む2つのリストです)。
テスト1:
starttime = time.time()
for domain in domain_list_1:
ip = socket.gethostbyname(domain)
print '%.1f items per second' % (100/(time.time()-starttime))
>> Server A Results: 3.3 items per second
>> Server B Results: 0.7 items per second
テスト2:
starttime = time.time()
for domain in domain_list_2:
os.system('nslookup %s > /dev/null' % domain)
print '%.1f items per second' % (100/(time.time()-starttime))
>> Server A Results: 3.3 items per second
>> Server B Results: 3.3 items per second
テスト2からわかるように、サーバーBのネットワークには問題はありません。
urllib2で同様のテストを行いましたが、結果は同じです(サーバーAは問題ありませんが、サーバーBはwgetまたはcurlを使用して同じジョブを実行するよりもurllib2を使用すると低速です)。だから私はそれがPythonの問題だと信じています。サーバーBのPythonセットアップで何がうまくいかなかったのかわかりません。
内部プロセスをプロファイリングして、コードのどの部分がプロセス全体の速度を低下させているかを確認する方法はありますか?
前もって感謝します!